
Fusion 内置了两种强大的程序。它们被称为快速循环和ForEach循环。这两者既有区别又有相似之处。本指南将全面介绍如何学习使用快速循环和ForEach循环。之后,我们还将对两者进行比较,并探讨在特定场景下哪种循环更适用。快速循环和ForEach循环乍一看可能令人望而生畏,但它们或许是Fusion内部最强大的两个程序。 快速循环简介 快速循环在Multimedia Fusion 2早期就已引入。如今,它们已成为Fusion 2.5的重要组成部分,并且仍然是你可以在内部利用的最强大程序之一。我希望撰写本指南时能考虑到,你可能不知道什么是快速循环,也不清楚如何使用它们。因此,我希望能帮助你了解在Clickteam Fusion 2.5中如何利用快速循环来发挥优势。 想象一下,你有一个活动对象:

现在,你想要在事件编辑器中创建自定义移动。换句话说,你不想使用Fusion内置的移动方式,因为你希望完全控制该对象的移动。这里可以使用一些快速循环。快速循环本质上是执行一个动作但会快速重复,速度非常快。实际上,它快到肉眼基本无法看清快速循环中发生了什么,除非它在重复。快速循环的设计初衷就是让动作在绘制下一帧之前执行。 在下一部分,我们将开发像素级精确的自定义移动。这意味着对象将逐像素移动。通常情况下,将对象向右移动10像素所花的时间会比通过快速循环移动更长。如果你不确定原因,最好深入学习本指南,希望你能从中理解原因,更重要的是学会方法。 使用快速循环 好的,让我们打开Clickteam Fusion 2.5并插入一个活动对象。点击插入>新建对象。从列表中选择活动对象,然后点击确定。

将其拖放到游戏区域的中心。现在,我们不需要对属性或帧本身进行任何其他操作,因为我们将在事件编辑器中编写自定义移动代码(使用快速循环)。 接下来,点击事件编辑器图标以进入事件编辑器。

进入事件编辑器后,我们需要开始创建一些事件。首先创建一个新事件,然后新建一个条件,找到鼠标和键盘对象,右键点击并选择【键盘】>【按键按住时重复】。

当提示对话框出现时,按下键盘上的【左箭头键】。此时已插入一个新事件。只要左箭头键被按下,此条件就会一直满足。现在,在该事件行上,将鼠标悬停在第一个字段“Special Conditions”上。

右键点击并选择【快速循环】>【开始循环】

在接下来的表达式对话框中,输入“left”并点击确定。然后在第二个表达式对话框(会询问循环次数)中输入5并点击确定。

如果你将鼠标悬停在刚才操作的内容上,它应该会显示成上面图片的样子。 现在,这意味着当我们一直按住左箭头键时,它会以恒定速率运行那个名为【left】的快速循环5次。但我们还没有告诉Fusion在每次循环时该做什么。让我们创建第二个事件。插入一个新条件,在对话框中,右键点击第一个图标【特殊条件】并选择【循环时】。

完成此操作后,Fusion 会要求你输入循环名称。输入【left】。

完成此操作后,点击确定。现在我们已创建了在【left】快速循环运行时执行的事件,接下来为该循环执行时添加一个动作。我们希望对象在屏幕上移动,每次循环向左移动1像素。因此,在该事件行上,将鼠标悬停在对象上,右键点击并选择【位置】>【设置X坐标...】

要将对象向左移动一个像素,我们需要先获取其当前X坐标,然后从中减去1。因此,在表达式编辑器中,将鼠标悬停在活动对象上,右键点击该对象,选择【位置】>【X坐标】。

它应该会出现在表达式编辑器中。现在输入 –1,就像这样……

