欢迎来到 Mario Forever 百科!编辑前请创建一个账号,或使用现有的账号登录;并认真阅读用户须知

自2020年7月14日起,未验证邮箱的用户将无法编辑页面。请前往参数设置验证邮箱,谢谢您的配合。

Rainbow Engine/使用教程

来自Mario Forever 百科
跳转到导航 跳转到搜索

教程说明

教程简介

本教程主要面向想要手工制作MF作品但是刚接触MMF编辑器不知道如何操作的新手。因此为新手向教程,前期内容可能会相对详细一些。

使用本教程前的须知

  • 本教程虽然为“零基础”教程,但是假定使用教程的人会进行电脑操作并且能够较为流畅的使用基础软件、知道一般的操作方法。因此,关于一些基础操作类的内容本教程不再提及。
  • 本教程假定使用者已经安装了教程所需的主要软件(见0.1.3节),并且可以正常的打开软件。如果在安装时出现问题,欢迎在百度永远的马里奥吧或者相关QQ群提问。

本教程中演示中使用的主要软件版本及备注

  • Clickteam Fusion Developer r284.1[1]
  • Rainbow Engine v0.10.4.1[2]
  1. 软件语言为英文,不安装任何汉化补丁。不过本教程也会给出一套中文翻译,但是和汉化包以及其他版本的翻译不一定吻合。请根据自己的MMF确定这些名词的含义
  2. 引擎为中文、带开始页的版本。除非特殊注明,均不带任何补丁和扩展。

教程目录

初识MMF

想要自己制作作品,学会使用编辑器是必须的。因此,本章就来讲解编辑器及其使用方法。

MF作品的编辑器为Multimedia Fusion(后期版本也叫做Clickteam Fusion,简称MMF或后期版本CTF,一般无中文译名)。百度百科上的介绍如下:

Multimedia Fusion是一个功能强大的多媒体制作软件,使用者不需要撰写任何程序码,就可以建立复杂的多人游戏、互动式电脑训练力程序、屏幕保护程序、和网页程序等。Multimedia Fusion就像官方介绍一样,使用者“几乎”不需要撰写任何程序码,只需要一步一步的将游戏内容分解为“如果...就...”式的逻辑语言,以类似于填空的方式输入,就能够编写出各种风格迥异的游戏。对于有兴趣尝试制作游戏的人来说,Multimedia Fusion的傻瓜式逻辑编程可以很好的锻炼思维,深入地了解游戏运行方式,为尝试进一步制作更专业的游戏打下基础。

而MMF的最大特点是简便易懂,不需要编程基础就可以制作游戏和工具。虽然有一些限制,但是MMF本身可以实现的功能还是非常强大,几乎可以做出所有2D游戏。


除本教程外,你还可以通过这些途径获得MMF/CTF的使用方法。

界面与操作

在了解使用一个软件时,最先是其界面和操作。哪怕制作一个简单的作品,都需要编辑关卡内容,因此场景编辑器对于初学者是使用MMF时最核心、最主要的内容。因此我们将从场景编辑器开始介绍。

基础界面

MMF的场景编辑器框架主要分为4个部分,分别为①顶端工具栏、②侧端和底端工作栏、③物品库、④编辑界面.。本节只粗略讲解各个工具栏的大致功能,关于其具体按钮和操作方法请见1.1.2节。

图1-1 MMF的场景编辑器框架


顶端工具栏为MMF场景编辑器中提供基础功能按钮的地方,含有很多子工作栏。

顶端工具栏的子工具栏分别为①菜单工具栏(Menu Toolbar),②导航工具栏(Navigate Toolbar)、③标准工具栏(Main Toolbar或Standard Toolbar)、④运行工具栏(Run Toolbar)和⑤场景编辑器工具栏(Frame Editor Toolbar)。

菜单工具栏标准工具栏提供了软件的基本功能,此处不详细介绍。在MMF中,菜单工具栏可被移动,但是不可被关闭,因为这是不可或缺的。

导航工具栏提供了MMF中编辑的主要跳转功能。利用导航工具栏可以简便地在不同编辑器和子编辑器、不同场景间切换。

运行工具栏提供了工程的运行测试、运行调试等功能。

场景编辑器工具栏提供了一些进行场景编辑时的简易功能,以提高编辑效率。

值得注意的是,各个子工作栏的位置可以被拖动、也可以根据个人喜好与工作需要而分离或者移到界面其他位置而形成不同布局方式。本教程为了截图方便,将各工具栏单独拖在一行。事实上,这会降低窗口分配时的界面利用率并且压缩你的编辑界面,因此我们不推荐这么做。

图1-2 MMF的顶端工具栏


侧端和底端工作栏主要为一些辅助功能,例如对元件属性编辑、图层整体修改、素材提供等等。在1.1.3节中将会具体讲述这些内容。其中的子工具栏可以被移动、关闭。本教程以默认的布局方式为准。 顶端工具栏的子工具栏主要为工作区工具栏(Workspace Toolbar,Ctrl+W调用)、属性栏(Properties,Ctrl+D调用)、图层工具栏(Layers Toolbar,Ctrl+K调用)等。

工作区工具栏提供多工程的管理与切换,单个工程不同场景间的快速切换,及单个场景中元件的快速管理等。善用工作区工具栏可以提高效率。

属性栏支持修改元件的属性,包括基本参数、变量、事件等。我们将在1.2.3节进行介绍。

图层工具栏支持整个图层的管理、不同图层编辑的切换、多图层顺序设置等功能。这个我们将在后文进行介绍。


物品库包含了场景中所用的所有元素。用于元件的检索、使用,为编辑时不可或缺的模块。因此,物品库无法被移动、关闭。

编辑界面用于摆放元件的位置等。

工具栏按钮简介

顶端工具栏中的导航工具栏、运行工具栏和场景编辑器工具栏提供了各类功能。接下来对这些按钮进行介绍。

导航工具栏按钮上提供了软件基本的复制、撤销等功能,除此以外,MMF还有以下几个新的按钮:

图1-3 导航工具栏的按钮

①后退(Back,Backspace调用)可以让你回到上一个编辑的界面。

②前进(Forward,Alt+→调用)可以让你回到下一个编辑的界面。

③故事板编辑器(Storyboard Editor,Ctrl+D调用)用于打开故事版编辑器。

