我正在制作一个正在运行的游戏,其中英雄会跑,面对障碍并通过跳跃和滑动来阻挡障碍物。
现在英雄将在用户按下D时运行并且它会一直运行直到一个固定点,但问题是一旦英雄开始运行另一个按钮W = jump
并且S = slide
无效。
我希望这个2按钮在英雄运行时起作用。
这是我的代码
import flash.display.Stage;
import flash.events.KeyboardEvent;
import flash.ui.Keyboard;
import flash.display.MovieClip;
import flash.events.Event;
kim.gotoAndStop("hero Stand");
var dPressed:Boolean = false;
var aPressed:Boolean = false;
var jumping:Boolean = false;
var sPressed:Boolean = false;
stage.addEventListener(KeyboardEvent.KEY_DOWN , keyDownHandaler);
stage.addEventListener(KeyboardEvent.KEY_UP , KeyUpHandaler);
stage.addEventListener(Event.ENTER_FRAME , gameLoop);
function keyDownHandaler(Devent:KeyboardEvent):void
{
if (Devent.keyCode == Keyboard.D )
{
dPressed = true;
}
else if (Devent.keyCode == Keyboard.S && !jumping && !sPressed)
{
sPressed = true;
}
else if (Devent.keyCode == Keyboard.W && !jumping && !sPressed)
{
jumping = true;
}
function KeyUpHandaler (Uevent:KeyboardEvent):void
{
if (Uevent.keyCode == Keyboard.D)
{
//dPressed = false; (i commented this so that hero don't stop running)
//hero.gotoAndStop("hero Stand");
}
else if(Uevent.keyCode == Keyboard.W)
{
jumping = false;
hero.gotoAndStop("heroStand");
}
else if(Uevent.keyCode == Keyboard.S)
{
sPressed = false;
hero.gotoAndStop("hero Stand");
}
}
function gameLoop(Levent:Event):void
{
if (dPressed)
{
hero.x += 10;
hero.gotoAndStop("hero Run");
}
else if(jumping)
{
hero.y -= 15;
hero.x += 10;
hero.gotoAndStop("hero Jump");
}
else if(sPressed) {
hero.x += 10;
hero.gotoAndStop("hero Slide");
}
}
答案 0 :(得分:0)
因为您使用的是else if
语句。相反,只需使用单独的if
语句。 AS3将仅根据需要读取else if
逻辑块以便找到真实条件,此时它会执行该位代码然后退出到else if
的末尾声明,跳过它之后的所有内容。如果你想要测试所有条件(他是否正在运行?他是否正在跳?他是否正在滑动?)无论其他按键的状态如何,那么只需使用{ {1}}语句。仅当您希望仅在先前条件为假时保留要运行的代码时才使用if
。
在你的情况下我想你只希望玩家能够在他跑步时滑动但不跳跃,对吗?所以这可能是这样的:
else if
您必须同样更改其他逻辑语句。
我不会在键盘事件处理程序部分使用任何If (dPressed) {
hero.x += 10;
hero.goToAndPlay("hero run");
}
If (jumping) { // this code will run regardless of if dPressed is true
hero.y -= 15;
}
else if (sPressed) { // this code will only be read if jumping is not true (you can't jump and slide at the same time)
hero.goToAndStop("hero slide");
}
语句。我认为AS3总是更好地检查被按键的状态...处理else
函数中的逻辑。