Drawing and Animation ( Flash API , Graphcs API Curve To)

import flash.events.Event;

var xp:Number = 0;
var xy:Number = 0;
var t:Number = 0;
var a:Number = 100;
var b:Number = 10;

x = stage.stageWidth / 2;
y = stage.stageHeight / 2;

graphics.lineStyle(0,0×000000);
addEventListener(Event.ENTER_FRAME,onRunCode);

function onRunCode(event:Event):void
{
var p:Number = ((a + b) / b) * t;
xp = (a + b) * Math.cos(t) – b * Math.cos(p);
xy = (a + b) * Math.sin(t) – b * Math.sin(p);

if (t == 0)
{
graphics.moveTo(xp,xy);
}
else
{
graphics.lineTo(xp,xy);
graphics.lineStyle(1,Math.random() * 0xFFCC00);
}

t += 1;
txt.text = xp + “\n” + xy;
}

Advertisements

As3 Custom Eventler Oluşturmak

Projemizde bağzı durumlarda çeşitli işlemler yaptırmak isteyebiliriz. Ancak bu olayı sadece olay dinleyicisine bağlı kalarak değil kendi istediğimiz bir zamanda kendi istediğimiz bir yerde verileri custom event a göndererek olay akışına müdahalede bulunabiliriz.

CustomEventlerin anlamıda (Olay Memuru) bütün classların Base Classıdır custom event yani bütün olaylar bu class üzerinden kontrol edilir. Bi projede custom event ile yazmak yazım standartıdır. Yani eğer profesyonel bir uygulamanız var ise custom event yazmanız doğru bir davranış olacaktır.

Örneğin sahnemiz de bir tane buton var ve biz butona bastığımız andan intibaren alphasının düşmesini istiyoruz. Ama aynı anda başka bir işlem yapmasını istiyorsak (Yeni bir daire çağırmak gibi) o zaman devreye custom eventları sokmamız gerekecektir. Custom eventlarında diğer eventlardan ayıran özelliğide budur zaten.

Bilinmesi gereken bir diğer husus ise özel parametreli özel parametreden kasıt (Olay.XMLPARSE,homeparsexml,true,0) gibi. CustomEventlar içlerinde birden fazla değer alabilirler.

Örnek

Aşağıdaki örnekte MainCustom.as dosyam var ve ben bu dosyada 3 saniyede bir EventDispatcher classının dispatchEvent metodunu kullanarak olayı yeniden kontrol etmesini ve yeniden olayı göndermesini istiyorum. Yani timer bitti kontrol et ve yeniden gönder.

package
{
	import flash.display.MovieClip;
	import flash.events.Event;
	import flash.events.EventDispatcher;
	import flash.events.TimerEvent;
	import flash.utils.Timer;

	public class MainCustom extends EventDispatcher
	{
		private var _timer:Timer;

		public function MainCustom()
		{
			_timer = new Timer(3000, 1);
			_timer.addEventListener(TimerEvent.TIMER, onTimer);
			_timer.start();
		}

		private function onTimer(event:TimerEvent):void
		{
			dispatchEvent(new Event("timer_bitti"));
		}
	}
}

Daha sonrasında ise Document Classımızı oluşturuyoruz. Buradaki amacımız ise MainCustom classımızın bir kopyasını almak ve oradan dispatchEventımızı çağırmak olacaktır. Bunu yaparken ilk olarak bir kopyasını alıyoruz ve aldığımız kopyaya bir olay dinleyicisi atayıp dispatchEventımızın yeniden fırlatılmasını istiyoruz. Eğer geri döndürülürse bie onTimerBitti fonksiyonunu çalıştıracaktır.

package
{
	import flash.display.MovieClip;
	import flash.events.Event;

	public class Main extends MovieClip
	{
		private var main:MainCustom;
		public function Main()
		{
			main = new MainCustom();
			main.addEventListener("timer_bitti",onTimerBitti );
		}

		private function onTimerBitti(event:Event):void
		{
			trace("timer bitti..");
		}
	}
}

Genel Özellikleri

bubbles:Boolean
(salt okunur – düzeltilemez) 

Bir olayın köpüren bir olay olup olmadığını belirtir.

cancelable:Boolean
(salt okunur – düzeltilemez) 