④场景编辑器(Frame Editor,Ctrl+M调用)用于打开场景编辑器。

⑤事件编辑器(Event Editor,Ctrl+E调用)用于打开事件编辑器,代码显棋盘状分布。

⑥事件表编辑器(Event List Editor,Ctrl+L调用)用于打开事件编辑器,代码显行状分布。

关于这四个编辑器后面会陆续介绍。

⑦媒体元素编辑器(Data Elements)用于管理作品中的媒体文件(主要为音乐)。

⑧场景跳转框为下拉框的形式,用于快速跳转到作品中不同的场景。

⑨上一场景(Previous Frame,Ctrl+←调用)用于跳转到作品中的上一场景。

⑩下一场景(Next Frame,Ctrl+→调用)用于跳转到作品中的下一场景。


图1-4 运行工具栏的按钮

运行工具栏按钮有以下几个: ①运行工程(Run Project,F9调用)可以在一个大型工程中运行第一个应用。由于MF作品制作中不需要引入和使用“工程”概念,这个按钮不会用到。有兴趣的可以自行研究。(提示:工程的创建在菜单栏的File->New Project中)

②运行程序(Run Application,F8调用)用于运行当前查看的应用程序。一般在调试整个作品的连贯性和全局事件时会选择运行整个程序。

③运行场景(Run Frame,F7调用)运行当前选中的单个场景,一般用于调试单个关卡/地图等界面。

④停止运行(Stop)在运行程序的时候强行停止运行。虽然大多数时候可以选择直接关闭程序,但是当遇到程序不带有关闭按钮或者程序卡顿甚至没有响应时,这个按钮会起到重要作用。

⑤建立并运行程序(Build and Run,Ctrl+F8调用)先打包程序后调试。关于打包等操作的解释请见1.4节。


图1-5 场景编辑器工具栏的按钮

场景编辑器工具栏只在场景编辑界面存在并生效,按钮有以下几个:

①缩放栏(Zoom)可以将编辑界面的显示大小放大/缩小,以查看全局或局部效果或是便于过大或过小物件的移动和修改。

②移动模式(Free Move)可以打开移动模式。在这个模式下,你无法对关卡中的物件做出任何修改或者移动,但是可以通过拖动屏幕以查看关卡其他地方。这有利于防止误操作。

③画笔模式(Paint Mode)可以打开画笔模式。在这个模式下,可以像画图软件中画画一样放置物件。这个模式在MF编辑时一般不常用,除非你想要像一些MW作品作者通过随意绘制地形而修改的方法达到一些效果。

④点阵设置(Grid Setup)设置关卡中的点阵。点阵可以方便物件对齐(例如让地面规整地排列)。通过这里可以设置点阵的原点和间隔。

⑤显示点阵(Show Grid)可以使场景中的点阵显示而起到对齐的效果。

⑥对齐到点阵(Snap to Grid)可以在放置物件时让物件自动和点阵对齐以起到方形排列的效果;在不显示点阵的情况下也可以生效。。一般地我们推荐在开启对齐到点阵的情况下编辑场景,当然在设置开始界面或者设置界面时,最好关闭点阵。关于点阵可以自己实践以感受一下。

⑦调整到场景中心(Center Frame)可以让画面对准场景中心。

场景工具栏中间没有介绍的按钮是编辑字符串物件(String Object)或者文本物件(Text)的时候使用的文字设置,使用方法类比Word。关于这类物件我们将在1.2.2节作详细介绍。

编辑器基础操作

前文提及,MMF是一种可视化的媒体制作软件,由此,使用MMF制作作品的核心,在于可视化窗口的操作。MMF提供了一个直接的编辑界面,可以直接进行物品的放置等。因此,本节主要介绍编辑界面的操作。

图1-6 场景编辑器的对象操作菜单


关于MMF的编辑界面操作,我们从对象说起。 对象(Object)是MMF中的基本元素,是关卡中的一种可显示、可交互的实体,关卡中的物件、场景、作品等都是对象。这种元素可以进行移动和修改,部分对象支持创建事件进行场景的运作等等。对象的一个基本特性就是拥有可以调节属性。选中对象后可以在属性栏对对象的属性做出修改。同时需要注意的是同一种对象共用一种属性、图像等;而名称是否一致是判断是否为同一种对象的标准。这里主要介绍对象在编辑界面的一些基础操作,如摆放、移动等;关于对象更进一步的详细介绍,请见第1.2单元。

当然由于对象的概念过于抽象,因此我们引入具体的“物件”概念。本教程中,为了叙述方便,现定义物件具体指代场景中的基本元素,如每一个地面、奖励、敌人包括敌人尸体等都是一个物件。当然,据此定义,物件属于对象的一种。

最初的编辑界面是空白的,需要创建物件。在编辑界面,单击右键,会出现如图1-6所示的界面,单击其中的创建对象(Insert Object)以创建物件。当然,在场景编辑器中的任何空闲状态下,按住Ctrl+J都可调用创建对象窗口以创建对象。关于创建对象的具体说明,将在1.2.1节提及;这里可以以RE自带的元素作为参考。物件可以从工作区(framework)左侧的物品库直接拖动到编辑界面中。拖动到想要放置的位置放置即可。

有些物件被分类放入了一些文件夹(folder)中,双击即可打开。文件夹可以按F2重命名,空的文件夹也可被删除。如果需要创建新的文件夹,在工作区工具栏中点击想要创建新文件夹的场景,单击菜单栏的"Insert->New Folder"即可。

同时,已经放置的物品也可以进行剪切、复制、移动、删除等操作。移动物件除了鼠标拖动外,还可以单击方向键进行精度为1像素的微调。(像素的概念属于信息技术常识范畴,若不清楚请自行查询;顺带一提,大多数软件都可以通过键盘的Delete键删除东西。)如果需要在拖动同时使物件仍然整齐排列,可以打开“对齐到点阵”按钮(见1.1.2节),在关卡编辑使强烈推荐。MF中的“一格”为实际32像素。如果需要精度设置成一格,则可以在点阵设置界面将点阵的长度(width)和高度(height)均设置为32,同理,如果操作精度为半格,则长度和高度均为16。关卡物件排列精度一般为一格,但是也有时根据实际需要有所变动。

