2013-04-05 65 views
0

我正在製作一款遊戲,您作爲玩家拿着棒球棒,當您點擊按鈕時揮動蝙蝠。當你揮動你的蝙蝠時,你擊中了敵人,敵人就會像擊打高爾夫球那樣向相反的方向飛去。我已經完成了移動和攻擊功能的工作,但是我怎麼才能註冊命中,所以它在面對敵人時會擊中敵人並且敵人會返回。這是我迄今所做的:我該如何獲得此次測試的成果

package 
{ 
    import flash.display.MovieClip; 
    import flash.events.Event; 
    import flash.events.KeyboardEvent; 
    import flash.events.MouseEvent; 
    import flash.ui.Keyboard; 

    public class Player extends MovieClip 
    { 
     var walkSpeed:Number = 4; 
     var walkRight:Boolean = false; 
     var walkLeft:Boolean = false; 
     var walkUp:Boolean = false; 
     var walkDown:Boolean = false; 
     var attacking:Boolean = false; 

     public function Player() 
     { 
      stage.addEventListener(KeyboardEvent.KEY_DOWN , walk); 
      addEventListener(Event.ENTER_FRAME, Update); 
      stage.addEventListener(KeyboardEvent.KEY_UP, stopWalk); 
      stage.addEventListener(MouseEvent.CLICK, attack); 
     } 

     function walk(event:KeyboardEvent) 
     { 

      if (event.keyCode == 68) 
      { 
       walkRight = true; 
      } 
      if (event.keyCode == 87) 
      { 
       walkUp = true; 
      } 
      if (event.keyCode == 65) 
      { 
       walkLeft = true; 
      } 
      if (event.keyCode == 83) 
      { 
       walkDown = true; 
      } 
     } 

     function Update(event:Event) 
     { 
      if (attacking == true) 
      { 
       walkRight = false; 
       walkLeft = false; 
       walkUp = false; 
       walkDown = false; 
      } 
      else if (attacking == false) 
      { 
       var dx = parent.mouseX - x; 
       var dy = parent.mouseY - y; 
       var angle = Math.atan2(dy,dx)/Math.PI * 180; 
       rotation = angle; 

       if (walkRight == true) 
       { 
        x += walkSpeed; 
        gotoAndStop('walk'); 
       } 
       if (walkUp == true) 
       { 
        y -= walkSpeed; 
        gotoAndStop('walk'); 
       } 
       if (walkLeft == true) 
       { 
        x -= walkSpeed; 
        gotoAndStop('walk'); 
       } 
       if (walkDown == true) 
       { 
        y += walkSpeed; 
        gotoAndStop('walk'); 
       } 
      } 


     } 

     function stopWalk(event:KeyboardEvent) 
     { 
      if (attacking == false) 
      { 
       if (event.keyCode == 68) 
       { 
        event.keyCode = 0; 
        walkRight = false; 
        gotoAndStop('stance'); 
       } 
       if (event.keyCode == 87) 
       { 
        event.keyCode = 0; 
        walkUp = false; 
        gotoAndStop('stance'); 
       } 
       if (event.keyCode == 65) 
       { 
        event.keyCode = 0; 
        walkLeft = false; 
        gotoAndStop('stance'); 
       } 
       if (event.keyCode == 83) 
       { 
        event.keyCode = 0; 
        walkDown = false; 
        gotoAndStop('stance'); 
       } 
      } 
     } 

     function attack(event:MouseEvent) 
     { 
      if (attacking == false) 
      { 
       attacking = true; 
       gotoAndStop('attack'); 
      } 
     } 
    } 
} 

回答

0

當角色的方向變化,改變這取決於他們現在面臨的,例如方式的變量;當它們朝下時爲0,朝右時爲1,等等。然後用這個和敵人的位置來判斷敵人是否被擊中。爲了讓敵人飛回來,你會得到角色的方向來確定他們會向後飛的方式。我會給一些示例代碼來幫助解釋,但我在我的平板電腦上。

+0

感謝您的回覆我正在考慮這樣做,我應該看看殭屍是否足夠接近被蝙蝠擊中(使用蝙蝠的長度作爲圓半徑),以及如果方向之間的角度角色和殭屍線在一個滑動範圍內,然後他們擊中。所以,如果殭屍的角度與玩家面對的方向相差+或 - 15度,例如他們在滑動領域。我想看看還有沒有其他更簡單的方法。 – user218130 2013-04-05 13:43:15

+0

到目前爲止,我能夠計算半徑,但我怎樣才能得到正確的角度,所以他們在點擊區公共var angle:Number = 0; public var radius:Number = 95; var rad:Number = angle *(Math.PI/180); MovieClip(root).Zombie.x = x + radius * Math.cos(rad); MovieClip(root).Zombie.y = y + radius * Math.sin(rad); – user218130 2013-04-05 13:47:59

+0

我沒有意識到你想讓它如此精確。恐怕我無法幫助你,因爲我還沒有做這些計算。抱歉。 – Hsenfow 2013-04-05 18:11:54