Gönderen Konu: pivot noktasini resimin ortasina almak  (Okunma sayısı 8453 defa)

pivot noktasini resimin ortasina almak

« : 01.07.2010 10:02:27 »
Hızlı düğmeleri aç

sorusoran

İleti: 52

Çevrimdışı
  • **
  • Jr. Member
    • Profili Görüntüle
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.=10;
	
pic.10;
	
nokta 
	
       var 
myTimer:Timer = new Timer(10000);
            
myTimer.addEventListener("timer"saat);
            
myTimer.start();
//
	
this.addChild(new backImg);
	

	
this.addChild(texts);
	
	
addEventListener(Event.ENTER_FRAMEsubproces);
	
	

	
	
}
	
	

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

	
}
	

}

zahmetiniz icin tesekkurler

pivot noktasini resimin ortasina almak

« Yanıtla #1 : 01.07.2010 14:27:08 »
Hızlı düğmeleri aç

skate

İleti: 5.245

A Sinner Scener
Çevrimdışı
  • Administrator
  • *****
  • Hero Member
    • Profili Görüntüle
    • http://www.akaydin.com/
ş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.

pivot noktasini resimin ortasina almak

« Yanıtla #2 : 01.07.2010 21:01:57 »
Hızlı düğmeleri aç

sorusoran

İleti: 52

Çevrimdışı
  • **
  • Jr. Member
    • Profili Görüntüle
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(10000);
            
myTimer.addEventListener("timer"saat);
            
myTimer.start();
//
	
this.addChild(new backImg);
	

	
this.addChild(texts);
	
	
addEventListener(Event.ENTER_FRAMEsubproces);
	
	

	
	
}
	
	

	
	
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,recnokta,null,null,false);
	
	
	
resim = new Bitmap(pano);
	
	
	
this.addChild(resim);
	
	

	
	
}
	
	


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

	
}
	

}

pivot noktasini resimin ortasina almak

« Yanıtla #3 : 01.07.2010 21:08:50 »
Hızlı düğmeleri aç

sorusoran

İleti: 52

Çevrimdışı
  • **
  • Jr. Member
    • Profili Görüntüle
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

pivot noktasini resimin ortasina almak

« Yanıtla #4 : 01.07.2010 21:48:10 »
Hızlı düğmeleri aç

skate

İleti: 5.245

A Sinner Scener
Çevrimdışı
  • Administrator
  • *****
  • Hero Member
    • Profili Görüntüle
    • http://www.akaydin.com/
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.