Flash CS5 ve ActionScript 3.0 ile Pacman Oyunu Yapma

Şimdiye kadar öğrendiğimiz birçok komutu uygulayarak Pacman oyununun basit bir versiyonunu yapacağız. Öncelikle Bu konuda büyük emek sarf eden 11ATL sınıfı öğrencisi Furkan Kerim YANBAŞ‘ı tebrik ediyorum. Pacman.rar eklenmiştir. Aşağıdan indirebilirsiniz. (20.05.2015)

  • Bunun için Flash programını açın ve çalışma sahnenizi oluşturun. Sahneye labirent çizin ama labirentin bir çıkışı olsun 🙂
  • Labirentin her duvarını tek tek seçerek F8 tuşuna basın ve Film Klibine çevirin.
  • Çevirdiğiniz nesnelere tek tek farklı isim verin. Biz burada duvarlara a ismini verdik ama her duvarın ismi a olursa programınız çalışmayacaktır. Onun için duvarlara a1,a2,a3,…,a26′ya kadar isimlendirdik.
  • İşin en zor ve uzun kısmı labirent içinde bulunan yemlere aynı şekilde isim vermek. Bizim uygulamamızda tam 81 adet yem var ve isimleri b. Yemlerde de isimler farklı olaması gerektiği için b1,b2,b3,…,b81 şeklinde ayrı ayır isimlendirdik.
  • Birde bitiş çizgisine bayrak koyduk ki çıkışın orası olduğu belli olsun 🙂
  • Skoru yazdırabilmek için sahneye bir dinamik metin alanı ekleyin ve adını skor olarak belirleyin.
  • Ve en son olarak kahramanımız pacman’i çizin ve ismini pacman olarak belirleyin.
  • ve son olarak 28. Satıra bakarsanız orada duvara değerse 2. Kareye git komutu var ve 2. Kareyi yazmadım orada oyun bitti tekrar başla butonu var o butonu koyup tıklayınca oyunun başına yani 1. Kareye gitme kodunu yazarsanız sorunsuz çalışacaktır aksi halde pacman duvardan geçer. İyi günler herkese.

Hepsi bitince sahnede boş bir alanı tıklayın ve F9 tuşuna basarak aşaıdaki kodları yazın.

stop();
stage.addEventListener(Event.ENTER_FRAME, hit);
stage.addEventListener(KeyboardEvent.KEY_DOWN,hareket);
function hareket(event:KeyboardEvent)
{
	if(event.keyCode==Keyboard.LEFT)
	{
		pacman.x=pacman.x-1;
		pacman.rotation=180;
	}

	if(event.keyCode==Keyboard.RIGHT)
	{
		pacman.x=pacman.x+1;
		pacman.rotation=0;
	}
	if(event.keyCode==Keyboard.UP)
	{
		pacman.y=pacman.y-1;
		pacman.rotation=270;
	}
	if(event.keyCode==Keyboard.DOWN)
	{
		pacman.y=pacman.y+1;
		pacman.rotation=90;
	}
}
function hit (e:Event):void 
{ var i,j ;
	for (j = 1; j < =26;j++)
	{
		if (pacman.hitTestObject(root["a"+j]))
          gotoAndStop(2);		  
	}	
	for (i = 1; i < =81;i++)
	{
		if (pacman.hitTestObject(root["b"+i]))
		  {
			  root["b"+i].x = -100;
			  skor.text = String(parseInt(skor.text)+1);
		   }   
	}	

}

Normalde bir nesnenin başka bir nesneye çarpmasını kontrol etmek için kullanılan komut hitTestObject()’tir ve kullanımı şu şekildedir;

 nesne.hitTestObject(çarpılan nesne)

Bizim kahramanımız pacman, 81 adet yeme ve 26 adet duvara çarptımı diye tek tek kontrol etmek oldukça zor olacaktı. İşte o kısmı kısaca for döngüsü kullanarak geçtik. Yani kısaca;

function hit (e:Event):void 
{ var i,j ;
	for (j = 1; j<=26;j++)
	{
		if (pacman.hitTestObject(root["a"+j]))
          gotoAndStop(2);		  
	}	
	for (i = 1; i<=81;i++)
	{
		if (pacman.hitTestObject(root["b"+i]))
		  {
			  root["b"+i].x = -100;
			  skor.text = String(parseInt(skor.text)+1);
		   }   
	}	

}

Kodlar bu kadar kısalınca insan iyi ki döngüler var diyor. 🙂 Kolay gelsin.