顺带一提,有时候物件需要拖动到显示画面外的一点。这里普及一个小技巧,当物件被拖动到编辑界面边缘时,编辑界面的显示区域就会相应移动,移动速度和场景的长度和高度有关。

物件可以被复制粘贴及进行克隆、阵列等操作;由于这些操作需要涉及物件的种类等概念,我们将在1.2单元进行阐述。图片1-6中物件的功能我们在本教程中只会介绍常见的几个,MMF其实提供了很多方便的物件操作功能,关于其他功能,可以自行摸索。


MMF也可以进行场景的编辑。场景(Frame)是一种对象,且为作品中的一个构成单位,一个场景拥有独立的子对象和大小、事件、界面等设计,同时也受作品及其全局事件、全局对象、全局变量等的管理。在RE中,每个Start界面、选关界面、关卡和过场动画等都是一个场景。值得一提的是,英文中“场景”和“帧”都称作Frame,因此当看见Frame一词时,其指代“场景”或是“帧”应该根据具体情况判断。

场景在工作区工具栏中场景可以被复制粘贴及进行克隆等操作,而单击需要编辑的场景,属性栏会出现相关的设置。接下来我们着重讲解属性栏支持的设置。场景的设置面板见图1-7,其中分成了基本设置(Settings)、运行设置(Runtime Options)和关于设置(About)选项卡。在MF作品场景的设置过程中,我们主要用到基本设置选项卡中的一些功能,关于其他功能,可以自行摸索。

图1-7 场景的设置面板

Size提供了设置场景的大小。一般场景的大小写作“WxH”(或“W*H”,“W×H”)的形式,W指场景的长度,而H指场景的高度。长度和高度都为整数,单位为像素。长度和宽度一般需要超过窗口大小(640*480),否则无法正常显示。在作品运行时,一般只显示640*480大小的区域(也可以自己调整),显示的区域位置可以通过事件中确定卷轴中心位置进行调整,俗称“卷轴”或“滚屏”。显示范围之外的对象仍然存在,但是很多事件不对显示范围之外的对象进行判定。

Virtual Width和Virtual Height则设置了场景的可视宽度和可视高度。可视范围之外的部分在场景编辑时可以看见,但是在运行时会被作为场景之外的部分处理。可视范围可以通过事件调整,RE的“设置横/纵向滚屏长度”物件的运行就利用了这一原理。

Background Color可以设置场景的背景颜色。

Fade In和Fade Out可以设置场景转场时的渐入/渐出(即场景切换时)的效果。关于这点我们将于1.1.4节介绍。但是请注意,显示模式为Direct3D 9模式时转场效果会失效。 Effect可以设置整个场景的显示效果,不建议初学者使用以防止滥用、误用现象发生。

在实际运行时,场景之间的跳转非常重要。RE的默认顺序是从主关卡场景从头到尾依次跳转,但是由于实际需要例如选关等往往需要自定义场景跳转的方法。场景跳转的原理和设置等我们将在后面进行讲解。


当然,进行这些编辑,最终是为了保证作品的完整性。作品是一个运作整体;但同时作品也属于一个对象,场景是作品的子对象。作为一个作品,有一些基本的设置,例如加速引擎、帧率等。作品的基本设置适用于每一个场景,即使单个场景测试使也可被使用。场景的属性主要有基本设置、窗口设置(Window)、运行设置、值设置(Values)、事件设置(Events)、关于设置六个基础选项卡和Windows运行设置(限Windows操作系统)这个特殊选项卡。

基本设置可以设置作品生成和测试的基本参数,由于在MF作品制作过程中不常用,这里略去。

窗口设置可以设置窗口的尺寸、窗口的样式、菜单栏等和运行窗口有关的内容。

运行设置可以设置作品帧率、加速模式、声音输出及玩家的初始命数和玩家人数等。

值设置可以设置作品的全局值(Global Values)和全局字段(Global Strings)。

事件设置可以设置全局事件,包括菜单栏的事件、一些关卡的基本设置例如快捷键以及一些适用于各场景的事件。不过请注意控制全局事件的数量,过多场景或者过多全局事件都会导致设置界面的卡顿甚至死机。因此,当你制作一个大型作品时,设置全局事件应当是在作品的引擎规划阶段,而非开始制作关卡以后。

关于设置主要设置作品名、作品图标、作品版本、作品介绍等等。注意不要填写作者(Author)和公司(Company),不然你的作品可能会被360安全卫士等杀毒软件报毒。

除去作品的设置外,作品的场景顺序也是作品的一个重要属性。合理调整场景顺序可以减少作品的运行漏洞并增加编辑的流畅度。还有人喜欢在作品中设置分隔场景起到类似分割线的作用,这些属于个人喜好类型,因人而异设置。

初识物件

在1.1.2节,我们已经初步介绍了对象。并且在本教程内,规定“物件”指场景的子对象,如关卡中的地面、敌人等等。那么在这一单元,我们将对物件的概念进行初步的介绍。

物件概述

物件是一种实体,场景中的基本实体单位,也是场景的主要组成,MMF制作作品的原理也在于通过一系列关于物件的事件。因此,对物件有一个全面的认识对于熟练制作作品会有很大的作用。

首先需要明确一点就是场景是由物件组成的。一般地,场景内部(即出去菜单栏、标题栏等框架)物件是基本的交互单位。一个MMF作品事实上就是由物件的动作、交互完成的。而MMF的一个优点就是,支持物件之间多样的动作与交互。例如,你通过短短一行代码就能让物件进行碰撞、移动以及显示状态的改变、贴图的变化等等,并且相对地能够执行的复杂动作非常多:如果你有过编程等经验的话,你会发现在编程中这些操作会非常的繁琐。因此,使用MMF可以在较短的周期内做出一个非常精美的作品。当然其也有诸如限制大、运行卡等缺点,所以需要进行规避。这一单元,就是让你如何对物件有相对全面的认识,并且能初步的使用这些物件。


图1-8 创建active的步骤

