如何在 AS3 中不设置明确结尾的情况下循环代码

Posted

技术标签:

【中文标题】如何在 AS3 中不设置明确结尾的情况下循环代码【英文标题】:How to loop code without setting a definite ending in AS3 【发布时间】:2016-08-13 15:10:46 【问题描述】:

我有一个框架,里面有动作。代码不在函数中,因此它循环。现在我添加了一个新场景,它会立即跳转到新场景。有没有我可以使用的循环,它只在 player1 和 thisBall 发生碰撞之前执行?

【问题讨论】:

不要使用场景!它们只会造成麻烦。 那你有什么建议? 【参考方案1】:

正如 null 评论的那样,不要使用场景(它们真的是一袋子伤害)。尽管如此,您似乎需要一个游戏循环。这很常见......

addEventListener(Event.ENTER_FRAME, onEnter);
function onEnter(e:Event):void 
    //do stuff

您需要思考的方式就像看视频一样。您运行的每个“帧”都会运行一些逻辑,例如ball.x += 1;,它会在每次屏幕更新时将球移动到屏幕的右侧(也就是一个新的“帧”)。如果您想在满足条件时执行其他操作,可以将其添加到循环逻辑中。

function onEnter(e:Event):void 
    ball.x += 1;

    if (ball.x == player.x) 
        trace("You've hit the player with the ball.")
    

这是非常初级的,如果您使用的是类或更大的框架,我不会这样处理它,但现在应该可以帮助您。

【讨论】:

我认为 OP 问题的核心是如何停止播放头直到检测到碰撞,而不是如何检测碰撞。 我认为问题是针对如何测试作为时间因素循环的场景的条件。老实说,x == x 是一个糟糕的碰撞测试,但它确实起到了说明条件请求的作用。【参考方案2】:

如果在您的根时间轴中,您有两个 MovieClip,一个在第 1 帧,一个在第 2 帧,您可以在主文档类中拥有它:

公共类 Main 扩展 MovieClip 公共函数 Main() 极好的(); 停止(); addEventListener('collision', onCollision); 私有函数 onCollision(e:Event) 下一帧();

然后,在第 1 帧的 MC 中的任何位置(希望在附加的类中),您都可以拥有以下代码:

dispatchEvent(new Event('collision', true));

您的主文档类将“听到”该事件并转到下一帧,该帧将包含您接下来想看到的任何内容。

【讨论】:

如果用户甚至知道文档类是什么以及如何使用它,我会感到惊讶。 这并不难找到,如果他/她还不知道,我不会假设 OP 无法弄清楚这一点。任何希望以 Flash 为生的人都应该意识到这一点。

以上是关于如何在 AS3 中不设置明确结尾的情况下循环代码的主要内容,如果未能解决你的问题,请参考以下文章

在java中不使用循环读取完整文件

for循环在matlab中不起作用

python语言如何结尾?

如何在有循环和多个级联路径的情况下配置级联删除

在没有返回语句的情况下到达函数结尾

(swf as3 XML URLLoader) 在 flex 中不起作用