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”]
[/kml_flashembed]
Bu yemlerin farklı farklı yerleremi koyucagız ?
yemlerin hepsi zaten hepsi farklı yerlerde. Yerler derken katmanlardan bahsediyorsanız gerek yok. hepsini bir katmana koysanız da olur.
çok işime yarayacak. emeğinize sağlık.
işinize yaradığına sevindim
duvaraçarpınca direk kazanıyoruz
herhangi bir sorun yok kodlarda. isimlendirmelere dikkat eder misiniz? gözden kaçan birşey olabilir
bu çalışmıyo hit hatası veriyo
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
fla dosyası ekte mevcut indirip inceleyebilirsiniz.
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
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
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.
teşekkürler. kodlar işime yaradı. emeğinize sağlık.
ben teşekkür ederim
Merhabalar.Ben bir labirent oyunu yapıyorum.Nesnenin duvarlardan geçmesini nasıl önleyebilirim? Yardımcı olursanız çok sevinirim.
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.
söylediğiniz gibi yaptım ama duvarlardan geçmeye devam ediyor. hatada vermiyor
bunu tüm koordinarlar için yaptığınızda durmamasının imkanı yok bu kod olduğun yerde dur ilerleme demektir.
proje ödev olarak bunu yapıyorum. ama pacman yemleri yemiyo.yardımcı olur musunuz
hata mı veriyor yoksa başka bir sorun mu var?
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
kodları direkt olarak sahnede boş bir alanı seçtikten sonra F9 tuşuna basarak yazacaksınız. ne hatası veriyor yazabilriseniz yardımcı olmaya çalışırım.
teşekkürler kodları verdiğiniz için çok işime yarayacak.
voovvv
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
Oyunda sorun yok merak etmeyin.
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.
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.
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.
tamam dediğinizi yaptım bu seferde pacman yemleri yemiyor skor tablosuda çalışmıyor
kardeş duvardan geçmiyor adam gibi yapamamışsın sen ondan duvardan geçiyor diyorsun
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);
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?
hata veriyorsa bana hata mesajını yazar mısınız?
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 ?
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.
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 🙁
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.
Evet “var i,j “olarak tanımladım .Parantezlerdede sıkıntı yok sanırım .:(
o değişkenler nasıl tanımlanıyor
flas dosyası mevcut orada tüm kodlar var.
kardeş nasıl tanımladın i ve j değerlerini ve nereden
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++)
Oyunu en son halinin kodlarını yazarmısınız acil lazım yönlendirmede sorun oluyor.
pacman yemleri yemiyor bir yardım edermsiniz?
benimde yemiyor sen yapabildiyen banada anlatabilirmisin lütfen projemi vereceğim:((
yapabildiysen derken? ben yapmasam sitemde olur muydu sizce?
ben size demedim
Fark ettim
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.
pacman yemleri yemiyor hatada hittestObject parametresi boş olamaz yazıyor.Yardımcı olursanız sevinirim
yenicek nesneyi yazdınmı
evet. yoksa yemezdi.
teşekkürler
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
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.
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()
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.
function hit (event:Event):void
bu hatayı veriyor.
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
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
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 🙂
teşekkürler. kolay gelsin.
Merhaba ben rar dosyasını bulamadim
Aşağıda indirme linki mevcut.
Merhaba, ücret karşılığında bunu bana yapmanız mümkün mü?
mail adresim orakcimelis@gmail.com
fla dosyası zaten var. indirebilirsiniz.
bu versiyonla acilamiyor diyor, hangi surum bu flash programi?
flash CS 5.5 as 3.0
pacman asırı yavas gidiyor
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
sağol
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
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
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
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.
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..
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!!
size de kolay gelsin.
merhaba benimde projem var ama ben birkac harita daha eklemek isiyorum nasıl yapabilirim mail olarak da gonderebilirsiniz anlatım uzun sa
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.
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
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.
mustafa akbal bey ben size atsam fla dosyasını hata nedir blabilirmisiniz ben bulamadım projemvar veaha bitiremedim anlamadım cok zorlandım
okuldan vakit bulabileceğimi sanmıyorum. bizimde sınavlar başlamak üzere. yetişecek konular var o sebeple yoğunluk hat safhada maalesef.
bide nesneleri silme yi bulamadım kimse bi şeyden bahsememiş
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
muhtemelen sahnedeki sembollerde adlandırma hatası var. eksik yada yanlış adlandırma yapıldıysa çalışmaz.
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()
pacman nasıl çiziliyor . iki türlü yapmışsınız yardımcı olunmusunuz yaaaaaaaaaaaaa
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.
vereceğiniz bir cevap yaaa .Şu pacman nasıl çiziliyorr offf
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.
olmayın istemirem zaten
Emrin başım üstüne
hocam acil cevap verirseniz çok sevineceğim
Gereken cevapları verdim. İsminiz artık ne ise. Yağmur, hatice… Yeni isimler eklemeye devam