这是我第一次需要在我的一款游戏中使用它。我想让角色跳跃。我一直试图得到这个结果大约一个小时,但没有运气=(我使用AS3,并闪存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 :(得分:1)
我要做的是创建角色跳跃的补间动画。然后在该帧上调用gotoAndPlay,并在补间的最后一帧上放置一个停止点,或者在“静止”帧上放置一个gotoAndStop,或者任何帧代表一个中立位置。
if (event.keyCode == Keyboard.SHIFT)
{
character.gotoAndPlay("simpleJump");
jumpDown = false;
}
这将为您提供对外观的最佳动画控制。你也可以通过编程方式进行,但就个人而言,我建议不要这样做。设置它需要的时间更少,您可以稍后调整和优化跳转动画。您可以根据目标附近的对象等制作几种类型的跳转动画。
我也会改变这个东西:
if(character.currentLabel != "walkingRight")
通过定义一个新功能,您可以在其中拥有可以执行某些操作的时间和地点的所有规则,以便在您的控制逻辑中,您只需调用
if(characterCan(character,"walkright")) ...
其中characterCan(String)是一种检查是否可行的方法。例如,如果你是跳跃和射击,你显然无法正确行走,所以最后,你必须开始在那些if语句中添加逻辑部分,这将变得混乱。
答案 1 :(得分: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;
}
}
}
编辑:Jason的方法很好,但是我不确定如果你计划进行某种碰撞检测它是否有用。
答案 2 :(得分:1)
一种非常简单的方法是具有垂直速度和水平速度。 当用户按下“UP”或“JUMP”时,将y speed设置为负值并在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;
}
}
}