如何让角色跳跃?

问题描述:

这是我的拳头时间,曾经需要使用这个为我的游戏之一。我想要角色跳跃。我一直试图得到这个结果大约一个小时,但没有运气=(我正在使用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

您可以尝试的一种方法是: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; 
     } 
    } 
}  

编辑:贾森的方法很好,但我不确定如果你打算有某种碰撞检测会有用。

我会做的是创建角色的跳跃然后调用的gotoAndPlay该帧补间动画,并补间的最后一帧画上了句号,或gotoAndStop上“静止”帧,或任何帧代表空档位置。

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

这将使你在看最大的动画控制和感觉。你也可以通过编程来实现,但是我个人建议不要这样做。它将需要更少的时间来设置它,并且稍后您可以调整和优化跳跃动画。您可以根据目标对象附近做几种类型的跳跃动画等

我也会改变这个东西:在这里你有时间和地点的东西所有的规则

if(character.currentLabel != "walkingRight") 

通过定义新功能可以做到的,所以,在你的控制逻辑,你只需要调用

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

凡characterCan(字符串)是检查,如果这是可能的方法。例如,如果你在跳跃和射击,你显然不能走路,所以最终你将不得不开始在这些if语句中增加逻辑,这会变得混乱无序。

一个非常简单的方法是具有垂直速度以及水平速度。 当用户按下“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; 
     } 
    } 
}