认识物件首先就需要创建物件。创建物件的操作参考1.1.3节。在创建物件窗口会给出一系列各种各样的物件列表。不同类型的物件功能不同,使用方法也略有差异,关于物件种类之间的区别和使用,我们将在1.2.2节和1.2.4节叙述;这里以一种叫做"active"(活动对象)的类型的物件为例。Active是物件中最基础的物件类型之一,也是最常用的。在双击如右图中active图标或点击图标按下"ok"按钮之后,关卡中就会创建一个图像类似于菱形的物件。这个物件就是这一节我们用来讲解的示例物件。 如果物件种类实在过多,可以尝试使用A处搜索框查找。事实上,由于物件都是按照首字母顺序排的,因此可以利用首字母的位置快速查找。

双击物件可以进入物件图像的编辑界面。编辑界面大致和画图等一般的图像处理软件一样,方法也类似,因此基本工具不再叙述。当然,工具栏里面也有一些特殊的设置,这里会稍微介绍一下。

图1-9 物件图像的编辑界面

①α图标用于设置透明色和透明度。一般情况下,MMF使用某一种颜色作为“透明色”,即该种颜色会默认不显示。默认的透明色为黑色(#000000)。由于这种情况下黑色不会再被显示,因此此时如果你从右侧颜色栏中选择黑色进行操作时,实际上使用了和黑色相近的颜色(#080000),当然一般情况下这辨认不出来。其他颜色同理。选中透明色工具后,在图像编辑界面中选择一种颜色即可将该颜色设置为透明色。如果你想要给图像上透明色,则只需点击右图A处,即可选中透明色。

除了透明色外,对于一些有半透明或者透明度渐变的物件,MMF也支持透明度设置模式。选择α工具后,右侧B处会出现有"Transp.Color"和"Alpha Channel"两个选项的单选框,选中"Alpha Channel"可将图像属性设为透明度调节。这种情况下,不存在透明色,图像在红绿蓝三个通道基础上追加Alpha通道,点击Edit就可以对透明度进行设置。右侧颜色选项从黑到白Alpha通到的从黑到白。这里需要注意MMF中的Alpha通道颜色代表意义和一般软件是相反的,即黑色是透明,白色是不透明,灰色则是透明到不透明的过渡,根据灰色深浅决定。同时下侧含"Show"和"Edit"两个选项的复选框可用,点击"Show"即可单独显示Alpha通道,更加明确地展示图像透明度情况。取消勾选"Edit"即可退出透明度编辑模式回到常规的RGB颜色编辑模式。

请注意:如果物件图像从透明度模式回到透明色模式,透明度的设置将会消失。 有时有人会将图片拖动到MMF中创建物件,使物件具有特定初始图像和透明底设置以节约时间。此时若图像自带Alpha通道,则物件图像默认是透明度调节模式。当然,MMF进行这个操作时一般不是很稳定,因此我们不推荐这种做法。

②缩放设置可以设置图像的大小和画布的大小,具体操作方式略。

③热点设置可以设置物件的热点。热点(Hot Point)是物件的坐标原点。一方面,在后面属性设置和代码编写中物件的坐标即热点的坐标;另一方面,物件不同帧之间图像是热点对齐的。因此如果发现一系列物件中图像不能对齐,则可能是热点设置出现了问题。由于场景中物件是以坐标形式记录,改变热点可能会改变物件的位置。

④动作点设置可以设置物件的动作点。动作点(Action Point)可以设置物件的动作点。动作点可能会决定物件创建、发射的新物件起点位置。动作点不是必须的,但是善用动作点会简化作品制作的一些步骤,尤其是代码编写方面。

⑤物件预览可以预览物件的图像,对于动态图像尤其重要。

⑥帧的设置。此处“帧”(Frame)概念和动画及视频中的“帧”一致。帧可以用于创建动态图像。帧的设置和静帧动画的绘制一样。

⑦动画播放的设置。对于动态的图像,这里可以设置动画播放的重复次数以及帧率(帧之间切换的速度)。

⑧方向(朝向)的设置。方向即活动对象在不同朝向时播放的对象。物件面朝不同方向时图像可以不一样。方向可以人为设置,在B处拉动滑块可以设置方向;如果方向缺省,则方向改变时不改变动画方向。默认的方向为向右。方向也有对应序号,可以用于表达式中。向右为0,逆时针一圈的序号分别为0-31。由于这个物件只有四个方向,因此序号分别为0,8,16,24。

⑨动画序列的设置。一个物件可以在不同时间播放不同动画,这需要动画序列来设置。这里其实动画序列的内容不一定要和上面写的走动、跑步等相同,上面的文字只是给RPG游戏制作者的参考。动画序列也有对应序号,第一个序列为0,依次往下递增,可以在代码中用表达式来操控播放的动画的序列(在w10e中用处可能不大,但是RE中尤为重要)。虽然大部分动画序列的地位是相等的,但是有两个特殊的序列,为appearing和disappearing。当物品被创建(create)时,如果序列"appearing"有内容,则自动播放appearing的内容,支持循环;当物件被销毁(destroy)时,自动播放序列"disappearing"中的内容。

当然,MMF除了自带图像的画板以外,也支持直接导入导出外部图像。通过C区域的左端即可打开外部图像。外部图像会覆盖当前的动画帧,并且自动调整为大小;同时,外部图像的热点将会自动变为图像的中心。如果原图像有透明度,则导入后的图像自动变为"Alpha Channel"模式。事实上这等价于用一个完全新的图像阵替换旧的图像帧,注意是替换不是插入!

物件的分类

1.2.1节提到,物件有很多种类型,不同类型的物件功能不同,使用方法也略有差异。因此,本节我们将粗略的讲一下物件的常用类型。

打开创建物件窗口(参考图1-8)的时候,很多人可能都有点虚,因为窗口里面有相当多种类的物件,不知道该创建哪一种。但是事实上,这么多物件的种类很多都是自带扩展包内预置的(扩展包就是让MMF有更多功能的外置文件,多为.mfx或.mvx文件),而这些扩展你需要用到的几率简直是微乎其微,因此,大多数时候你需要用到的物件种类数量可能很少。下图是常用的物件种类及介绍。

图像 英文名称 中文译名 在RE中的应用举例
REtutorial10-1.png Active 活动对象 所有的敌人、奖励、平台、marks等等
REtutorial10-2.png Backdrop 背景 大部分地面、不动的景物
REtutorial10-3.png Quick Backdrop 快速背景 关卡的背景
REtutorial10-4.png Counter 计数器 "World"下方的两个数字
REtutorial10-6.png String 字符串 RE中各处做的给引擎使用者的提醒
REtutorial10-5.png Ini object 控制游戏存档
REtutorial10-7.png Lives 生命数 马里奥的生命
REtutorial10-8.png Score 得分 游戏得分、金币、时间等等

这么一来,常用的onject数量就缩减到了8种。然而,事实上,如果你是RE引擎使用者非开发者,真正使用到的object数量可能只限于前4种。接下来,我们来逐个分析这几种常用的物件。

Active,正如其名,是指图像在场景中变化,或者属性(例如位置、透明度等)在场景中进行修改的对象。简而言之,就是会变的对象。例如游戏中的板栗仔,因为需要移动,会创建、会消失、图像会变……所以会选用active。Active的优点就是会变化,但是相应的也会有缺点,例如会占用游戏的内存,等等,因此,才会需要backdrop作为补充。

Backdrop作为对应,是图像不会在场景中变化,或者属性不会在场景中进行修改的对象。由于其天生不变的属性,因此在实际处理过程中程序会把同一图层上、具有同一种碰撞判定的Backdrop复合为一个active(关于图层的介绍可见2.1.4节)。当然,这不意味backdrop没有用武之地。事实上,如果backdrop的碰撞判定设为“实体(Obstacle)”(这个在1.2.3节会讲解),则其仍然可以在事件中进行碰撞检测。注意的是,同一图层中的backdrop,根据其显示顺序(order)的不同,仍然存在覆盖关系。也就是说,如果你在地面(实体)上面叠一个大片白云(无碰撞)的话,马里奥是不可以踩在大片白云覆盖的位置的!同时也需要注意,backdrop复合而成的active的显示顺序会默认是最底下,也就是说同一图层上backdrop永远叠在active底下

Quick Backdrop顾名思义,是可以让你“快速”创建backdrop的对象。众所周知,一个地道背景可能只有不到1200*480的大小,在不用Quick Backdrop的情况下如果要平铺到10016*480的关卡上,则很可能需要将多个地道背景拼起来,或者是在Ps里面手动合成一个大的图像,非常麻烦,再或者如果你想用单纯的渐变作为关卡背景,则可能必须要用例如Ps或者Fw的制图软件做一个超大图片再导入MMF中了。所幸因为Quick Backdrop,你可以省去这些重复的步骤。Quick Backdrop支持直接设置渐变或者纯色的、大小可调Backdrop,或者将图片以平铺的方式伸缩。这可以带来很大的便利。

Counter是一种实时计数并且显示的物件。Counter自带一个可变值("可变值"的介绍可参见1.3.4节或者w11的代码讲堂(贴吧网页)的第七章(第47楼开始)的内容),并且可以将可变值实时显示在画面中。可变值的外观可以手动设置。

String和counter对应,是实时显示文字的物件。文字可以是预设的(例如永吧十周年的对话),也可以是实时改变的(例如作品永吧十周年的跳舞房小游戏的结算系统)。如果你了解的counter的用途,那么对string也不会陌生。String可以预设多段对话并且逐一显示(或者按照事件显示其中的特定段落。)同时,作为不想将文字以难以更改的图片方式显示而是想方便再设置的话,String也是一个很好的选择。

Ini object可以在游戏外部生成并且读取特定的.ini文件(当然你也可以改后缀名,但是格式仍然为INI)。由于MMF创建的游戏exe自身在关闭或者restart之后所有的内部数据都会重置,无法读取或者保存游戏进度或者其他内容,因此需要通过外置ini的方式来保存进度。ini保存进度是最常用的进度保存方式,也几乎是唯一的方式(还有一种方式是注册表,但是问题较多)。由于RE已经有了一套完整的进度保存和读取系统,因此对引擎使用者而言,这个物件可能永远也用不到。

LivesScore可以看成是全局值和Counter的“合体”,虽然表面上是玩家的生命值/生命数和分数,实际上作用完全就是一个全局值。而且这个全局值还可以通过Live和Score对象实时显示。

当然,扩展里还有很多其他的对象。对于物件扩展的详细说明,可以参见1.2.4节。如果你想了解其他对象的功能和使用方式,欢迎自己摸索。

物件的操作

当你创建一个物件以后,这个物件就在左边的物品库出现了。要将物件摆放到编辑界面上一般有这么三种方法:

  • 在要摆放的物件上按住鼠标左键,并将其拖动到编辑界面需要摆放的位置。摆放之后,也可以直接拖动编辑界面的物件来移动位置。这种方法是比较常用的。当你开启“对齐到网格”的功能时,物件会自动对齐到网格。
  • 在CTF2.5中,可以选中画笔模式,并且在要摆放的位置单击鼠标左键,即可摆放。当然你也可以按住鼠标左键并且拖动,划过的位置就会创建该物件。不过,这种情况下需要注意两点:
    • 当你开启“对齐到网格”的功能时,物件会自动对齐到网格。
    • 在使用划动的方式创建物件时,物件会遵循不重叠的标准。也就是说,单次划动创建的物件之间不会相互重叠;但是当你在已有的物件上划动创建,则会出现重叠的状况。因此需要注意是否发生了重叠的情况。
  • 当已经存在同种物件的时候,可以通过复制粘贴已有物件的方法创建物件。当粘贴的物件和已有物件的名称一致并且图像及属性一致[1]的时候,则粘贴的物件就是和已有物件为同种物件;当图像和属性有至少一项不一致时,则粘贴的物件就不为同种物件,名字后一般会加“2”以示区别。关于是否为同一种物件可见1.1.3节。名称为物件的标识,不同的物件是强制不能使用同一种名称的。当然,根据汇报,CTF有时候会出现即使图像和属性一致粘贴的物件也不为同一种物件的bug,请注意。
    除了粘贴以外,如果你右键拖动物件到某一位置,则会出现"移动到此处(Move here)"和"复制到此处(Copy here)"的选项,点击"复制到此处"后,即可复制物件。
    物件可以选定多个物件或一个区域后批量复制。

除了创建之外,当出现不需要的物件时,也可以删除物件。物件可以选定区域或多个物件后批量删除。但是注意,当你没有使用"Never Create"手段(见1.3.2节或w11的代码讲堂(贴吧)的第四章(24L)。)防彻删时,当你删除了场景中的最后一个物件,则场景就会自动删除该类物件(即彻底删除,简称彻删),即不能再从物品库调用。如果该物件在全局事件出现,则系统会提醒;但是如果没有出现在全局事件(包括只有行为没有全局事件),则系统会在不提醒的情况下彻删物件。因此在删除物件时要注意不要彻删一个物件!

图1-10 阵列窗口

当然,还有一个大规模创建同一类物件的方法。当右键编辑界面物件时,会出现一个叫做阵列(Duplicate)的选项,单击以后会出现右图所示窗口,其中Rows为行,Columns为列,Row Spacing为行间距(单位为像素),Columns Spacing为列间距(单位为像素)。填写以后,就可以大规模创建同种物件了。

需要在一个物件的基础上创建新的物件时,可以使用克隆(Clone)的方法。克隆可以创建一个与原物件不为同一类的物件,并让新物件自带原物件的属性和图像(但是,两者不是共享的)。右键单击克隆选项后,同样会出现和阵列相似的窗口。因此,可以大批量克隆。由于窗口过于相似,请注意不要将克隆和阵列搞混了!

  1. 本教程中“图像和属性”的概念会出现相当频繁。图像包括了每一帧的图像、动画种类等,即包含所有物件图像编辑器中的内容;而属性包括了属性栏除位置以外的所有内容,例如效果(effect)、可变值以及行为等等。值得注意的是,图像和属性是建立在名称一致的前提下的。

物件的属性

在熟悉物件的类型之后,我们就需要接触各种物件的属性了。属性可以指属性编辑栏内的属性,也可以指这种物件的特性。本节,我们将会根据不同active的不同特性,讲解各自的属性。

图1-11 Backdrop的属性

前文提到,Backdrop的功能非常有限。Backdrop提供了一种运行较为轻松的方案,但是作为代价,backdrop的功能很少。Backdrop主要是一种静止对象,其特点是位置固定、图像没有动画,只能参与碰撞事件等,简而言之,即图像、属性和位置均无法改变。下面我们来看看Backdrop的属性设置。


Backdrop的属性中有5个选项卡,分别为基本设置(Settings)、显示设置(Display Options)、尺寸/位置(Size/Position)、运行设置(Runtime Option)、关于设置(About),图中将选项卡整合在了一张图里面。这里我们会将常用的属性介绍一遍,更多内容欢迎自己摸索。

Backdrop的基本设置仅仅只有图片一项,而显示设置里提供了这些内容:

效果(Effect)提供了元件的特效。特效主要包括灰度、反色等特效,可以自己摸索,这里暂不介绍。

混合程度(即透明度,Blend Coefficient)可以设置元件的透明度。

尺寸/位置选项卡可以设置元件的尺寸、坐标和旋转角度。这里需要提一下“坐标”事实上是电脑通用的坐标系,以左上角为原点,向右为x轴正方向,向下为y轴正方向。在MMF的场景中,原点则为场景的左上角。

运行设置主要提供了物件在运行时的一些属性。

碰撞类型(Obstacle Type)提供了物件被碰撞的情况。None为不碰撞,Obstacle为实心。实心的Backdrop可以进行事件中的碰撞判定(见1.3.3节),而None则不可以。MMF还提供了两种基本不用碰撞类型的Platform和Ladder,可以自行研究。

方形碰撞(Collision with Box)勾选框勾选以后,整个物件的方形区域都会被碰撞,而取消勾选以后,只有有图像的区域会被碰撞。效果类似下图: REtutorial12.png

全局物件(Global Object)勾选后,MMF会将整个工程文件中名称相同且图像和属性相同的文件都变为全局物件。这种状态下,整个作品中任何场景的物件的图像和属性进行更改,该工程中所有的物件都会有相应更改。当工程中存在名称相同但是图像和属性不同的物件时,系统会提示并要求更改物件的名称。

关于设置则主要是修改名称(name)和图标(icon)。图标默认为当前物件第一个动画的第一个方向的第一帧的32*32缩略图,但是可以人为设置。在这里也顺便说一下一个事件编辑者图标设置的一些规范。当很多物件图标相同时(例如经过克隆以及缩放得到的物件),就极易使物件混淆。当这些物件用于事件编辑时,请最好设置不一样的图标,否则如果出现问题在debug过程中将会遇到极大麻烦


图1-12 Active的属性

和backdrop不同的是,active则拥有更多特性。Active的图像可以更改,位置和属性也可以实时变化,因此其设置内容也相应多一些。

Active的属性设置在backdrop基础上,缺少了基本设置(Settings),多出了运动设置(Movements),也多出了值设置(Values)和事件设置(Events)这两个对于事件编辑者相当重要的设置。关于这两块的设置,我们将在1.3进行研究,这里暂时搁置。同时由于RE是通过事件而非运动控制物件的移动,故关于Movement我们将不作阐述,可以自行研究。

Active的显示设置中,第一项就是开始时显示(Visible at Start)的勾选框。当框被勾选时,则物品被创建[1]时是可见的;框未被勾选时,则是不可见的。

在Runtime Object中,有开始时创建(Create at Start)的勾选框。若勾上,则在场景开始时会被创建,若不勾上,则开始时不会创建,类似Never Create的效果,但是物件会被删除而不会变为僵尸物件[2]

此外还有跟随滚屏(Follow the Frame)的勾选框。如果勾选,则场景滚屏时该物件会跟随滚屏;不勾选时,则即使场景滚屏,该物件仍然在画面的原位置,例如MF中的水就是不跟随滚屏的,因此即使其有有限的长度,却始终在画面下方。

下面还有距离场景太远时销毁(Destroy if too far from frame)的勾选框。一旦勾选,则该物件在场景外并且距离场景(注意是场景边界不是画面边界)一定距离后,就会自动被销毁。这样可以防止物件堆积,但是也可能导致一些特殊的物件例如跟踪敌人飞出去飞不回来,因此请根据物件实际使用情况勾选。RE中这个功能由事件控制,因此不会用到;但是你创建新物件时这个框是默认选中的,请注意。

精确判定(Use fine detection)的效果和Backdrop的方形碰撞类似,注意勾选时是以图像所占区域为标准,不勾选才以方形为碰撞单位。

图1-13 快速背景的特殊设置

距离窗口太远时取消激活(Inactivate if too far from the window)一旦设为yes,则距离窗口过远后,该物件将不会参与判定,也不会自发性进行变动;但是仍然可以进行坐标判断。这样做可以节省运行内存,但是在特定条件下也会带来一些麻烦。RE默认是选择no,物件刚创建时该项是选中automatic(该项的情况暂时不明),因此请注意。


Quick backdrop的设置可backdrop基本类似,但是其可以设置边框以及填充类型,如右图所示。其中边框(border)可以设置边框的颜色和大小;填充(Fill)可以设置填充的类型,一共四种备选方案,分别为无填充(none)、纯色(solid color)、渐变(Gradient)和图案填充(Motif),请根据需要选择。


作为初学者,掌握这些物件的属性设置就足够了。如果你有一定的英语词汇量并且已经熟悉MMF的话,相信其他类型的物件的设置对你而言也就非常轻松了。

  1. 创建包括场景开始时的创建。
  2. 这是MMF一个严重的bug,后文会提及这个Bug。

扩展物件

MMF是支持自己编写外置扩展的,因此会有很多的扩展物件。这些物件种类繁多,可以帮你实现更强大的功能。

在lyh提供的CTF中,已经自带了相当数量的扩展包,因此,可以供选择的物件种类也很多。当然,也可以网上寻找更多的扩展。但是注意:扩展不求多,但求有用。这些扩展物件的用途虽然没有那么广泛,但是关键时刻可以帮大忙。例如RE的影子马里奥扩展等等。

但是注意,用到扩展的工程文件打开时也需要对应的扩展。如果电脑上缺少相应扩展,就可能打不开这个文件。

当缺少扩展时,我们可以通过扩展管理器(Extension Manager)获取相应的扩展。部分在MMF2中的扩展在Clickteam Fusion 2.5中已取消支持,这些扩展无法从扩展管理器中获得,如Overlay.mfx扩展。

事件与编写

虽然前面已经介绍了物件,但是光有物件只能让作品是静态的,只是图像,要想让作品“动”起来,还需要事件的支撑。事件(Event)可以让物件进行判断和运动。事件的编写其实是MMF的一大难点,而且也是很多新人比较不敢接触的内容,因为编写事件和写程序代码原理类似,需要一定的数学基础和逻辑能力。由于教程针对人群的不同,后面和事件有关的章节我们将会作如下注明:

本节涉及到事件编写,不想接触事件可以直接跳至第2章。

要用语言解释MMF里面的事件,可能会有很大难度,因此我们可以先从实例说起,例如我们可以看一下RE里面的事件例子:

这个例子是RE里面设置时间的事件,也是很多人可能会接触到的第一个事件——因为这是RE设置时间的方法。那么,我们来解读一下这个事件。 注意:实际事件编写中,涉及的对象是用图标表示的,在这里我们改用斜体表示特定对象。

57
  • Start of Frame
    Player 3: Set Score to 360


|} 我们来解释一下这个例子。Start of Frame即场景开始时,也就是说在场景开始的时候执行这个事件。Player 3的Score在RE中用于储存剩余时间(你也可以发现,RE中的时间就是一个Score物件,属性中Player一行设置为3),将值设为360即将时间设置为360.

