无限循环(动作脚本3)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了无限循环(动作脚本3)相关的知识,希望对你有一定的参考价值。
我是Flash ActionScript的新手,因为我的编程类使用它。我通常使用C ++(或它的一个变种)并涉及Java,所以Actionscript对我来说大部分都很熟悉。
但是,每当我使用while循环时,AS3在15秒后崩溃。我需要使用while循环,否则整个代码的范围将结束,游戏将停止运行我认为的代码。在我的普通编程语言中,while(true)将挂起游戏,除非我有Waitframe();在代码中的某个地方让它进展一个框架。但我搜索,并且Actionscript没有这样的东西,我发现的只是“无限循环是魔鬼aaaaaaaa”。
Soooo,我怎么能用这个做游戏呢?我希望我的游戏持续超过15秒,但AS3“有用”地终止脚本,如果它“挂起”,尽管我做的东西(虽然那些东西根本没有显示,大概是因为脚本挂起)。我是否错过了一个允许延长while循环使用的等待函数,或者我做错了吗?
Flash在“帧”系统上工作,基本上是按帧速率计时。将所有游戏代码放入新函数中,并使用事件侦听器调用该函数。
stage.addEventListener(Event.ENTER_FRAME, function(e:Event):void {
// Your code here
// Called every frame
});
与C / C ++环境不同,Flash Player(最初对脚本的影响要小得多,而且更多的是动画)不是实时环境,而是分阶段工作,通常称为帧(基本的Flash Player周期包括推进播放到任何当前时间轴/ MovieClip的下一帧的播放头。
因此,每个阶段分两步:
- 脚本执行。
- 渲染舞台。
因此,如果您想控制某些内容以便用户可以看到平滑动画,则需要每帧都运行一个脚本。可以说,你有一个盒子想要顺利移动到右边。
var Box:DisplayObject;
addEventListener(Event.ENTER_FRAME, onFrame);
function onFrame(e:Event):void
{
Box.x++;
}
通常,Flash Player会尽可能使FPS保持尽可能接近设置。但是,如果您的脚本(不仅是ENTER_FRAME的处理程序,还有键盘事件,鼠标/触摸输入,网络事件等)运行时间过长和/或渲染太重,Flash Player也不会能够保持FPS正确。
这也是脚本执行阶段的限制,默认设置为15秒。 Flash Player建议中止脚本运行太长时间,因为可能出现故障。
然后,您的问题的解决方案取决于您尝试在那里做什么,但无论如何您必须完成任务并让Flash Player继续以使您的应用程序正常运行。
另一点是,你不想要一个真正的无限循环。通常,您需要一个条件情况,以便用户可以退出。在C中,你会做:
extern quit;
void init()
{
quit = 0;
}
//inside main()
while(!quit)
{
//game functions
//advance_frame();
}
如果玩家试图退出,死亡或赢得游戏,你会打破这个循环,每个都有一个唯一的值,例如quit == 1表示正常退出,== 2表示死亡,= = 3表示winnig;然后是每个人的不同循环(在主内部)。
无限循环通常是罕见的,应该非常谨慎地使用。通常你会想要一个导致它们退出的语句,无论如何。
即使在C中,您也需要手动前进。只有基于游戏的脚本语言倾向于以某种方式“自动化”,而Macromedia Flash从未被设计为旨在为游戏引擎提供动力。
Flash中的游戏设计现在真正在大学教授了吗?!如果是这样,那太可怕了。
以上是关于无限循环(动作脚本3)的主要内容,如果未能解决你的问题,请参考以下文章