完成此操作后,点击确定。 现在,我们可以立即进行测试。按下键盘上的F8键运行应用程序。按左箭头键,你会看到对象向左移动。 在继续之前,让我们仔细了解一下。还记得我们告诉Fusion,每次按住左箭头键时,执行左方向快速循环5次吗?这将在绘制下一帧之前,每次执行时使对象向左移动5像素。如果你想让对象移动得更快或更慢,只需相应地增加或减少快速循环的次数。例如,要使其变慢,只需输入1次快速循环计数;要使其移动更快,输入10次快速循环计数。 要实现所有方向的移动,只需对向上、向下和向右方向重复上述步骤。看看仅用8个事件创建四向移动是多么简单。 希望这能为你提供一个轻松愉快的快速循环入门介绍。实际上,有无数种方式可以展示快速循环如何真正加快开发速度并更轻松地处理事务。我在这里的最大目标,就是以一种温和的方式向你介绍快速循环。希望这个简短的移动指南足以让你开始了解快速循环的世界。 下一部分我们将学习一些ForEach循环,但不用担心,在本指南的后续内容中,我们还会回到快速循环并提供更多示例。 ForEach循环简介 ForEach与快速循环程序类似,是另一个功能强大的对象,在很多方面都很相似,但在其他方面更有用。简单来说,ForEach循环会遍历多个对象(相同类型的)或一个“对象组”,并对符合条件的对象执行必要的操作。 如果使用快速循环来遍历某个对象的所有实例,你需要手动分配ID,并将ID与循环索引进行比较,但使用ForEach循环时,这一切都是自动完成的。 举个例子,假设你有一类敌人。屏幕上有20个这种敌人对象在四处移动,而你只想筛选出生命值为100的敌人,这时你可以轻松使用ForEach循环一次性遍历所有敌人,从而筛选出符合条件的对象。我们将详细介绍ForEach,并在本指南的末尾尝试提供一些可下载的MFA示例供你参考。 使用ForEach循环 在本节中,我们将设置一个基本的ForEach循环,逐步向你介绍它们是什么以及它们有多有用。 打开Clickteam Fusion 2.5,让我们开始。 点击插入菜单,然后点击新建对象。插入一个新的活动对象...

插入后,将其放置在帧的左上角,右键点击并选择【复制】。在弹出的框中选择1行、20列……

点击确定。你的游戏区域现在应该是这个样子:

现在我们有1个对象和20个实例分布在屏幕顶部。接下来你需要双击其中一个实例,这样我们就能开始编辑该对象的动画了。 当图像编辑器打开后,将帧复制粘贴3次,操作如下……

现在,我们希望让每一帧动画都呈现不同的颜色。所以,请选择【油漆桶工具】,将容差设置为100,然后为每一帧涂上你选择的不同颜色。我们是这样操作的:

当你确定要保留4种颜色后,点击这些帧上方的方向选项标签。在该标签内,需要将动画速度降至0。这样做是为了让帧永不播放动画。

点击确定。首先,按键盘上的F8键运行应用程序。你会看到屏幕顶部有20个静态对象,它们不会移动,也不会动画。关闭这个窗口,让我们进入事件编辑器来创造一些奇迹。

插入新条件,右键点击故事板对象并选择【帧开始】

现在,在帧开始时,我们将为20个对象中的每一个赋予随机帧(颜色)... 在第一条事件行上,将鼠标悬停在活动对象图标上,右键单击并选择【动画】>【更改】>【动画帧】...

当表达式对话框出现时,请输入【Random(4)】

点击确定。 这将确保在帧的最开始,每个对象都会从我们插入的帧中显示一个随机帧(颜色)。 按F8查看效果。应用运行时,你可以随时按F2重启应用,会看到颜色重新随机排列(这是因为每次应用重启时,都会重新选择随机的动画帧)。 现在,我们需要插入一个新事件。点击【新建条件】,当对话框出现时,右键点击【特殊条件】图标(第一个)并选择【总是】。

在这条事件行上,再次将鼠标悬停在活动对象上,右键点击并选择【计数】>【对于每个对象】
当表达式提示出现时,输入【move】。

点击确定。 现在,这意味着我们要始终(每秒60次)对这些对象中的每一个运行循环。但现在我们需要告诉Fusion在循环对象时该做什么。在这个示例中,我们希望移动所有显示动画帧0(在我们的示例中是灰色)的对象,使其在游戏区域中向下移动。 让我们插入一个新条件,右键点击并选择循环>对每个对象。

表达式对话框会提示你输入循环的名称,我们将其命名为“move”,所以输入“move”并点击确定。为ForEach循环命名的原因是,你可以同时运行多个循环,因此需要知道要操作哪个循环。 现在,你需要将鼠标悬停在事件3(我们刚刚创建的事件)上,再次右键点击并选择添加新条件。

当对话框再次出现时,右键点击活动对象,然后选择【动画】>【将“活动对象”的当前帧与数值比较】。

当对话框提示出现时,输入0并点击确定。这个事件的意思是,当ForEach循环遍历这些对象中的一个,并且选中的对象正在显示动画帧0时,我们需要执行某些操作。因此,将鼠标悬停在该事件行的活动对象上,右键点击并选择【位置】>【设置Y坐标】。

