Actionscript 3 在特定的框架上发射子弹。

Actionscript 3 在特定的框架上发射子弹。,actionscript-3,frame,Actionscript 3,Frame,我找不到像这样的主题,这就是为什么我发布这个问题。我有一个侧滚游戏,角色设置在带有帧标签的位置上——动画状态为站立、跳跃、奔跑、跪下和开火。她还被要求使用单独的类文件发射子弹。问题是,现在她在所有动画状态下都在发射子弹。问题是如何让这个角色只在框架标签fire上发射子弹。帧标签fire由两帧组成,我希望子弹的发射发生在第二帧上。这意味着键盘空间在进入这个画面之前会被按下一两秒钟,然后它就会启动(就像在现实生活中一样)。 我尝试以某种方式将动画状态连接到项目符号,并尝试以某种方式将条件放入这些代码

我找不到像这样的主题,这就是为什么我发布这个问题。我有一个侧滚游戏,角色设置在带有帧标签的位置上——动画状态为站立、跳跃、奔跑、跪下和开火。她还被要求使用单独的类文件发射子弹。问题是,现在她在所有动画状态下都在发射子弹。问题是如何让这个角色只在框架标签fire上发射子弹。帧标签fire由两帧组成,我希望子弹的发射发生在第二帧上。这意味着键盘空间在进入这个画面之前会被按下一两秒钟,然后它就会启动(就像在现实生活中一样)。 我尝试以某种方式将动画状态连接到项目符号,并尝试以某种方式将条件放入这些代码行中:

if(e.keyCode == Keyboard.SPACE){
if (Animation state "Fire (2)")
fireBullet();
}
但它不起作用,它不知道我在说什么。bullet的类文件是独立的,我认为与问题无关。 时间线代码的其余部分如下所示:

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);
playerAnimation.addFrameScript( insertFrameNumber, fireBullet );
var bulletList:Array=newarray();
if(e.keyCode==Keyboard.SPACE){
火弹();
}
}
函数fireball():void
{
变量playerDirection:字符串;
如果(player.scaleX<0){
playerDirection=“左”;
}else if(player.scaleX>0){
playerDirection=“右”;
}
变量bullet:bullet=newbullet(player.x-scrollX,player.y-scrollY,
播放方向(X速度);
背向。addChild(子弹);

谢谢。我希望我的问题是清楚的。

有一个AS3的神秘函数
addFrameScript
,在这种情况下很有用。它看起来像这样:

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);
playerAnimation.addFrameScript( insertFrameNumber, fireBullet );
addFrameScript
MovieClip
到达某一帧时运行作为参数传递的方法

我相信您希望如何在当前代码中使用此选项:

player.addFrameScript( 5, fireBullet );
然后在
键向上
处理程序中:

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

非常感谢您的回答。键代码是另一个名为“键向上处理程序”的函数的一部分,因此我将其取出并用我的角色实例名称“player”?函数keyUpHandler(e:KeyboardEvent):void{if(e.keyCode==Keyboard.SPACE){spacePressed=false;}if(e.keyCode==Keyboard.LEFT){leftPressed=false;}else if(e.keyCode==Keyboard.RIGHT){rightspressed=false;}else if(e.keyCode==Keyboard.UP){upPressed=false;}else if(e.keyCode==Keyboard.DOWN){downspressed=false;}if(e.keyCode==Keyboard.SPACE){fireball();}我是否为onKeyDown创建了一个变量?很抱歉,有这么多问题。我可以将文件上传到任何地方吗?因此,
KEY\u DOWN
事件的好处是,当按键被按下时,它将继续触发。我想这是您想要的效果。因此答案是肯定的,将
KeyboardEvent.KEY\u DOWN,onKeyDown
并用我提供的示例实现它只会发射一次,我不认为这是你想要的。同样是的,取出
播放器动画
并用你的
播放器
实例替换它,如果这是正确的资产。谢谢你,这就是我想要的效果,我刚刚做到了。在使用上键处理程序功能之前,我有相同的下键功能,我试着把密码写在上面。