当然,关于事件的教程,也可以参考此处: Rainbow Engine代码讲堂(入门)(百度贴吧,作者w11)

条件与执行

从上面也许你已经有感觉了:MMF的事件分为两部分,第一部分是条件(condition),也就是只有且只要满足这个条件就会触发下面的内容;第二部分是执行的内容(action),也就是游戏或者该物件会做出什么改变。这个是事件的一个基本的思考方法,如果顺着这个思路,分析事件就会简单很多。

当然,事件里面出现了大量的英文。如果你不是很懂英文,你可以去安装中文的汉化包,但是为了防止翻译的歧义,因此这里普遍采用英文事件。

除此之外,可能很多人会接触到修改游戏音乐的事件。我们可以看一下这一个事件:

1
  • 马里奥位置 is overlapping 更改音乐 1
  • 1-music-level-1 is not playing
  • 马里奥位置: internal flag 20 is off
    Sound: Stop any music

    Sound: Play sample 1-music-level-1 on channel #32, 0 times


|}

根据前面“条件-执行”的思路,我们可以这么分析:第一个条件是马里奥和“更改音乐1”,也就是更改音乐的标记接触,这个是基本的条件。第二个是指定的音乐(这里是MF原版1-1的音乐)没有播放,也就是说音乐播放的时候不会更改音乐,如果没有这个条件的话马里奥碰到的时候会不断重新播放音乐,也就是会形成噪音(可以自己试一下);第三个第一次接触事件会有点难理解,马里奥的flag20关闭的意思是马里奥没有死亡(后面会有表格讲解马里奥的各个flag的作用,见1.3.4节),也就是马里奥死亡后碰到也不会播放这个音乐。只有同时满足三个条件才能够进行下面的变动。执行的内容有两条,第一条是停止播放现在正在播放的背景音乐,第二条是重新播放指定的音乐。(#32是声道编号,可以用于设置一个声道的音量或者使一个声道静音,0 times表示这个音乐会一直循环。)

这么看来,这个事件也非常容易理解了吧。

我们可以看一下更多的事件例子,你可以根据这个思路,自行判断这个事件的内容。如果有代码的中文意思不了解,可以参考注释和1.3.2节内容。

8
  • 板栗仔 is overlapping 子弹(马里奥)
    Sound: Play sample kick 2

    板栗仔: Launch 板栗仔尸体2 towards direction 8 at speed 25

    Create New Objects: Create 奖分100 at (0,0) from 板栗仔

    子弹(马里奥): Set internal flag 0 on

    板栗仔: Destroy


|}

