如何在 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 中不设置明确结尾的情况下循环代码的主要内容,如果未能解决你的问题,请参考以下文章