Olayla ilişkilendirilmiş davranışın önlenebilir olup olmadığını gösterir.

type:String
(salt okunur – düzeltilemez) 

Olay türü.

target:Object
(salt okunur – düzeltilemez) 

Olay hedefi.

currentTarget:Object
(salt okunur – düzeltilemez) 

Bu Event nesnesini olay dinleyicisiyle etkin olarak işleyen nesne.

eventPhase:uint
(salt okunur – düzeltilemez) 

Olay akışındaki geçerli aşama.

As3 Sayı Sınıfları

ActionScript ile sayı sınıfları ile işlemeler yapıyoruz hepimiz. Ancak uint,int,number değerlerin maksimum değerleri ya da minumum kaç değer aldığını biliyor musunuz ? Aşağıda uint (u interger) pozitif tam sayı ve int(interger) tam sayı ve number sayılarının değerlerine bakacağız.

Uint (Pozitif Tam Sayı)

uint sınıfı bir 32 bit işaretsiz tam sayıyı temsil eden veri türüyle çalışmanız için yöntemler sağlar. İşaretsiz bir tam sayı yalnızca pozitif olabileceğinden, maksimum değeri int sınıfının iki katıdır.

Örnek;
var upLevel:uint = uint.MAX_VALUE;
var downLevel:uint = uint.MIN_VALUE;
trace("En yüksek puan " + upLevel + "\nEn düşük puan " + downLevel);

Int(Pozitif Sayı)

int sınıfı 32 bit işaretli bir tam sayıyı temsil eden veri türüyle çalışmanıza izin verir. int sınıfının temsil ettiği değer aralığı -2.147.483.648 (-2^31) ile 2.147.483.647 (2^31-1) arasıdır.

Örnek;
var intUpLevel:int = int.MAX_VALUE;
var intDownLevel:int = int.MIN_VALUE;
trace("En yüksek puan " + intUpLevel + "\nEn düşük puan " + intDownLevel);

Number(Sayılar – pozitif , negatif , tam sayı)

Çift kesinlikli bir IEEE-754 kayan nokta sayısını temsil eden bir veri türü. Number sınıfıyla ilişkili yöntemleri ve özellikleri kullanarak temel sayısal değerleri işleyebilirsiniz. Bu sınıf, JavaScript Number sınıfının aynısıdır.

Number sınıfının özellikleri statiktir, başka bir deyişle, bunları kullanmak için bir nesneye ihtiyacınız yoktur, böylelikle yapıcıyı kullanmanız gerekmez.

Örnek;

var negativeInfinity:Number = Number.NEGATIVE_INFINITY;
var positiveInfinity:Number = Number.POSITIVE_INFINITY;
negativeInfinity = 1;
positiveInfinity = 2;
trace("En yüksek puan " + negativeInfinity + "\nEn düşük puan " + positiveInfinity);

Çift indeksli dizi – örnek 1

Çift indeksli dizilere bir örnek vermek gerekirse…

var obj:Object = new Object();
obj[“isimler”] = new Array(“Serhat”,”Sezer”,”18″);

var str:String = “btn2”;

if (obj[“isimler”][str.substr(3)] != undefined)
{
trace(obj[“isimler”][str.substr(3)]);
}
else
{
trace(obj[“isimler”][0]);
}

If koşulunda eğer dönen değer undefined değil ise yani dönen değer sağlanan dizilerin dışında ise (yukarıda 3 adet dizi değişkeni oluşturduk bunlar; Serhat,Sezer,18 indeksler 0 dan başladığı için eğer 0,1,2 dizinin sağladığı değerlerin dışına çıkmaktan kastım ise 3 ve ya 4 … gibi sayılar) eğer çıkılmamış ise diyoruz bunu != ibaresiyle sağlamaktayız. Eğer çıkılmış ise trace(obj[“isimler”][0]); bu koşulu sağla yani arraydaki 0. indekse sahip olan Serhatı yazdır demiş oluyoruz.

Ayrıca

obj[“isimler”] diyerek isim şekilde ulaşıyorduk isterseniz burayı numaralandırarakta ulaşmanız mümkün. Şöyle

var obj:Object = new Object();
obj[0] = new Array(“Serhat”,”Sezer”,”18″);

trace(obj[0][1]);    // sezer çıktısını verdi.

Aynı Objede Birden Çok Özellik Kullanma

