无限循环(动作脚本3)

问题描述 投票:-1回答:3

我是Flash ActionScript的新手,因为我的编程类使用它。我通常使用C ++(或它的一个变种)并涉及Java,所以Actionscript对我来说大部分都很熟悉。

但是,每当我使用while循环时,AS3在15秒后崩溃。我需要使用while循环,否则整个代码的范围将结束,游戏将停止运行我认为的代码。在我的普通编程语言中,while(true)将挂起游戏,除非我有Waitframe();在代码中的某个地方让它进展一个框架。但我搜索,并且Actionscript没有这样的东西,我发现的只是“无限循环是魔鬼aaaaaaaa”。

Soooo,我怎么能用这个做游戏呢?我希望我的游戏持续超过15秒,但AS3“有用”地终止脚本,如果它“挂起”,尽管我做的东西(虽然那些东西根本没有显示,大概是因为脚本挂起)。我是否错过了一个允许延长while循环使用的等待函数,或者我做错了吗?

actionscript-3 flash actionscript
3个回答
1
投票

Flash在“帧”系统上工作,基本上是按帧速率计时。将所有游戏代码放入新函数中,并使用事件侦听器调用该函数。

stage.addEventListener(Event.ENTER_FRAME, function(e:Event):void {
  // Your code here
  // Called every frame
});

2
投票

与C / C ++环境不同,Flash Player(最初对脚本的影响要小得多,而且更多的是动画)不是实时环境,而是分阶段工作,通常称为帧(基本的Flash Player周期包括推进播放到任何当前时间轴/ MovieClip的下一帧的播放头。

因此,每个阶段分两步:

  1. 脚本执行。
  2. 渲染舞台。

因此,如果您想控制某些内容以便用户可以看到平滑动画,则需要每帧都运行一个脚本。可以说,你有一个盒子想要顺利移动到右边。

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继续以使您的应用程序正常运行。


1
投票

另一点是,你不想要一个真正的无限循环。通常,您需要一个条件情况,以便用户可以退出。在C中,你会做:

extern quit;

void init()
{
    quit = 0;
}

//inside main()
while(!quit)
{
    //game functions
    //advance_frame();
}

如果玩家试图退出,死亡或赢得游戏,你会打破这个循环,每个都有一个唯一的值,例如quit == 1表示正常退出,== 2表示死亡,= = 3表示winnig;然后是每个人的不同循环(在主内部)。

无限循环通常是罕见的,应该非常谨慎地使用。通常你会想要一个导致它们退出的语句,无论如何。

即使在C中,您也需要手动前进。只有基于游戏的脚本语言倾向于以某种方式“自动化”,而Macromedia Flash从未被设计为旨在为游戏引擎提供动力。

Flash中的游戏设计现在真正在大学教授了吗?!如果是这样,那太可怕了。

© www.soinside.com 2019 - 2024. All rights reserved.