注:Launch是喷射一个物体,Direction 8是朝上(见1.2.1节),而RE里,当马里奥子弹的flag0开启时,子弹会爆炸并且销毁(destroy)。

编写简易事件

在了解了解读事件的基本思路以后,我们也要开始尝试自己编写简易事件了。编写和解读不一样,你要根据“在什么条件下想要干什么”的思路,进行事件的编写。编写事件需要你有比较强的逻辑能力,同时也需要有一定数学功底(例如,上面的例子就出现了数学中的坐标)。

在MMF里面,事件主要有全局事件、场景事件和物件的行为。全局事件可以在选项的Global Events里面设置(见1.1.3节),场景事件可以打开事件表编辑器设置(见1.1.2节),而物件则在物件的行为里面设置(见1.2.4节)。其中,事件的设置面板一般有两种形式:列表式和表格式。 列表式显行状分布(左图),而表格式则为棋盘状分布(右图)。

图1-13 两种不同的设置面板

全局事件和物品的行为是强制使用表格式的,场景事件则可以选择两种不同的形式,事件表编辑器打开列表式设置面板,事件编辑器打开表格式(见1.1.2节)。

其中,列表式编辑器将事件的所有条件和执行内容一并展示,非常清晰;表格式则将各物件的内容分别列在不同的列中,方便对关于一个特定物件的事件进行检索。两者各有优点,需要在不同情况下使用不同的事件内容,初学者最好同时熟悉两种风格。

