Action Script 3.0 ve Flash ile Basit Bir Oyun Örneği

15 Temmuz 2009 – 20:30

AS nin mantığını iyice öğrenebilmek için basit bir oyun yazmakla işe başlayabilirsiniz. Bunun için örnek olarak Action Script 3.0 ve flash kullanarak bir oyun hazırlayacağız. Oyunumuz şöyle olsun: karelerden oluşan bir platform çizelim ve oyuncu, bu platform üzerinde gizleyeceğimiz bir kareyi kendi koyduğumuz belli zaman dilimi içersinde platforma tıklayarak bulmaya çalışsın. Bulduğunda bir üst levela geçsin ve bir üst levelda gizlediğimiz bu kare bir önceki levela göre daha küçük olsun. Öncelikle platformumuzun ve gizleyeceğimiz karenin çiziminden başlayalım. Bir flash dosyası açıp ekrana soldaki menüden çizgi çizme kısayolunun yardımıyla aralıkları sabit 45×45 olan kareler çizelim. Platformumuzun görüntüsü şöyle olacak:

 

platform 

 

Daha sonra platformda bulmaya çalışacağımız 45×45 boyutundaki gizli kareyi çizelim. Bu karenin gizli olmasını istediğimiz için alphasını 0 yaparak görünmez hale getirelim. Bu çizdiğimiz iki nesneyi de, platform ve gizli kareyi, action script kısmında bir class olarak tanımlayıp kullanabilmek için “convert to symbol” seçeneğiyle movie clip haline getirelim. Ben burada oluşturduğum bu karenin ismini “kare” yaptım, kodda kullanırken bu isimle çağıracağız. Bir de oyunda gizli kare bulunduğunda ekranda level tamamlandığı için bir atraksiyon yapalım, mesela bir anda büyüyen kırmızı bir balon olsun. Bunun için 15sn süren bir movie hazırlayalım. 1. snye soldaki menüden daire kısayoluyla şekli çizelim ve boyutunu olabilecek en küçük hale getirelim. 15.snye de istediğimiz boyutta aynı daireden çizelim ve 1-15 sn arasını seçerek create motion tween diyelim. Hazırladığım bu ufak efekte “success” ismini verdim kod kısmında bu isimle çağıracağım. Bu şekilde oyunumuzun tasarım kısmı tamamlanmış oldu.

 

Şimdi de oyunumuzun kod kısmına bakalım. Öncelikle kullanacağımız özelliklere ve eventlara göre kodun çalışması için gereken classları çağıralım, gerekli değişkenleri tanımlayalım ve ardından “kareler” ismini verdiğimiz classın constructorını yazalım. İçine kullanacağımız fonksiyonları tek tek tanımlayalım ve ardından fonksiyonları yazalım.

 

package