当表达式对话框出现时,你需要右键点击活动对象(我们需要先获取它当前的Y坐标),操作如下...

完成此操作后,表达式编辑器应显示:

现在,在那个表达式的末尾加上+1,所以你的最终表达式应该是这样的:

点击确定。 那么,让我们回顾一下我们在这里所做的操作。在帧开始时,我们给20个对象中的每一个分配1-4之间(索引为0-3)的随机动画帧(颜色)。 然后,我们告诉程序要始终循环遍历所有20个对象,当它遍历所有这些对象时,若遇到1个或多个显示动画帧0的对象,就将其向下移动(Y轴位置)。 按F8键查看实际效果。无论你最初的颜色是什么(在我们的示例中是灰色),那应该是唯一会移动的对象(颜色)。

你还会注意到,所有移动的对象(无论数量多少)都在同时移动。这是因为ForEach循环遍历对象的速度非常快。 这基本上就为你完成了对内置ForEach循环的简单、轻松介绍。如果你使用的是软件的早期版本,可以通过ForEach对象来实现这一功能。从Fusion 2.5开始,这一功能已内置于事件编辑器中(如上所示)。 我强烈建议你继续本指南,将所有20个对象放置在游戏区域的水平中心位置,并设置一个新的ForEach循环,使所有显示第二种颜色(动画帧1)的对象向上移动。如果你能做到这一点,就已经成功学会了如何以简单的方式使用ForEach。(提示:要使对象向上移动,请使用【Y坐标 - 1】)。 (如果想测试创建一个使对象向上移动的循环,请记住使用另一个循环名称,例如“moveup”或“move1”,因为这是一个独立的循环)。 快速循环与ForEach循环的比较 快速循环是在Fusion系列早期引入的,它允许更快地开发几乎即时循环大量对象的功能,但你必须手动为每个对象分配一个ID,并将该对象与快速循环的LoopIndex进行比较。而使用ForEach循环则无需执行此操作,如下所示……

我已将上述MFA上传至Clickteam论坛。 注意:如果你想知道为什么我选择“始终”循环ID,而不是在帧中只创建一组ID,这是为了让你习惯这种方法,以防在第一次ID分配后创建任何新对象。 以下是社区中其他基于Fastloop和ForEach的示例链接(感谢所有提交者):(感谢DavidN) 不要忘记在论坛中搜索更多关于快速循环和ForEach循环的示例。 一些快速循环和ForEach循环的建议 希望通过本指南,你已经能够区分快速循环和ForEach循环之间的细微差别。 本页上方有一些下载链接,提供了其他示例文件、教程和指南,帮助你进一步发挥快速循环和ForEach循环的功能。 随着你对这两种循环的了解不断加深,你将能更好地设想如何在游戏或应用中运用它们。反复试验是个不错的方法。在将某些技术应用到游戏中之前,先尝试制作一些原型,看看它们的效果如何。这里有一点小小的警告:快速循环和ForEach循环确实会暂停运行时。 通常情况下,Fusion会按照事件列表中从上到下的顺序读取事件。但是,如果调用了即时事件(以绿色条件标识),那么它会立即执行该条件,而不是在遍历完所有条件列表后才执行。 如果启动了快速循环或ForEach循环,它将成为整个事件列表中的第一优先级事件,直到循环停止。这并不意味着其他事件不会执行或停止运行,它们仍然会执行,但循环会优先于所有其他事件。 也就是说,这在移动和Web平台上可能会显得有些占用资源。Clickteam 提供的移动和网络运行时是目前最快、接近原生的运行时,但 Clickteam 在运行时性能方面仍有一定的局限性。 随着你对快速循环和ForEach循环的深入学习,最终你将学会的不仅仅是偶尔使用它们。你最终会学会高效地使用它们,这意味着诸如仅在真正需要时运行循环,以及通过新条件找到进一步缩小循环范围的新方法等。 快速循环和ForEach循环无疑是你在Fusion中会学到的最强大且最高效的两个例程。继续学习它们,不要害怕用它们进行原型制作(测试),通过大量的尝试和错误,你将能够使用Fusion 2.5中的循环实现一些很棒的功能,无论是用于游戏还是应用程序。
2026-03-26 10:00:38 发布在
Clickteam Fusion 2.5
说点好听的...
收藏
0
0
