Burada yalnızca Kod var. Kendi başına dönen Merkez Noktası

WaTcHFuL

EVERYWHERE
Rotasyon, nesnelerin belirli bir noktaya göre yatay eksenle yaptığı açısının değiştirilmesi durumudur.

Rotasyonun referans aldığı noktayı manuel olarak değiştirip nesneyi belirli bir noktaya göre döndürebirilirz.

Bunu kodlamalarla yapmak istediğimizde ise dönme noktasını direkt veya indirekt olarak değiştirme gibi birkaç yöntem bize yardımcı olacaktır.

Mesela nesneyi bir klip içine koyup daha sonra dışardaki klibin rotasyonunu değiştirmek.

Bu yolla içerdeki nesnenin x ve y koordinatlarını değiştirerek içteki klibin dönme noktasını değiştirmiş gibi oluruz.

Başka bir yöntem olarak, nesnenin x ve y konumlarını trigonometrik olarak sinus ve kosinüs değişkenleri ile orantılandırıp yüzünü de (aradaki açının değerini rotasyona atayarak) merkez noktaya çevirirsek yine dönme noktasını değiştirebilme şansımız olur.

Bunlardan başka mutlaka çok yöntem vardır ama benim son belirtmek istediğim yöntem MatrixTransformer sınıfını kullanarak yapılan dönme merkez noktası değişimidir.

Bu yazıda bu son yöntemin üzerinde duracağız.

Öncelikle yapacağımız uygulamaya bakalım;

ÖNİZLEME İÇİN TIKLAYINIZ.




Görüldüğü gibi nesne mouse tıklamasıyla değiştirilebilen bir odak noktaya göre dönüyor.

Bunu yapabilmek için aşağıdaki, açıklamaları aynı satırda verilmiş olan kodları kullanıyoruz
(objeler kodla oluşturuşuyor, dolayısıyla sadece kodları eklemeniz yetecek)

Tek yapmanız gereken yeni bir ActionScript 3.0 dosyası açmak ve F9 komutuyla Action Script panelini açıp aşağıdaki kodları oraya yapıştırmak.

Kod:
[B][COLOR="DarkOrange"]import fl.motion.MatrixTransformer;/*sınıfı çekiyoruz*/
 
var kare:Shape=new Shape();/*dönme noktası ile oynayacağımız dörtgeni çiziyoruz*/
kare.graphics.beginFill(0x79899F,1)/*dolgu rengi, alpha*/
kare.graphics.lineStyle(1, 0x58677C);/*çizgi kalınlığı, rengi*/
kare.graphics.drawRect(stage.stageWidth/2-30, stage.stageHeight/2-30, 60,60);/*sahnenin ortasına bir kare*/
kare.graphics.endFill();/*dolgu bitti*/
addChild(kare);/*sahneye eklendi*/
 
var odak:Shape=new Shape();/*odak noktasını belirteceğeimiz daireyi çiziyoruz*/
odak.graphics.beginFill(0xffffff,.3)
odak.graphics.lineStyle(1, 0xC9C8BE);
odak.graphics.drawCircle(0, 0, 3);
odak.graphics.endFill();
odak.x=stage.stageWidth/2;odak.y=stage.stageHeight/2
addChild(odak);
 
stage.addEventListener(Event.ENTER_FRAME, calis);/*enterframe fonksiyonunu atıyoruz*/
var m:Matrix = new Matrix();/*matrixTransformer'da kullanacağımız matrix'i tanımladık*/
function calis(e:Event){/*fonksiyonu yazıyoruz*/
MatrixTransformer.rotateAroundExternalPoint(m, odak.x, odak.y, 5);/*rotateAroundExternalPoint, klibi belirlenen noktalarla döndürmek için kullanılıyor.
Kodda 5 değeri verdiğimiz kısım dönme açısıdır, her frame de mevcut rotasyona bu değer katılıyor. arttırırsak hızlı döner, negatif değer verirsek ters yöne döner.*/
kare.transform.matrix = m;/*karenin transform matrix'ini bizim matrixe eşitliyoruz*/
}
stage.addEventListener(MouseEvent.MOUSE_DOWN,tik);/*odak koordinatlarını mouse tıklamasına göre ayarlıyoruz*/
function tik(e:MouseEvent) {
	odak.x=mouseX
	odak.y=mouseY
}[/COLOR][/B]

Test için Ctrl+Enter

Bir sonraki derste görüşmek üzere.
 

WaTcHFuL

EVERYWHERE
Üst