var obj:Object = new Object();
obj[0] = new Array(“Serhat”,”Sezer”,”18″);
obj[1] = new Array(“Serhat2″,”Sezer2″,”19”);

trace(obj[0][1]);    // sezer çıktısını verdi.

as3 fizik olayı -1 Çarpışma olayları

var vx:Number = 0;
var vy:Number = 0;
var bx:Number = 0;
var by:Number = 0;
var offsetX:Number = 0;
var offsetY:Number = 0;
var dragged:Boolean = false;

circle.buttonMode = true;
circle.addEventListener(MouseEvent.MOUSE_DOWN,mDown);
stage.addEventListener(MouseEvent.MOUSE_UP,mUp);
stage.addEventListener(Event.ENTER_FRAME,loop);

function mDown(event:MouseEvent):void {
	dragged = true;
	stage.addEventListener(MouseEvent.MOUSE_MOVE,moveHandler);
	offsetX = circle.x - mouseX;
	offsetY = circle.y - mouseY;
}

function mUp(event:MouseEvent):void {
	dragged = false;
	stage.removeEventListener(MouseEvent.MOUSE_MOVE,moveHandler);
}

function moveHandler(event:MouseEvent):void {
	circle.x = mouseX + offsetX;
	circle.y = mouseY + offsetY;
	event.updateAfterEvent();
}

function loop(event:Event):void {
	
	if (! dragged) {

		circle.x +=  vx;
		circle.y +=  vy;

		vx /=  1.2;
		vy /=  1.1;

	} else {

		vx = mouseX - bx;
		vy = mouseY - by;
		bx = mouseX;
		by = mouseY;

	}

	if (circle.x - circle.width / 2 < 0) {
		circle.x = circle.width / 2;
		vx *=  -1;
	}

	if (circle.x + circle.width / 2 > stage.stageWidth) {
		circle.x = stage.stageWidth - circle.width / 2;
		vx *=  -1;
	}

	if (circle.y - circle.height / 2 < 0) {
		circle.y = circle.height / 2;
		vy *=  -1;
	}

	if (circle.y + circle.height / 2 > stage.stageHeight) {
		circle.y = stage.stageHeight - circle.height / 2;
		vy *=  -1;
	}
}

As3 LoaderInfo Class

Yüklenen nesnenin özelliklerine ulaşabileceğimiz bir sınıf özellikleri

loaderInfo.addEventListener(Event.INIT, initProperty);
function initProperty(event:Event):void
{
loaderInfo.removeEventListener(Event.INIT, onLoaderInfo_INIT);
trace(“loaderInfo.actionScriptVersion: “+loaderInfo.actionScriptVersion);
trace(“loaderInfo.applicationDomain: “+loaderInfo.applicationDomain);
//trace(“loaderInfo.bytes: “+loaderInfo.bytes);
trace(“loaderInfo.bytesLoaded: “+loaderInfo.bytesLoaded);
trace(“loaderInfo.bytesTotal: “+loaderInfo.bytesTotal);
trace(“loaderInfo.childAllowsParent: “+loaderInfo.childAllowsParent);
//trace(“loaderInfo.constructor: “+loaderInfo.constructor);
trace(“loaderInfo.content: “+loaderInfo.content);
trace(“loaderInfo.contentType: “+loaderInfo.contentType);
trace(“loaderInfo.frameRate: “+loaderInfo.frameRate);
trace(“loaderInfo.height: “+loaderInfo.height);
trace(“loaderInfo.loader: “+loaderInfo.loader);
trace(“loaderInfo.loaderURL: “+loaderInfo.loaderURL);
trace(“loaderInfo.parameters: “+loaderInfo.parameters);
trace(“loaderInfo.parentAllowsChild: “+loaderInfo.parentAllowsChild);
//trace(“loaderInfo.prototype: “+loaderInfo.prototype);
trace(“loaderInfo.sameDomain: “+loaderInfo.sameDomain);
trace(“loaderInfo.sharedEvents: “+loaderInfo.sharedEvents);
trace(“loaderInfo.swfVersion: “+loaderInfo.swfVersion);
trace(“loaderInfo.url: “+loaderInfo.url);
trace(“loaderInfo.width: “+loaderInfo.width);
}

İki Boyutlu Dizi(İki indeksli Array)

