Flaş AS3 ile Pacman oyunu

Kodla Büyü

the_myth

Seçkin Üye
Seçkin Üye
Mesajlar
355
merhaba arkadaşlar. Flaş CS5 AS3.0 ile hazırladığım pacman oyununu paylaşıyorum. derslerde fikir vermesi açısından işinize yarayabilir.

kehikg.jpg
 

Ekli dosyalar

oyunda bi kaç hata var ama düzeltemedim. :) Ayrıca noktaları kütüphaneden istediğiniz kadar çoğaltabilirsiniz. Sadece görünen isimlerini nokta8, nokta9 diye devam ettirin ve kodun içinde en alttaki for döngüsünde "i" değişkeninin bitiş değerini eklediğiniz nokta sayısı kadar yapın.
 
Uzan yıllar flashla uğramış biriyim . Oyununuzu denemedim fakat ellerinize sağlık demek için denememe gerek yok. Düşünceli bir paylaşım. Teşekkürler
javascript ve html5 için geliştilmiş frameworkler ile hem mobil hemde masaüstü ortamlar için çok başarılı uygulamalar gerçekleşitiriyor. flash şu haliyle heyecanını yitiriyor.
adobe firması flash ın hadikaplarını gidrecek bir hamle yapmazsa 4-5 sene içinde flash yerini kaybedecek.
Sizlere tavsiyem javascript ve html5 ile uygulama geliştirme konusunda erkenden araştırma yapıp öğrenin.

Başarılar.
 
yorumunuz için teşekkürler. malum grafik animasyon dersinde müfredat gereği hala flaş anlatıyoruz. Öğrencilere faydalı olabilmek için kendimizi geliştirmemiz gerekli. Ama flaş konusunda dediğinize kesinlikle katılıyorum. kişisel gelişim için flaş+as yerine mobil uygulamalara yönelmek lazım.
 
haksızlık yapmayalım, onlar da kendilerini geliştiriyor.. flash ile zaten mobil uygulamalar geliştirilebiliyor :wink:
 
ayrıca hocam hareketi aşağıdaki kodda olduğu gibi yaparsanız çok daha akıcı olacaktır..

Kod:
/* Klavye Oklarıyla Hareket Ettir
Belirtilen sembol örneğinin klavyedeki oklarla hareket ettirilmesini sağlar.

Talimatlar:
1. Hareket miktarını artırmak veya azaltmak için aşağıdaki 5 değerinin yerine sembol örneğinin tuşlara her basıldığında hareket etmesini istediğiniz piksel sayısını girin.
5 sayısının aşağıdaki kodda dört kez göründüğünü unutmayın.
*/

var upPressed:Boolean = false;
var downPressed:Boolean = false;
var leftPressed:Boolean = false;
var rightPressed:Boolean = false;

pacman.addEventListener(Event.ENTER_FRAME, fl_MoveInDirectionOfKey_2);
stage.addEventListener(KeyboardEvent.KEY_DOWN, fl_SetKeyPressed_2);
stage.addEventListener(KeyboardEvent.KEY_UP, fl_UnsetKeyPressed_2);

function fl_MoveInDirectionOfKey_2(event:Event)
{
	if (upPressed)
	{
		pacman.y -= 5;
	}
	if (downPressed)
	{
		pacman.y += 5;
	}
	if (leftPressed)
	{
		pacman.x -= 5;
	}
	if (rightPressed)
	{
		pacman.x += 5;
	}
}

function fl_SetKeyPressed_2(event:KeyboardEvent):void
{
	switch (event.keyCode)
	{
		case Keyboard.UP:
		{
			upPressed = true;
			break;
		}
		case Keyboard.DOWN:
		{
			downPressed = true;
			break;
		}
		case Keyboard.LEFT:
		{
			leftPressed = true;
			break;
		}
		case Keyboard.RIGHT:
		{
			rightPressed = true;
			break;
		}
	}
}

function fl_UnsetKeyPressed_2(event:KeyboardEvent):void
{
	switch (event.keyCode)
	{
		case Keyboard.UP:
		{
			upPressed = false;
			break;
		}
		case Keyboard.DOWN:
		{
			downPressed = false;
			break;
		}
		case Keyboard.LEFT:
		{
			leftPressed = false;
			break;
		}
		case Keyboard.RIGHT:
		{
			rightPressed = false;
			break;
		}
	}
}
 
ve ayrıca pacmani döndürmek için de x+5 x-5 y+5 y-5 satırlarına pacman.rotation+=90, -=90 gibi satırlar ekleyebilirsiniz.. ayrıca yeni kare eklemenize gerek kalmaz
 
pardon benim eklediğimde de çapraz gitme ihtimali var.. düzenlemek lazım.. demek istediğim enter_frame eventını da koymanız gerek
 
