2012-04-28 83 views
1

這是我的拳頭時間,曾經需要使用這個爲我的遊戲之一。我想要角色跳躍。我一直試圖得到這個結果大約一個小時,但沒有運氣=(我正在使用AS3和flash CS5.5。到目前爲止,我所有的代碼都是通過鍵盤輸入使字符左移和右移。可能有人請幫助如何讓角色跳躍?

這是到目前爲止我的代碼:?

public class Dodgeball extends MovieClip 
{ 
    public var character:Character; 
    public var rightDown:Boolean = false; 
    public var leftDown:Boolean = false; 
    public var speed:Number = 3; 
    public var timer:Timer; 


    public function Dodgeball() 
    { 

     character= new Character(); 
     addChild(character); 

     stage.addEventListener(KeyboardEvent.KEY_DOWN, myKeyDown); 
     stage.addEventListener(KeyboardEvent.KEY_UP, MyKeyUp); 
     timer = new Timer(24); 
     timer.addEventListener(TimerEvent.TIMER, moveClip); 
     timer.start(); 

    } 
    public function myKeyDown(event:KeyboardEvent):void 
    { 
     if (event.keyCode == Keyboard.RIGHT) 
     { 
     rightDown = true; 

      if(character.currentLabel != "walkingRight") 
      { 
       character.gotoAndStop ("walkingRight"); 
      } 
     } 
     if (event.keyCode == Keyboard.LEFT) 
     { 
      leftDown = true; 
       if (character.currentLabel != "backingUp") 
       { 
        character.gotoAndStop("backingUp"); 
       } 
     } 
    } 
    public function MyKeyUp(event:KeyboardEvent):void 
    { 
     if(event.keyCode == Keyboard.RIGHT) 
     { 
      character.gotoAndStop("standing"); 
      rightDown = false; 
     } 
     if (event.keyCode == Keyboard.LEFT) 
     { 
      character.gotoAndStop("standingLeft"); 
      leftDown = false; 
     } 
    } 
    public function moveClip(event:TimerEvent):void 
    { 
     if (rightDown) 
     { 
      character.x += speed; 
     } 
     if (leftDown) 
     { 
      character.x -=speed; 
     } 
     event.updateAfterEvent(); 
    } 
} 

}

+0

嘗試'if(event.keyCode == event.RIGHT)'如果你想要 – mgraph 2012-04-28 21:09:21

回答

1

您可以嘗試的一種方法是:http://www.actionscript.org/forums/showthread.php3?t=256009與您的speed變量一樣,grav確定字符的垂直位置。

var grav:Number = 10; 
var jumping:Boolean = false; 
var jumpPow:Number = 0; 

stage.addEventListener(KeyboardEvent.KEY_DOWN, onKeyDown); 
stage.addEventListener(Event.ENTER_FRAME, update); 

function onKeyDown(evt:KeyboardEvent):void 
{ 
    if(evt.keyCode == Keyboard.UP) 
    { 
     if(jumping != true) 
     { 
      jumpPow = -50; 
      jumping = true; 
     } 
    } 
} 


function update(evt:Event):void 
{ 
    if(jumping) 
    { 
     player_mc.y += jumpPow; 
     jumpPow += grav; 

     if(player_mc.y >= stage.stageHeight) 
     { 
      jumping = false; 
      player_mc.y = stage.stageHeight; 
     } 
    } 
}  

編輯:賈森的方法很好,但我不確定如果你打算有某種碰撞檢測會有用。

1

我會做的是創建角色的跳躍然後調用的gotoAndPlay該幀補間動畫,並補間的最後一幀畫上了句號,或gotoAndStop上「靜止」幀,或任何幀代表空檔位置。

if (event.keyCode == Keyboard.SHIFT) 
    { 
     character.gotoAndPlay("simpleJump"); 
     jumpDown = false; 
    } 

這將使你在看最大的動畫控制和感覺。你也可以通過編程來實現,但是我個人建議不要這樣做。它將需要更少的時間來設置它,並且稍後您可以調整和優化跳躍動畫。您可以根據目標對象附近做幾種類型的跳躍動畫等

我也會改變這個東西:在這裏你有時間和地點的東西所有的規則

if(character.currentLabel != "walkingRight") 

通過定義新功能可以做到的,所以,在你的控制邏輯,你只需要調用

if(characterCan(character,"walkright")) ... 

凡characterCan(字符串)是檢查,如果這是可能的方法。例如,如果你在跳躍和射擊,你顯然不能走路,所以最終你將不得不開始在這些if語句中增加邏輯,這會變得混亂無序。

1

一個非常簡單的方法是具有垂直速度以及水平速度。 當用戶按下「UP」或「JUMP」時,將y速度設置爲負值並在movieClip函數中更新它。當角色達到一定高度時,扭轉速度。

利用重力和加速度看起來更好,但是這是一個非常好的開始的地方。研究運動學方程,看看如何讓角色加速。

public var originalY; 

public function myKeyDown(event:KeyboardEvent):void 
{ 
    if (event.keyCode == Keyboard.UP && vSpeed == 0) 
    { 
     originalY = character.y; 
     ySpeed = -1; 
    } 
} 


public function moveClip(event:TimerEvent):void 
{ 
    if (vSpeed != 0) 
    { 
     character.y += vSpeed; 

     /* make the character fall down after reaching max jump height */ 
     if(originalY - character.y > jumpHeight) { 
      vSpeed = vSpeed * -1; 
     } 

     /* level the character after he's hit the ground (so he doesn't go through) */ 
     else if(character.y >= originalY) { 
      character.y = originalY; 
      vSpeed = 0; 
     } 
    } 
}