the scene > flash actionscript

pivot noktasini resimin ortasina almak

(1/1)

sorusoran:
selamlar actionscript 3 de ekledigim resimi dondurmek istiyorum assagida yazdigim kodla oluyor yalniz pivot noktasini resmin ortasina almak istiyorum

api nin hangisini kullanmam gerekiyor? yol  gosterici fikirde versenizde olur point'imi kullanacagim?


package {
import flash.display.Bitmap;
import flash.display.Sprite;
import flash.events.Event;
import flash.events.TimerEvent;
import flash.geom.Point;
import flash.text.TextField;
import flash.utils.Timer;

public class sdf extends Sprite{
[Embed(source="img/back.png")]
public var backImg:Class;
private var texts:TextField =new TextField();
private var deger:int = new int();
private var aci:int = new int();

public var pic:Bitmap = new backImg();
private var nokta:Point= new Point(20,20);

public function subproces(event:Event):void {
deger++;
//texts.text=""+deger;
aci++;
if( aci ==360){
aci = 0;
}
pic.rotation = aci;

}
public function sdf(){

this.addChild(pic);
pic.x =10;
pic.y = 10;
nokta 
       var myTimer:Timer = new Timer(1000, 0);
            myTimer.addEventListener("timer", saat);
            myTimer.start();
// this.addChild(new backImg);

this.addChild(texts);
addEventListener(Event.ENTER_FRAME, subproces);

}

        public function saat(event:TimerEvent):void {
          
            texts.text=" 1000 bir= "+deger;
            deger=0;
        }

}

}

zahmetiniz icin tesekkurler

skate:
şu an acelem var, kodu inceleyemeyeceğim. ancak mantık şudur. quad'ın koordinatları yalnızca pozitif olursa pivot ortada olamaz. bir quad'ın 4 köşesi için örnek değerlerden yola çıkacak olursak.
 
vertex 1: -1.0f, 1.0f
vertex 2: 1.0f, 1.0f
vertex 3: 1.0f, -1.0f
vertex 4: -1.0f, -1.0f
 
şeklinde tanımlandığı taktirde döndürdüğümüzde tam 0.0f, 0.0f noktası üzerinde, yani tam orta noktadan dönecektir. eğer şu anda köşelerden birinden dönüyorsa pozisyonunu boyutunun yarısı kadar negatif koordinatlara taşımayı dene.

sorusoran:

--- Alıntı yapılan: skate;23070 ---şu an acelem var, kodu inceleyemeyeceğim. ancak mantık şudur. quad'ın koordinatları yalnızca pozitif olursa pivot ortada olamaz. bir quad'ın 4 köşesi için örnek değerlerden yola çıkacak olursak.
 
vertex 1: -1.0f, 1.0f
vertex 2: 1.0f, 1.0f
vertex 3: 1.0f, -1.0f
vertex 4: -1.0f, -1.0f
 
şeklinde tanımlandığı taktirde döndürdüğümüzde tam 0.0f, 0.0f noktası üzerinde, yani tam orta noktadan dönecektir. eğer şu anda köşelerden birinden dönüyorsa pozisyonunu boyutunun yarısı kadar negatif koordinatlara taşımayı dene.
--- Alıntı sonu ---

copyPixel ise yaramadi resmin point;ni x- 50 aldim... ben bunu nasil this. icinde ceviricem
package {
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.display.Sprite;
import flash.events.Event;
import flash.events.TimerEvent;
import flash.geom.Point;
import flash.geom.Rectangle;
import flash.text.TextField;
import flash.utils.Timer;

public class sdf extends Sprite{
[Embed(source="img/back.png")]
public var backImg:Class;
private var texts:TextField =new TextField();
private var deger:int = new int();
private var aci:int = new int();

public var pic:Bitmap = new backImg();
private var nokta:Point;
private var pano:BitmapData;
private var pano2:BitmapData;
private var resim:Bitmap;
private var rec:Rectangle;

public function subproces(event:Event):void {
deger++;
//texts.text=""+deger;
aci++;
if( aci ==360){
aci = 0;
}
pic.rotation = aci;
resim.rotation = aci;
}
public function sdf(){

//this.addChild(pic);
//pic.x =10;
//pic.y = 10;
yeni();


       var myTimer:Timer = new Timer(1000, 0);
            myTimer.addEventListener("timer", saat);
            myTimer.start();
// this.addChild(new backImg);

this.addChild(texts);
addEventListener(Event.ENTER_FRAME, subproces);

}

private function yeni():void{
pano = new BitmapData(300,300,false,0x000000);
pano2 = new BitmapData(100,100,false,0x00ff00);
rec = new Rectangle(0,0,100,100);
nokta=new Point(-50,-50);
pano.copyPixels(pano2,rec, nokta,null,null,false);
resim = new Bitmap(pano);
this.addChild(resim);

}


        public function saat(event:TimerEvent):void {
          
            texts.text="= "+deger;
            deger=0;
        }

}

}

sorusoran:
http://www.8bitrocket.com/newsdisplay.aspx?newspage=6765
bu linkte codun calistigi ida ediliyor object e baglamis resimi bende olmadi new object yaratiyorumda bunu nasil ekliyicem bu yonteme gore

baska alterneatif yontem bilen varsa soylesin

skate:
verdiğin linkte çok güzel anlatmış olayı. şöyle ki.
 
charObj.rect=new Rectangle(0,0,32,32);

rotationMatrix.translate(-16,-16);
            rotationMatrix.rotate(angle_in_radians);
            rotationMatrix.translate(16,16);

bu iki kod parçasına dikkat edersen adam 32x32 boyutunda bir quad oluşturuyor. Son matrisi oluşturup -16,-16'ya translate ediyor ki bu pivot'u ortaya almak demek, dediğim gibi boyutun yarısı kadar geri alıyor, bu halde rotate ettikten sonra tekrar 16, 16 ileri alarak ilk pozisyonuna geri getiriyor. Aslında rotate ettikten sonra tekrar eski pozisyonuna getirmek zorunda değilsin, istediğin başka herhangi bir world koordinatına koyabilirsin artık.
 
Flash benim işim olmadığı için kod örneklerini başka bir arkadaşa bırakıyorum ancak verdiğin linkteki örnek de oldukça anlaşılır gibi durdu bana.

Navigasyon

[0] Mesajlar

Tam sürüme git