hocam ilave için teşekkür ederim. aslında benim daha önemli bir problemim var oyunda. bi türlü çözemedim. mesela oyun başladıktan sonra sağ tuşuyla karakteri ortadaki engellerden birinin üzerine yavaş yavaş getirin. normalde karakter ile engelin çarpışma testini yaptım. çarptığında bi miktar geri getirmesi lazım ama karakter engelin üstüne geliyor hatta engelin bir kısım içine kadar giriyor sonra çarpışma olayı gerçekleşiyor. buda oyun esnasında hataya sebep oluyor. istediğim şey pacman ortadaki engellere değer değmez çarpışma olayının gerçekleşmesi ve karakterin engeli aşamaması. yardımcı olabilecek olan varsa sevinirim :)
 
hocam döndürmek için rotate olmuyor. birincisi mesela sağa doğru giderken sola dönderdiğinizde karakter ters dönmüş oluyor. 2.side karakter yukarı bakıyorken aşağı dönmesi için 180 derece, sağda veya solda iken aşağı dönmesi için 90 derece dönmesi lazım. yani farklı durumlara göre farklı farklı açılarda dönmesi lazım. bu çözümüde youtube da görmüştüm mantıklı geldi. bende öyle uyguladım.
 
hocam onun sebebi de siz 10 birim götürüp sonra değip değmediğine bakmanız lazım.. sizin kodda sonradan 10 birim gidiyor

yani mesela pacman.x += 10; kodu for döngüsünden önce olmalı :)
 
rotationa += koymuşum k bakmayın şöyle olması lazım, yalnız böyle dediğiniz gibi ters duruyor scalex,y ile ters çevirseniz bile bayagı bi kod kullanmanız gerekecek.. sizin yaptığınız mantıklı olmuş

if (downPressed)
{
ok.y += 5;
ok.rotation=90;
}
if (leftPressed)
{
ok.x -= 5;
ok.rotation=-180;
}
if (rightPressed)
{
ok.x += 5;
ok.rotation=0;
}
 
impetus23' Alıntı:
hocam onun sebebi de siz 10 birim götürüp sonra değip değmediğine bakmanız lazım.. sizin kodda sonradan 10 birim gidiyor

yani mesela pacman.x += 10; kodu for döngüsünden önce olmalı :)
hocam teşekkür ederim. :) sorun düzeldi. nasıl düşünememişim :)
 
kodların güncellenmiş hali:
Kod:
skoralani.text = String(0);
var skor:uint;
skor = 0;


stage.addEventListener(KeyboardEvent.KEY_DOWN, fl_PressKeyToMove);

function fl_PressKeyToMove(event:KeyboardEvent):void
{


	switch (event.keyCode)
	{
		case Keyboard.UP :
			{
				pacman.gotoAndStop(4);
				var m;
				pacman.y -=  10;
				for (m=1; m<=7; m++)
				{
					if (pacman.hitTestObject(root["engel" + m]))
					{
						pacman.y +=  30;//yukarı çıkarken eğer ortadaki engellerden birine 
						// tekrar 30birim aşağı çek.Amaç engellerin içinden geçmemesi
					}
				}
//herhengi bir engele çarpmıyorsa aşağı inmeye decam et
				if (pacman.hitTestObject(ustduvar))
				{
					pacman.y +=  20;//yukarı çıkarken  en yukarıdaki duvara çarparsa 
				}//20 birim aşağı insin.Amaç üst duvarı geçememesi


				break;


			};//aynı işlem ve kontroller diğer tuşlar için tekrar edilir.
		case Keyboard.DOWN :
			{
				pacman.gotoAndStop(3);
				pacman.y +=  10;
				var l;

				for (l=1; l<=7; l++)
				{
					if (pacman.hitTestObject(root["engel" + l]))
					{
						pacman.y -=  30;

					}
				}

				if (pacman.hitTestObject(altduvar))
				{
					pacman.y -=  20;
				}


				break;


			};
		case Keyboard.LEFT :
			{
				pacman.gotoAndStop(2);
				pacman.x -=  10;
				var j;

				for (j=1; j<=7; j++)
				{
					if (pacman.hitTestObject(root["engel" + j]))
					{
						pacman.x +=  30;

					}
				}

				if (pacman.hitTestObject(solduvar))
				{
					pacman.x +=  20;
				}


				break;


			};


		case Keyboard.RIGHT :
			{
				pacman.gotoAndStop(1);
				pacman.x +=  10;

				var k;

				for (k=1; k<=7; k++)
				{
					if (pacman.hitTestObject(root["engel" + k]))
					{
						pacman.x -=  30;

					}
				}


				if (pacman.hitTestObject(sagduvar))
				{
					pacman.x -=  20;
				}


			};

			break;


	}

	var i;

	for (i=1; i<=8; i++)
	{
		if (pacman.hitTestObject(root["nokta" + i]))
		{
			root["nokta" + i].x = -100;
			skor +=  5;
			skoralani.text = skor.toString();
		}
	}

}
 
BBNET
Geri
Üst