那么,我们需要先创建事件。需要创建事件,只要在左边的事件序号处右键,单击Insert->A new event即可。当然,你也可以在执行条件/执行内容上右键,进行修改(Edit)、插入(Insert)新的条件/内容或者将这个条件/内容替换(Replace)成别的条件/内容。

创建事件以后,会弹出一个名为"New Action"窗口,这个时候你就需要给事件添加第一个条件了。这个窗口里面有很多图标,在需要添加条件的图标对应的物件上右键就会出现这个物件相关的条件了。当然,前面一些图标是和工程相关的,一些对工程/场景的设置可以在此处设置。

值得注意的是,Backdrop和Quick Backdrop是不能设置事件的。

右键之后,就会出现一大串的选项,每种选项中又有很多子选项。这里就介绍各选项对应的内容。


REtutorial17-1.pngSpecial是关于整个工程的操作和其他一些功能。其中常用的内容如下所示:(其中可变值和可变字段会在1.3.4介绍)

操作 执行条件介绍
Always 总是,满足此条件时每帧执行一次。
Never 从不,一般用于物品库(在MMF2中也被用于暂时禁用某些事件(例如W10E的飞鱼设置))。
X Chances out of Y at Random 随机几率,注意这个条件总是同时成立/不成立,如果想每个active单独判定随机情况的话请使用变量+随机函数。
Compare to a Global Value 将一个全局值与某一个值作比较
Compare to a Global String 将一个全局字段与某一个字符串作比较
Compare Two General Values 将两个值作比较(注意:这里的值可以是数值,也可以是字符串)。
Limit Conditions 常用的是Run this event once和Only one action when event loops。前者是单次运行该场景时该事件只执行一次,后者是每次连续满足条件时只运行一次。Repeat则是当条件连续满足时。前两个条件相当常用。
Group of Events 事件组相关。Check activitions是当某个事件组激活时满足。
Application Menu 菜单相关。Has an option been selected是当一个(单选框)选项被选中时,Is an menu option checked是一个选项被点击时,Is an menu enabled是当这个选项被激活时
On loops 在进行一个loop时。MMF的Loop和编程的循环不一样,具体会在1.3.3节提及。
操作 执行动作介绍
Change a Global Value 设置全局值。Set是直接输入数值,Add to是在原数值上添加数值,Subtract from是减去一个数值
Set Global String 设置全局字段。
Group of Events 操作事件组。Active是激活一个事件组,Deactive是取消激活一个事件组。
Application Menu 操作软件的菜单栏。Show/Hide a Menu Bar是显示/隐藏菜单,Enable/Disable是激活/冻结一个选项。
Fast Loops Start/Stop Loop是开始/结束loop。
Randomize 重置随机,和编程语言中的用法一致。

