tr-demoscene

the scene => scripting => flash actionscript => Konuyu başlatan: sorusoran - 01.07.2010 10:02:27

Başlık: pivot noktasini resimin ortasina almak
Gönderen: sorusoran - 01.07.2010 10:02:27
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
Başlık: pivot noktasini resimin ortasina almak
Gönderen: skate - 01.07.2010 14:27:08
ş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.
Başlık: pivot noktasini resimin ortasina almak
Gönderen: sorusoran - 01.07.2010 21:01:57
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.

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;
        }

}

}
Başlık: pivot noktasini resimin ortasina almak
Gönderen: sorusoran - 01.07.2010 21:08:50
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
Başlık: pivot noktasini resimin ortasina almak
Gönderen: skate - 01.07.2010 21:48:10
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.