as3 game karakter rotasyon

deg2rad kavramını bu örnek ile dahai iy pekiştirdim. Açıklamaları daha sonra ekleyeyim. Burada dursun şimdilik.

stage.addEventListener(Event.ENTER_FRAME, loop);
function loop(event:Event):void
{
	mc.y -= (mc.y- mouseY) * 0.1;
	mc.rotation = deg2rad(-(mc.y-mouseY)*2);
}

function deg2rad(deg:Number):Number
{
	return deg / 180 * Math.PI;
}
Advertisements

as3 game bullets

Basit bir oyun düşünün aşağıda uzay gemisi ve size doğru gelen düşmanlar bunları uzaktan ateş ederek yok etmeniz gerekiyor. Bunun için basit bir mantık izlenebilir.

İlk olarak kurşunlar için bir dizi (array) tanımladığımızı düşünelim. Daha sonra bu kurşunları hareket ettirmemiz gerekiyor. Bunuda bir timer sınıfıyla halledebiliriz. Daha sonra kurşunların kontrülünü sağlayabilmek için onları bi dizide tutmamız gerekiyor. Neyse aşağıdaki kodda açıklamalarıyla verdim 🙂


stage.addEventListener(Event.ENTER_FRAME, moveShip);

var laserArr:Array = new Array();

function moveShip(event:MouseEvent):void
{
	mcPlayer.x = stage.mouseX;
	moveLaser();
}


// Kurşunlarımızı üretiyoruz.
var laserTimer:Timer = new Timer(500);
laserTimer.start();
laserTimer.addEventListener(TimerEvent.TIMER, onLaserTimer);

function onLaserTimer(event:TimerEvent):void
{
	// 1/2 saniyede bir Laser oluşturulur.
	var tempLaser:Laser = new Laser();
	// Sahnemizdeki player'ın y değerine konumlandırılır.
	tempLaser.y = mcPlayer.y;
	// Sahnemizdeki player'ın x değerine konumlandırılır.
	tempLaser.x = mcPlayer.x + mcPlayer.width*.5;
	// speed değeri referans değer daha sonra moveLaser'da hareket için kullanacağız.
	tempLaser.speed = 5;
	addChild(tempLaser);
	// her bir kurşunumuz bi alanda depoluyoruz.
	laserArr.push(tempLaser);
}

/*    KURŞUNLARI HAREKET ETTİR.   */
function moveLaser():void
{
	// Buradaki tempLaser ile her bir kurşunun hareketini sağlıyoruz.
	var tempLaser:Laser;
	
	// Depoladığımız kurşunları yukarıya doğru hareket ettiriyoruz.
	for(var i:int = laserArr.length-1; i>=0; i--)
	{
		tempLaser = laserArr[i] as Laser;
		tempLaser.y -= tempLaser.speed;
		
		// Belli bir koordinatı geçtikten sonra silmemiz gerekiyor.
		laserControl(tempLaser, i);
	}
}

/*		BELLİ KORDİNATI GEÇTİKTEN SONRA SİLME İŞLEMİ
		@parametre1 = hedef moveiclip 
		@parametre2 = hedef movieclibin index değeri */
function laserControl(targetLaser:Laser, laserIndex:int):void
{
	// kurşun sahnenin y değerinden çıkmışsa
	if(targetLaser.y < 0)
	{
		removeChild(targetLaser);
		targetLaser = null;
		laserArr.splice(laserIndex,1);
	}
}

as3 rotation with object x and y

import flash.events.MouseEvent;
import flash.geom.Rectangle;

// Sahnenin her harketinde çalışacak listener.
stage.addEventListener(MouseEvent.MOUSE_MOVE, onMove);

// ilk başta patlama olmaması için fonksiyona direk null olarak göndeiryoruz
onMove();

// burada matematiksel işlemleri hesaplıyoruz
// burada objenin farkıyla ok movieclibinin x değerinin farkını alıyoruz
// bunları hesaplarken x ve y koordinatlarını bularak hesaplıyoruz
// distX ve distY değişkenlerini mouseX ve mouseY sistemine de bağlayabilirdik
// daha sonra aldığımız x ve y değerini radyana çevirip,
// bu değeri dereceye çeviriyoruz. 
function onMove(event:MouseEvent = null):void
{
	var distX:Number = obj.x - ok.x;
	var distY:Number = obj.y - ok.y;
	var radian:Number = Math.atan2(distY, distX);
	var degree:Number = radian * 180 / Math.PI;
	
	ok.rotation = degree;
}

// sahnede sürükleyip bırakma işlemlerini bu metod ile kontrol ediyoruz
obj.addEventListener(MouseEvent.MOUSE_DOWN, onDrag);
obj.addEventListener(MouseEvent.MOUSE_UP, onDragStop);

//kullanıcı obj isimli movieclibimizi tutup sürüklediğinde bizim belirlediğimiz alana kadar sürüklemesini sağlar.
function onDrag(event:MouseEvent):void
{
	obj.startDrag(false, new Rectangle(obj.x,stage.stageHeight-obj.height,stage.stageWidth,0));
}

function onDragStop(event:MouseEvent):void
{
	obj.stopDrag();
}