2011-11-10 27 views
3

我的角色在屏幕中間產生,我不確定如何讓殭屍從屏幕的左側和右側產生,並向中間移動。我的目標是讓殭屍自動產生,而中間的角色能夠將它們擊倒。 我剛剛開始研究AS3,但我知道我需要創建一個數組來執行此操作,但不知道如何實現此操作。 有人可以告訴我嗎?謝謝。 這裏是我的代碼:AS3遊戲 - 如何從屏幕的左側和右側產生敵人?

package 
{ 
    import flash.display.MovieClip; 
    import flash.utils.Timer; 
    import flash.events.TimerEvent; 
    import flash.events.KeyboardEvent; 
    import flash.events.Event; 
    import flash.ui.Keyboard; 
    public class ActualGame extends MovieClip 
    { 
     public var char:Character; 
     public var zombie:Zombieclass; 
     public var timer:Timer; 
     private var speed:Number = 4; 
     private var moveleft:Boolean = false; 
     private var moveright:Boolean = false; 
     private var i:Number =0; 

     public function ActualGame() 
     { 
      char = new Character(); 
      stage.addChild(char); 
      zombie = new Zombieclass(0,360); 
      addChild(zombie); 
      timer = new Timer(25); 
      timer.addEventListener(TimerEvent.TIMER, zombie_spawn); 
      stage.addEventListener(Event.ENTER_FRAME, enterframe); 
      stage.addEventListener(KeyboardEvent.KEY_UP, keyup); 
      stage.addEventListener(KeyboardEvent.KEY_DOWN, keydown); 
      timer.start(); 
     } 

     public function zombie_spawn(timerEvent:TimerEvent):void 
     { 
      zombie.zombie_move_right(); 
      if (char.hitTestObject(zombie)) 
      { 
       timer.stop(); 
       trace("hit"); 
      } 
     } 
     public function enterframe(event:Event) 
     { 
      if (moveleft) 
      { 
       char.x -= speed; 
       char.scaleX = -1; 
      } 
      else if (moveright) 
      { 
       char.x += speed; 
       char.scaleX = 1; 
      } 
     } 
     public function keydown(event:KeyboardEvent) 
     { 
      switch (event.keyCode) 
      { 
       case Keyboard.LEFT : 
        moveleft = true; 
        break; 
       case Keyboard.RIGHT : 
        moveright = true; 
        break; 
      } 
     } 
     public function keyup(event:KeyboardEvent) 
     { 
      switch (event.keyCode) 
      { 
       case Keyboard.LEFT : 
        moveleft = false; 
        break; 
       case Keyboard.RIGHT : 
        moveright = false; 
        break; 
      } 
     } 
    } 
} 

Zombieclass:

package 
{ 
    import flash.display.MovieClip; 
    public class Zombieclass extends MovieClip 
    { 

     public function Zombieclass(xcoord:Number, ycoord:Number) 
     { 
      x = xcoord; 
      y = ycoord; 
     } 
     public function zombie_move_right():void 
     { 
      x += 1.5; 

     } 
     public function zombie_move_left():void 
     { 
      x -= 1.5; 
     } 
    } 

} 
+0

我可以看到你的殭屍類嗎? – Frank

+2

聞起來像是給我做家庭作業。你是如何編寫這麼好的代碼的,但是不能利用座標系使殭屍出現在屏幕外? –

+0

同意了,如果你知道事件監聽器而不是數組,很明顯你沒有寫出所有的東西。 – apscience

回答

1

我明白你的問題,我一直在那裏自己。 當通過嘗試,複製其他代碼並修改代碼來學習代碼,並最終達到目標時,可能會錯過稍後需要學習的一些基本知識。

數組的工作原理類似於紙堆。你可以在裏面放一張紙,你可以放一張紙,或者你可以把整個紙堆放在你的桌子上,然後在它們上面各貼一張。這就是你想要對殭屍做的事情。 (形象地說)。

您還需要了解循環的概念。使用循環,即使您事先不知道數組中有多少項,也可以用很少的代碼行處理數組中的所有對象。

你將要做到以下幾點:

  • 創建一個數組,讓您的殭屍
  • 填寫您的數組殭屍。
  • 通過殭屍每幀循環,告訴他們移動。

這樣創建數組: public var zombies:Array = new Array();

添加一些殭屍:

var numberOfZombies:uint = 10; 

for(var i:uint = 0; i<numberOfZombies; ++i) { 
    var zombie:ZombieClass = new ZombieClass(0, (360/numberOfZombies)*i); 
    addChild(zombie); 

    zombies.push(zombie); 
} 

這將創建10個殭屍,把他們在屏幕上,並把它們添加到陣列。

然後,每一幀上,你可以通過數組循環和移動殭屍:

for(var i:uint = 0; i<numberOfZombies; ++i) { 
    var zombie:ZombieClass = zombies[i]; 

    zombie.zombie_move_right(); 
} 

什麼的。 這段代碼可能包含一些錯誤,因爲它沒有經過測試,我在iPad上寫了它,但希望它能幫助你更進一步。 學習使用數組和循環。

祝你好運。

1

我一般喜歡把分離的擔憂。比方說,你有多種類型的殭屍,那麼你可以使用另一種方法來創建它們並使用此方法簡單地添加他們離開&權,無關緊要的,他們會是什麼類型的?

private function addZombie(zombie:Zombie):void 
    { 

      //Get a random number 
      var random:Number = (Math.random() * 100) % 2; 

      //If the number is even , place the zombie on the right 
      if(random == 0) 
      { 
       //add the zombie outside the stage 
       zombie.x == stage.stageWidth + 10; 

       zombie.moveLeft(); 

      }else { //otherwise , place it on the left 

       //add the zombie outside the stage 
       zombie.x = -10; 
       zombie.moveRight(); 
      } 

      addChild(zombie); 

    } 
+0

謝謝你的建議。但是,如果我的錯誤,我相信這個代碼只能控制1個殭屍? –

+0

嗯,在某種程度上,是的,你錯了......這只是你的問題的一個答案,現在如果你想延長你可以指定你想添加多少殭屍,並使用一個計時器來添加儘可能多的你希望,或者直接讓定時器創建殭屍,直到你調用timer.stop()...這取決於你:) – PatrickS

0

代替:

public var zombie:Zombieclass; 

你會碰到這樣的:

public var zombies:Array; 

public var zombies:Vector.<Zombieclass>; 

,而不是和:

zombie = new Zombieclass(0,360); 

你會喜歡的財產以後:

zombies = new Array(20); //20 Zombies 
for(var x:Number = 0; x < zombies.length; x++) { 
    zombies[x] = new ZombieClass(someVar:Number, 360); 
} 

然後,您可以使用定時功能由一個殭屍添加到舞臺之一。在這一點上,我會留給你,不想帶走所有的興奮;)

相關問題