REtutorial17-2.pngSound主要是关于声音播放相关的动作。一个Frame有32个音效(Sample)通道和一个音乐(Music)通道,每个通道(Channel)各自支持同时播放一个音乐或者音效。值得注意的是,RE没有使用Music,游戏的背景音乐也都作为Sample。

在MMF中,音乐可以选择内置或者外置。值得注意的是,内置的音乐如果在游戏中没有用到,则会被自动清除。

类别 操作 执行条件介绍
Samples Is a Sample not Playing? 当没有音效播放的时候
Is a Specific Sample not Playing? 当特定音效没有播放的时候
Is a Specific Channel not Playing? 当特定声音通道没有播放的时候
Is a Specific Sample Paused? 当特定音效暂停播放的时候
Is a Specific Channel Paused? 当特定通道暂停播放时候
Music Is Music not Playing? 当没有音乐播放的时候
Is Music Paused? 当音乐暂停播放的时候
Is Specific Music not Playing? 当特定音乐没有播放的时候
Has a Music just Finished? 当一个音乐播放完的时候
类别 操作 执行动作介绍
Samples Play Sample 播放一个音效
Play Sample on a Specific Channel 在指定通道播放一个音效
Play Sample File on a Specific Channel 在指定通道播放一个外置的音效
Play and Loop Sample 播放并且循环一个音效(循环0次即无限循环)
Play and Loop Sample on a Specific Channel 在指定通道播放并且循环一个音效
Play and Loop Sample File on a Specific Channel 在指定通道播放并且循环一个外置的音效
Pause Sample 暂停一个指定的音效
Pause Channel 暂停一个指定的通道
Pause All Sounds 暂停所有正在播放的音效
Resume Sample 恢复播放一个指定的音效
Resume Channel 恢复播放一个指定的通道
Resume All Sounds 恢复播放所有正在播放的音效
Stop a Specific Sample 停止一个特定的音效
Resume Channel 停止播放一个指定的通道
Resume Any Sample Playing 停止播放所有正在播放的音效
Set Main Volume 设定主音量
Set Sample Volume 设定一个通道的音量
Set Channel Volume 设置一个特定音效的音量
Set Main Pan 设定主音平
Set Sample Pan 设定一个通道的音平
Set Channel Pan 设置一个特定音效的音平
Lock Channel 锁定一个通道。通道锁定后,无法进行除解锁外的操作。
Unlock Channel 解锁一个通道。
Music Play Music 播放一个特定的音乐
Play Music File 播放一个外置音乐
Play and Loop Music 播放并循环一个特定的音乐
Play and Loop Music File 播放并循环一个外置音乐
Pause Music 停止当前播放的音乐
Resume Music 恢复播放当前播放的音乐
Stop any Music Playing 停止当前播放的音乐