Actionscript 3 如何让角色跳跃?
这是我第一次需要在我的游戏中使用它。我想让角色跳跃。我已经试着得到这个结果大约一个小时了,但是没有运气=(我使用的是AS3和flash CS5.5。到目前为止,我的代码所做的只是根据键盘输入使字符向左和向右移动。有人能帮我吗 以下是我目前的代码:Actionscript 3 如何让角色跳跃?,actionscript-3,flash,flash-cs5,Actionscript 3,Flash,Flash Cs5,这是我第一次需要在我的游戏中使用它。我想让角色跳跃。我已经试着得到这个结果大约一个小时了,但是没有运气=(我使用的是AS3和flash CS5.5。到目前为止,我的代码所做的只是根据键盘输入使字符向左和向右移动。有人能帮我吗 以下是我目前的代码: public class Dodgeball extends MovieClip { public var character:Character; public var rightDown:Boolean = false; p
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();
}
}
}我要做的是创建一个角色跳跃的运动tween。然后在该帧上调用gotoAndPlay,在tween的最后一帧上放置一个停止,或在“静止”帧上放置一个gotoAndStop,或任何表示中性位置的帧
if (event.keyCode == Keyboard.SHIFT)
{
character.gotoAndPlay("simpleJump");
jumpDown = false;
}
这将为您提供对外观和感觉的最佳动画控制。您也可以通过编程方式进行此操作,但就我个人而言,我建议您不要这样做。设置此操作将花费较少的时间,并且您可以稍后调整和优化跳转动画。您可以根据目标附近的对象等制作多种类型的跳转动画
我也会改变这些东西:
if(character.currentLabel != "walkingRight")
通过定义一个新函数,在该函数中,您拥有执行某些操作的时间和地点的所有规则,因此在控制逻辑中,您只需调用
if(characterCan(character,"walkright")) ...
其中characterCan(字符串)是一种检查这是否可行的方法。例如,如果你在跳跃和射击,你显然不能正确行走,因此最后,你必须开始向那些if语句中添加逻辑片段,它将变得杂乱无章。你可以尝试的一种方法是:像你的
速度变量,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;
}
}
}
编辑:Jason的方法很好,但我不确定如果你计划进行某种碰撞检测,它是否有用。一个非常简单的方法是既有垂直速度又有水平速度。
当用户按下“向上”或“跳跃”时,将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;
}
}
}
如果需要,请尝试if(event.keyCode==event.RIGHT)