İki indeksli diziyi neden kullanırız ? İndeksler bizim projelerimizde çoklu işlemleri kullanabilmemiz için oluşturduğumuz bir metod. Bu metod bize farklı objelerin index numaralarını belirlememize yardım olmaktadır. Peki neden çift indeksli dizi kullanımı ? Bazı durumlarda bir indeksli diziler ihtiyacımızı karşılamamaya başlayabilir. Örnek olarak bir projede isimler ve soyisimleri bir dizide tutuyoruz. Yapmamız gereken objemize dizinin ismini basmak tıkladığındada isim ve soyismi göstermek ama ilk olarak ismi objenin içerisinde göstermek. Bunun için çift indeksli dizileri kullanabiliriz.

var arr:Array = new Array();

arr[1] = ["Serhat","Sezer","Web"];
arr[2] = ["Serhat 2", "Sezer 2", "Web 2"];

for each(var isim in arr[1])
{
    trace(isim);
}

Yukarıda yaptığım olay şu kırmızı ile işaretlediğim indeks numarasını alıyorum yani ben oraya eğer for each(var isim in arr[2]) dersem yukarıda arr[2] diye belirttiğim dizileri alacaktı.

Javascript setTimeOut();

Bağzı html sayfalarımızda yönlendirme işlemleri yapmak isteyebiliriz. Bunun için setTimeOut fonksiyonunu kullanabiliriz. Bu fonksiyon verdiğimiz sayı süresince bizi window.location.href ile yönledirdiğimiz alana göndermektedir.

setTimeOut(function () {
window.location.href = “www.yonlenecekadres.com”;
},100);

ActionScript 3 Sound Class

Web sitemizin hareketliliğini arttırabilmek için müzik olayları önemlidir. Bu bölümde de Sound Classlarını inceleyeceğiz.

Örnek herhangi bir müzik yüklemek ve başlat ve durdur butonları ile müziği kontrol etmek.

var sndReq:URLRequest = new URLRequest("muzik.mp3");
var sound:Sound = new Sound(sndReq);
var channel:SoundChannel = new SoundChannel();
var stransform:SoundTransform = new SoundTransform();

var isPlay:Boolean = false;
var startTime:Number = 0;

// play pause
oynat.addEventListener(MouseEvent.CLICK,Play);
durdur.addEventListener(MouseEvent.CLICK,Pause);

// arttır azalt
arttir.addEventListener(MouseEvent.CLICK,Arttir);
azalt.addEventListener(MouseEvent.CLICK,Azalt);

function Play(event:MouseEvent):void
{
	if(!isPlay)
	{
		channel = sound.play(startTime);
		isPlay = true;
	}
}

function Pause(event:MouseEvent):void
{
	startTime = channel.position;
	channel.stop();
	isPlay = false;
}

yapılan işin algoritmasına bakıldığında ilk olarak dışardan bir müzik yükleniyor daha sonra sound nesnesi ile bu müziği load ediyoruz. SoundChannel ile bu müziği oynatıyoruz. Durdurma işlemini yapacağımız için soundchannel classına atıyoruz. yoksa direk sound.play() de diyebilirdik. Daha sonra başlat ve durdur butonlarına tıklandığında olayı gerçekleştirmesi için channel = sound.play diyoruz. Durdur butonuna kullanıcı basarsa eğer channel.stop ile müziği durduruyoruz. Bu durdurma işleminde müziğin aynı sürede devam edebilmesi için bir zamanlayıcı değişken oluşturuyoruz. Bu değişken ile yani channel.position olarak alıyoruz ve yukarıdan örnek vermek gerekirse startTime değişkenine channel.position ile nerden durdulduğunu süre olarak veriyoruz. Daha sonra ile parametresinin içine (sadece sound classında playin icine parametre girilir.) startTime değerini veriyoruz yani stop ile durduğumuz süreyi vermiş oluyoruz. Daha sonra ise müziğe sürekli play butonuna basılmasını engellemek için isPlay boolean mantıksal bir değer atıyoruz. Bu değer ile eğer müzik true ise çalınsın değil ise çalınmasın diyoruz. Bunuda ilk başta false veriyoruz !isPlay ile true ya çeviriyoruz. Stop dediğimiz de bu değeri false edip çalınmasını engelliyoruz.