我找不到像这样的话题,这就是我发布这个问题的原因。我有一个侧滚动游戏,角色设置在框架标签的位置 - 动画状态可以站立,跳跃,跑步,跪下和射击。她也是用单独的类文件发射子弹的。问题是,现在她正在所有动画状态中发射子弹。问题是我如何使这个角色仅在框架标签火上发射子弹。帧标签起火由2帧组成,我希望在第二帧上发射子弹。这意味着键盘空间在进入此帧之前将被按下一两秒,然后它将被激活(就像在现实生活中一样)。 我试图以某种方式将动画状态连接到子弹,并尝试以某种方式将条件放在这些代码行中:
if(e.keyCode == Keyboard.SPACE){
if (Animation state "Fire (2)")
fireBullet();
}
但它不起作用,它不知道我在说什么。子弹的类文件是独立的,我认为这与问题无关。 其余的时间轴代码是这样的:
var bulletList:Array = new Array();
if(e.keyCode == Keyboard.SPACE){
fireBullet();
}
}
function fireBullet():void
{
var playerDirection:String;
if(player.scaleX < 0){
playerDirection = "left";
} else if(player.scaleX > 0){
playerDirection = "right";
}
var bullet:Bullet = new Bullet(player.x - scrollX, player.y - scrollY,
playerDirection xSpeed);
back.addChild(bullet);
谢谢。我希望我的问题很明确。
答案 0 :(得分:0)
有addFrameScript
,AS3的神秘功能在这种情况下很有用。这看起来像这样:
playerAnimation.addFrameScript( insertFrameNumber, fireBullet );
当addFrameScript
到达某个帧时, MovieClip
会运行作为参数传递的方法。
我相信您希望在当前代码中使用它:
player.addFrameScript( 5, fireBullet );
然后在你的KEY_UP
处理程序中:
function keyUpHandler(e:KeyboardEvent):void{
if(e.keyCode == Keyboard.SPACE){
spacePressed = false;
player.gotoAndPlay("fire");
}
if(e.keyCode == Keyboard.LEFT){
leftPressed = false;
}
else if(e.keyCode == Keyboard.RIGHT){
rightPressed = false;
}
else if(e.keyCode == Keyboard.UP){
upPressed = false;
}
else if(e.keyCode == Keyboard.DOWN){
downPressed = false;
}
}