{

                import flash.display.Sprite;

                import flash.display.MovieClip;

                import flash.text.TextField;

                import flash.utils.*;

                import flash.events.MouseEvent;

                import flash.events.TimerEvent;

               

                public class kareler extends Sprite

                {

                               var karemiz:kare;

                               var currentFrame:int = 1;

                               var countdownTimer:Timer;

                               var kacSaniyeGecmis:int = 0;

                               var countdownTimer2:Timer;

                               var tField1:TextField;

                               var tField2:TextField;

                               var tField3:TextField;

                               var level:int = 1;

                              

                               var now:Date;

                               var endTime:Number;

                               var j:int = 6;

                              

                               var bitti:Boolean = false;

                               var timerBitti:Boolean = true;

                              

                               public function kareler()

                              {

                                               //gizli kareyi oluştur

karemiz = new kare();

                                               //ekrana ekle

                                               addChild(karemiz);

                                               //kullanacagımız fonksiyonları sırasıyla cagır

                                               init();

                                               timer();

                                               imgClick();

                               }

                              

                              

                               function init()

                               {

                                              

                                               var rand:Number = Math.random();  

//gizli karenin yerini random ayarla

                                               var degerx:int = rand * 450;                                      

                                               var bolumx:int = int(degerx/45);

                                               var xpos:int = bolumx*45;

                                               karemiz.x = xpos;

                                              

                                               var degery:int = rand * 355;

                                               var bolumy:int = int(degery/45);

                                               var ypos:int = bolumy*45;

                                               karemiz.y = ypos;

                                               //x ve y koordinatlarını random olusturduk                 

                               }

                              

                               function timer()

                               {

                                              

                                               countdownTimer = new Timer(1000);  //her 1 snde

                                               countdownTimer.addEventListener(TimerEvent.TIMER, updateTime);

                                               now = new Date();

                                               endTime = now.getTime() + 15*1000;

 

                                               kacSaniyeGecmis = 0;

                                               j = 6;                      //karenin boyutu icin

                                               karemiz.width = 45*j;

                                               karemiz.height = 45*j;

                                              

                                               bitti = false;

                                               countdownTimer.start();

                               }

                              

                                               function updateTime(event:TimerEvent):void

                                               {

                                                               kacSaniyeGecmis++;

                                                              

                                                               var gecenZaman:Number = now.getTime() + kacSaniyeGecmis*1000;

               

                                                               if(gecenZaman >= endTime)

                                                               {

                                                                              bitti = true;

                                                                              tField2 = new TextField();

                                                                             tField2.autoSize = “center”;

                                                                              tField2.background = true;

                                                                              tField2.border = true;

                                                                              tField2.x = 200;

                                                                              tField2.y = 230;

                                                                              tField2.text = “GAME OVER!”;

                                                                              addChild(tField2);

                                                                              countdownTimer.stop();

                                                                             

                                                               }

                                              

                                               }

                              

                              

                               function imgClick()

                               {

                                               karemiz.addEventListener(MouseEvent.CLICK,mouse);

                               }

                              

                               function updateTime2(event:TimerEvent):void

                               {

                                               timerBitti = true;

                                              

                                               countdownTimer2.stop();

                                               j–;

                                               if(j==0)

                                               {

                                                               bitti = true;

                                                          //alttaki contains kod parcacıgı level atlama yazısı cıktıgında ekranı dondurmak için

                                                               if(contains(tField1))

                                                                              removeChild(tField1);

                                                               if(contains(tField2))

                                                                              removeChild(tField2);

                                                              

                                                               tField3 = new TextField();

                                                               tField3.autoSize = “center”;

                                                              tField3.background = true;

                                                               tField3.border = true;

                                                               tField3.x = 200;

                                                               tField3.y = 200;

                                                               tField3.text = “KAZANDINIZ!”;

                                                               addChild(tField3);

                                                               countdownTimer.stop();

                                               }

                                                                                                

                                              now = new Date();

                                               endTime = now.getTime() + 15*1000;

                                               kacSaniyeGecmis = 0;

                                               init();

                                              

                                               bitti = false;

                                              

                                               karemiz.width = 45*j;

                                               karemiz.height = 45*j;

                                                                             

                                              

                                               if(contains(tField1))

                                                               removeChild(tField1);

                                               if(contains(tField2))

                                                               removeChild(tField2);

                                              

                                              

                                }

                              

                                private function mouse(event:MouseEvent):void

                               {

                                               if(!bitti && timerBitti)

                                                               {

                                                                   var bitisMov:success = new success();

                                                                              bitisMov.x = 50;

                                                                              bitisMov.y = 50;

                                                                              this.addChild(bitisMov);

                                                                             

                                                                              if(tField1 != null)

                                                                                              if(contains(tField1))

                                                                                                              removeChild(tField1);

                                                                                                             

                                                                              tField1 = new TextField();

                                                                             tField1.autoSize = “center”;

                                                                              tField1.background = true;

                                                                              tField1.border = true;

                                                                              tField1.x = 200;

                                                                              tField1.y = 200;

                                                                             tField1.text = “BULUNDU!!”;

                                                                             

                                                                           addChild(tField1);

                                                                              level++;

                                                                              levelAtlaText();

                                                                             

                                                                              timerBitti = false;

                                                                              countdownTimer2 = new Timer(1000); 

                                                                              countdownTimer2.addEventListener(TimerEvent.TIMER, updateTime2);

                                                                              countdownTimer2.start();

                                                                             

                                                               }

                                              

                   }

                   function levelAtlaText():void

                   {

                               if(tField2 != null)

                                      if(contains(tField2))

                                               removeChild(tField2);

                                                                                                             

                               tField2 = new TextField();

                               tField2.autoSize = “center”;

                               tField2.background = true;

                               tField2.border = true;

                               tField2.x = 200;

                               tField2.y = 230;

                               tField2.text = “LEVEL “+level;

                               addChild(tField2);

                                              

                        }

 

                }

}

 

 

  

Oyunumuzun görüntüsü şöyle olacak:

 

output 

 

7 leveldan oluşan basit bir kareli platformda belirli bir süre içinde  her levelda küçülen gizli bir kareyi bulma oyunu yapmış olduk. Action scriptin mantığını öğrenmek için bununla başlayabilirsiniz. Kolay gelsin.

Bookmark and Share

Post a Comment

Subscribe without commenting