Bu uygulamamızda pacman yön tuşları ile hareket ettirilince ok yönüne göre dönüyor ama yukarıdaki kodlarda dönmeyecektir. Çünkü biraz daha üzerinde çlıştık ve geliştirmeye devam ediyoruz. Geliştikçe kodları yükleyeceğim.

[kml_flashembed publishmethod=”static” fversion=”8.0.0″ movie=”http://www.mustafaakbal.com.tr/wp-content/uploads/2013/05/pacman.swf” width=”400″ height=”300″ targetclass=”flashmovie”]

Get Adobe Flash player

[/kml_flashembed]

İndirmek İçin Tıklayın

101 yorum

  • Emorfo Osman

    Bu yemlerin farklı farklı yerleremi koyucagız ?

    • mustafaakbal

      yemlerin hepsi zaten hepsi farklı yerlerde. Yerler derken katmanlardan bahsediyorsanız gerek yok. hepsini bir katmana koysanız da olur.

  • hasan

    çok işime yarayacak. emeğinize sağlık.

  • duvaraçarpınca direk kazanıyoruz

  • kezban yiyen

    bu çalışmıyo hit hatası veriyo

    • hatice

      kardeş sen o i ve j değerlerini nasıl tanımladın bana yardımcı olabilirmisiniz lütfen bugün pdojemizi vermem
      lazım acil cevap verirsen cok minnetar kalırım

  • kezban yiyen

    function hit (e:Event):void
    { var i,j ;
    for (j = 1; j<=26;j++)
    {
    if (pacman.hitTestObject(root["a"+j]))
    gotoAndStop(4);
    }
    for (i = 1; i<=81;i++)
    {
    if (pacman.hitTestObject(root["b"+i]))
    {
    root["b"+i].x = -100;
    skor.text = String(parseInt(skor.text)+1);
    }
    }

    }

    bunda bi hata var

    • mustafaakbal

      hatayı yazar mısınız? ona göre bir cevap vereyim. bende herhangi bir hata vermiyor.zaten kodları deneyerek sitede de yayınlıyorum

    • mustafaakbal

      hatayı yazar mısınız? ona göre bir cevap vereyim. bende herhangi bir hata vermiyor.zaten kodları deneyerek sitede de uygulamasını yayınlıyorum.

  • murat

    teşekkürler. kodlar işime yaradı. emeğinize sağlık.

  • Tuba

    Merhabalar.Ben bir labirent oyunu yapıyorum.Nesnenin duvarlardan geçmesini nasıl önleyebilirim? Yardımcı olursanız çok sevinirim.

    • mustafaakbal

      kusura bakmayın biraz geç oldu ama şu şekilde düşünerek yapabilirsiniz.
      Nesne duvara çarpınca koordinatını yani x düzleminde gidiyorsa x’i, y düzleminde gidiyorsa y’yi arttırmazsanız hareket etmeyecektir.
      daha açık olsun derseniz mesela nesne yatayda sağa doğru gidiyor bu durumda nesne.x = nexne.x + 5 ile hareket ettiriyorsunuz. eğer duvara çarparsa arttırma işlemi yapmayın yani nesne.x=nesne.x yapın böylelikle olduğu yerde kalacaktır nesne.

  • tuğçe

    proje ödev olarak bunu yapıyorum. ama pacman yemleri yemiyo.yardımcı olur musunuz

  • Ömer

    function hit (e:Event):void
    { var i,j ;
    for (j = 1; j<=26;j++)
    {
    if (pacman.hitTestObject(root["a"+j]))
    gotoAndStop(4);
    }
    for (i = 1; i<=81;i++)
    {
    if (pacman.hitTestObject(root["b"+i]))
    {
    root["b"+i].x = -100;
    skor.text = String(parseInt(skor.text)+1);
    }
    }

    }
    bu kodları nereye yazcaz ve 1.satırda hata veriyor

  • musa

    Oyunun kodlarını doğru vermemişsiniz duvara çarpınca hata vermiyo bu ne biçim oyun bence bu işi bırakıp internet kafa çalıştırın

    • mustafaakbal

      Oyunda sorun yok merak etmeyin.

    • mustafaakbal

      Eğer 4. Kareniz yoksa çalışmayacaktır. Bu kodlar sadece pacman için. Duvara çarpınca 4. Kareye gidiyor ve oyun bitti yazızı orada. Oradan bir butonla tekrar başlıyorsunuz. Lütfen azcık kodları yorumlayınız.

  • basak

    lütfen diğer kodlarıda yazarmısınız.ne yaptıysanız yaptım ama olmuyo duvardanda geçiyo ve pacman yukarı aşağı gitmiyor.

    • mustafaakbal

      Duvardan geçesine imkan yok çünü ilk hittest olan yerde yani 28. Satırda duvara çarpınca 4. Kareye git var 4. Karede ise oyun bitti tekrar başla butonu bulunuyor onu koymadım sadece pacmani hareket ettiren ve yemleri yiyen kodları koydum. 4. Kareye o tasarımıda yaparsanız çalışacaktır sorunsuz.

    • kardeş duvardan geçmiyor adam gibi yapamamışsın sen ondan duvardan geçiyor diyorsun

      • mustafaakbal

        arkadaşım burada tüm kodlar yok. azcıkta uğraşıverin. mantığını size gösterdik herşeyi bizden bekliyorsunuz. beğenmediyseniz tam kodları bulun kullanın. hepsini vermek zorunda değilim.

  • pacman yemleri yemiyor off lütfen yardımcı olun.

  • kodların hepsini yazdım sadece şurda hata veriyor neden ?
    skor.text = String(parseInt(skor.text)+1);

    • mustafaakbal

      actionscript büyük küçük harfe duyarlıdır. yazdığınız kodlarda buna çok dikkat edin. yani nesneler isimlendirilirken araba olarak isimlendirilir ama kodlarda Araba olarak kullanılırsa çalışmayacaktır. Hata mesajını lütfen yazar mısınız? Flash zaman çizelgesinde derleyici hatalarını verir. ona göre yardımcı olmaya çalışırım.

  • hocam pacman hareket etmiyor nasıl hareket ettiricem?

  • Lilay

    Merhabalar.Verdiğiniz kodlar işime yardımcı oldu ancak pacman yemleri yemiyor ,duvardan geçiyor ve skor hesaplanmıyor ve

    Scene 1, Layer ‘Layer 1’, Frame 2, Line 67 1084: Syntax error: expecting identifier before assign.
    Scene 1, Layer ‘Layer 1’, Frame 2, Line 67 1084: Syntax error: expecting rightparen before j.
    Scene 1, Layer ‘Layer 1’, Frame 2, Line 72 1084: Syntax error: expecting identifier before assign.
    Scene 1, Layer ‘Layer 1’, Frame 2, Line 72 1084: Syntax error: expecting rightparen before i.

    hatalarını veriyor nasıl çözebilirim yardımcı olabilir misiniz ?

    • mustafaakbal

      hata mesajlarından anladığım kadarı ile değişken tanımlama ve parantez hataları var. hata yazan satırların kodlarını yazabilir misiniz? inceleyelim çözmeye çalışalım.

      • lilay

        1.hata=for (j = 1; j<=26;j++)
        2.hata=for (i = 1; i<=81;i++)

        Hatalara tıkladığımda sorunların hepsinin bu satırlarda oldugunu gösteriyor .Ayrıca ReferenceError: Error #1065: TLFTextField değişkeni tanımlanamadı. diye bir yazı çıkıyor output sekmesinde yardımcı olursanız çok sevinirim performans ödevim için gerekli olan kodlar 🙁

        • mustafaakbal

          i ve j değişkenlerini tanımladınız mı? tanımlanmadıysa hata bunlardan kaynaklı olabilir yada üst satırlarda bulunan parantez hatası bu satırları etkiler. parantezleri de kontrol edin.

        • hatice

          kardeş nasıl tanımladın i ve j değerlerini ve nereden

          • mustafaakbal

            function hit (e:Event):void
            { var i,j ; /değişkenler burada tanımlanıyor. bilmem yeterince açık olabildi mi?
            for (j = 1; j<=26;j++)

  • Samet

    Oyunu en son halinin kodlarını yazarmısınız acil lazım yönlendirmede sorun oluyor.

  • armagan

    pacman yemleri yemiyor bir yardım edermsiniz?

  • ahmet irfanoglu

    pacman aşağı yukarı gidiyor ama duvarlardan geçiyor ve yemleri yemiyor. herhangi bi hata vermiyo. 2.kareye gitmiyo

    bi de şunu yazıyo

    TypeError: Error #2007: hitTestObject parametresi boş olmamalıdır.
    at flash.display::DisplayObject/_hitTest()
    at flash.display::DisplayObject/hitTestObject()
    at pacman_fla::MainTimeline/hit()

    yardımcı olursanız sevinirim.

  • hilal

    pacman yemleri yemiyor hatada hittestObject parametresi boş olamaz yazıyor.Yardımcı olursanız sevinirim

  • uzem

    teşekkürler

  • aslı

    ya benim duvara değince yanmasını değilde pacman ın durmasını istiyorum onu kodunu nasıl yazıcam lütfen yardımcı olurmusun

    • mustafaakbal

      for (j = 1; j<=26;j++) { if (pacman.hitTestObject(root["a"+j])) gotoAndStop(2); } olan yeri for (j = 1; j<=26;j++) { if (pacman.hitTestObject(root["a"+j])) { burada hareket yönünü belirleme komutlarını yazın. } } şeklinde değiştirmeniz gerekecektir. Ancak biraz daha detaylı düşünün çünkü çarpınca tüm hareketleri durdurursanız bu kez pacman olduğu yerde kalacaktır. for (j = 1; j<=26;j++) { if (pacman.hitTestObject(root["a"+j])) { if(event.keyCode==Keyboard.LEFT) { pacman.x=pacman.x; pacman.rotation=180; } } } böyle yaparsanız sola gitmez ancak 4 yön içinde bunu uygularsanız bukez pacman duvara çarptığında artık oradan ayrılamaz çakılı kalır tabiri caizse.

  • ali

    böyle bi hata alıyorum hemde bir sürü arka arkaya çözümü bilen varsa yarım lütfen

    TypeError: Error #2007: Parameter hitTestObject must be non-null.
    at flash.display::DisplayObject/flash.display:DisplayObject::_hitTest()

    • mustafaakbal

      eğer birden fazla karede hittest kullanıyorsanız ve hepsinin çağırılan fonksiyon isimler aynı ise bu hatayı veriyor genelde. aynı fonksiyonları farklı karelerde kullanacaksanız fonksiyon isimlerini de değiştirmelisiniz.

  • hilal

    function hit (event:Event):void
    bu hatayı veriyor.

  • mehmet

    packman yaptım ancak ses dosyası ekleyemiyorum

    kullandığım kodlar
    hizz = 100;
    yatay = random(1050);
    dikey = random(800);
    //
    onEnterFrame = function () {
    if (mak_mc.a_mc.hitTest(yem)){
    yem._x = yatay;
    yem._y = dikey;
    txtPuan.text=int(txtPuan.text)+9
    }

    if (yatay>1050-yem._width*4) {
    yatay -= yem._width*4;
    }
    if (dikey>800-yem._height*4) {
    dikey -= yem._height*4;
    }
    };

    nereye ekliyeceğim yardım edin

    • mustafaakbal

      ses sürekli olsun derseniz şu şekilde olacak.
      ses eklemek için flashta File(Dosya) >> import(içe Aktar) >> import to libraryardından (Kütüphaneye aktar) yapıp Flash içine sesi alın. Yeni bir layer oluşturun. ve layerin ilk frameni seçin.
      seçince Alttaki properties (Özellikler) menüsünde frame ile ilgili ses ayarları açılır.
      ordaki Ses AD (Yok) yazan açılan menüde Kütüphaneye eklediğiniz müzik görünücektir.
      bunu seçerek o frame müziği eklemiş olursunuz.

      ses dursun ve çalmasın isterseniz bir buton yapıp içine
      stopAllSounds(); yazarak sesleri kapatabilirsiniz

  • dilara

    ya proje ödevim vardı çokkkkk teşekkürler baya yardımcı oldunuz tabi başta anlamadım yemleri yemedi falan ama sonunda hatamı buldum yem sayılarını falan değiştirdim sonunda çalıştı çokk teşekkür ederim :))) valla arada çalışmıyo diyen var ama çok güzelde çalışıo 🙂 teşekürler mustafaakbal 🙂

  • Eray

    Merhaba ben rar dosyasını bulamadim

  • melis

    Merhaba, ücret karşılığında bunu bana yapmanız mümkün mü?
    mail adresim orakcimelis@gmail.com

  • melis

    bu versiyonla acilamiyor diyor, hangi surum bu flash programi?

  • pacman asırı yavas gidiyor

    • mustafaakbal

      kodlardan hızını ayarlayın.
      pacman.x=pacman.x+1;
      ve
      pacman.y=pacman.y-1;
      kodları var oradan +1 veya -1 i değiştirin

  • TypeError: Error #2007: hitTestObject parametresi boş olmamalıdır.
    at flash.display::DisplayObject/_hitTest()
    at flash.display::DisplayObject/hitTestObject()
    at pacmanog_fla::MainTimeline/hit()

    bu hatayı veriyor ne yapmalıyım herseyı tek bır framede uyguladım zaten

    • mustafaakbal

      if (pacman.hitTestObject(root[“a”+j]))
      satırında hittest içine gelen değişkenin adını yanlış yazmış olabilirsiniz. Nesnelerin isimlerini kontrol etmenizde fayda var

  • Alperen

    Kodları fılan burdan aldım ama hıc bır sey hareket etmıyor
    ne yapmam lazım acıl pacmannın ısmını fılan verdım
    kodları da yazdım .
    ACIL YARDIM PLASR

    • mustafaakbal

      kodlarda sorun yok. fla olarak indirdiğinizde çalışır ancak kodları kendi yaptığınız uygulamada kullanacaksınız dikkatli olarak değişiklik yapmanız gerekecektir.

  • Alperen

    6 7 tane hata verıyor
    kodları burdan aldım ımkansız
    ne yapmam lazım proje odevım acıl yardım edın plase
    Teşekkürler..

    • mustafaakbal

      kodlarda sorun yok. fla olarak indirdiğinizde çalışır ancak kodları kendi yaptığınız uygulamada kullanacaksınız dikkatli olarak değişiklik yapmanız gerekecektir.

  • Proje ödevim vardı Flash dan action kodları ile oyun yapımı son güne bırakmıştım çok teşekkür ederim sadece indirdim ve renklerı degıstırdım direk hocaya vericek şekilde örneğiniz. Çok sağolun hız içinde koddan +1 ve ya -1 olanlar 3 veya 4 yaparsanız iyi oluyor iyi kodlamalar!!

  • metehan

    merhaba benimde projem var ama ben birkac harita daha eklemek isiyorum nasıl yapabilirim mail olarak da gonderebilirsiniz anlatım uzun sa

    • mustafaakbal

      fla dosyası var. bu kodlar bir kareye yazıldı. siz isterseniz birkaç kare daha ekleyip oraya istediğiniz haritaları çizersiniz. bitiş çizgisine gelince hittest ile kontrol eder bayrağa temas edince sonraki kareye gotoAndStop ile geçerek oynamaya devam edebilirsiniz.

  • metehan

    bakabilirmisinizzzz acillllll mustafa akbal beyy ben yeni harita ekledim ve calısıyor ama bı sorun var oyun kasıyor cabuk cozumu bulabiirmisiniz cok minnettar olurum

    • mustafaakbal

      döngülerden kaynaklı kasmalar oluyor. birde nesneleri gizledik yani sahne dışına attık onun da etkisi olabilir. nesneleri silmeyi araştırırsanız çözüm olacaktır.

      • metehan

        mustafa akbal bey ben size atsam fla dosyasını hata nedir blabilirmisiniz ben bulamadım projemvar veaha bitiremedim anlamadım cok zorlandım

        • mustafaakbal

          okuldan vakit bulabileceğimi sanmıyorum. bizimde sınavlar başlamak üzere. yetişecek konular var o sebeple yoğunluk hat safhada maalesef.

      • metehan

        bide nesneleri silme yi bulamadım kimse bi şeyden bahsememiş

  • irem

    slm hocam .hocom pacmanım yemleri yemiyor birde başlangıcı labirentin dışında gidiyor hemde adım adım ilerlemiyor lüten yardımcı olabilirmisiniz

    • mustafaakbal

      muhtemelen sahnedeki sembollerde adlandırma hatası var. eksik yada yanlış adlandırma yapıldıysa çalışmaz.

  • hatice

    slm hocam . benim pacmanım yemleri yemiyor hemde duvarların yanından ğeçiyor ne yapmam lazım birde şu kodda hata veriyor
    TypeError: Error #2007: hitTestObject parametresi boş olmamalıdır.
    at flash.display::DisplayObject/_hitTest()
    at flash.display::DisplayObject/hitTestObject()
    at projeoyun_Sahne1_fla::MainTimeline/hit()

  • irem

    pacman nasıl çiziliyor . iki türlü yapmışsınız yardımcı olunmusunuz yaaaaaaaaaaaaa

    • mustafaakbal

      pacman ilk çiziliyor sonrasında sembole dönüştürülüp içinde ağız açma kapatma kareleri ekleniyor. böylece pacman ağzını sürekli açıp kapatabiliyor. 2 tane pacman yok 1 tane var ve sembolün içinde diğer çizimler.

  • hatice

    vereceğiniz bir cevap yaaa .Şu pacman nasıl çiziliyorr offf

    • mustafaakbal

      sürekli farklı isimler ve mail adresileri ile yazmayı bırakır mısınız lütfen. sadece isminiz değil ip adresinizde çıkıyor sistemde. irem, hatice, defne… vb. artık isminiz neyse. kabalığınızdan ve üslüp bozukluğunuzdan dolayı gerekenden fazla yardımcı olamayacağım.

  • yağmur

    hocam acil cevap verirseniz çok sevineceğim

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir