如何让角色跳跃?
这是我的拳头时间,曾经需要使用这个为我的游戏之一。我想要角色跳跃。我一直试图得到这个结果大约一个小时,但没有运气=(我正在使用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();
}
}
}
您可以尝试的一种方法是: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;
}
}
}
尝试'if(event.keyCode == event.RIGHT)'如果你想要 – mgraph 2012-04-28 21:09:21