在特定框架上射击子弹。

时间:2014-01-24 14:43:15

标签: actionscript-3 frame

我找不到像这样的话题,这就是我发布这个问题的原因。我有一个侧滚动游戏,角色设置在框架标签的位置 - 动画状态可以站立,跳跃,跑步,跪下和射击。她也是用单独的类文件发射子弹的。问题是,现在她正在所有动画状态中发射子弹。问题是我如何使这个角色仅在框架标签火上发射子弹。帧标签起火由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);

谢谢。我希望我的问题很明确。

1 个答案:

答案 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; 
    }
}