【通用MF引擎教程宝典 初阶 第2册】
mfe吧
全部回复
仅看楼主
level 11
dodoufatch 楼主
第一册地址
https://tieba.baidu.com/p/2851808840
这个是续集。将在暑假内连载。
内容多以介绍逻辑和语法以及思路为主,而不是介绍基本思路为主。
并在第一册基础上制作。
小白请参照第一册或者马里奥X7最新的教程。
2014年07月06日 05点07分 1
level 11
dodoufatch 楼主
第三章 逻辑条件与Value的直接运用
1- OR 与 Negate
OR的语法如下:
条件一
OR
条件二
Action 1
.......
例如:
我生了男孩
OR
我生了女孩
我喝酒
那么执行结果是只要我生了一个孩子,那么我就喝酒。
OR可以避免重复繁杂的动作。
例如:
Mario is overlapping Luigi
SC: Next Frame
Mario is overlapping Koopa
SC:Next Frame
那么可以缩减为
Mario is overlapping Luigi
OR
Mario is overlapping Koppa
SC:Next Frame
图3-1 OR语句的示范
我们在第二个事件上右键,选择OR operator(filtered )选项来插入OR,然后放中间。
本来默认是两个条件必须全部实现才能开始动作,现在只要实现1个即可。
OR也可以放多个事件之间,甚至可以放多个。大家可以自己摸索一下。
Negate的语法为:
Negate 条件
ACTION 1
.........
Negate,顾名思义是“否定”。
一个条件如果加上了NEGATE,那么作用效果则相反。
例如:
Negate 我没节操
我心里默念“上帝”
那么,执行结果是,我心里无时无刻默念着“上帝”
NEGATE语句中,如果条件没成立则执行动作,如果成立则停止执行。
红色的条件(一触即发并非延时性的条件)是无法NEGATE的,例如Collision between不能negate,只能转换为overlapping。
nagate只需在一个条件上右键选Negate即可。
图3-2 NEGATE的标志是一个叉叉
(另外Always的negate是Never)
2014年07月06日 05点07分 2
level 11
dodoufatch 楼主
2- VisibiLity
该英文单词的原意为“可见”
VISIBILITY的条件语法为:
Is 物体 Visible?(invisible?)
动作
那么,当一个物体visible(可见)(或者invisible不可见)时,条件执行。
(invisible不等于semi为0)
一般地,visibitily可以通过属性菜单来控制初始visibility(visible at start)或者通过动作来控制。
属性菜单中,单击一个物体,可以设置初始是否可见。
一般地,事件动作物体都不可见(如各种触发点等等)
除了初始之外,还可以中途设置。
语法为:
条件1
.......
条件N
Object: make invisible (或者make reppear其实就是visible了)
图3-3 visibility的条件与动作语句的例子
在添加中,我们右键选项里看见了visibility就可以添加了。
此外在动作语句中还可以添加Flash Object(闪动物体,例如KOPPA受伤时的闪),set ink effect设置特效,set semi-transperency(设置可见度,0-128之间)等等。这些都在visibility选项中(注意是事件部分不是条件部分)
semi和effect在属性栏中可以初始设置。单击一个物体,左侧属性栏中慢慢找,能找到effect与semi。
图3-4 semi与effect
2014年07月06日 05点07分 3
level 11
dodoufatch 楼主
3- 控制播放代码初步接触
接下来我们接触几个和音乐有关的代码
音乐分为sample和music,RE里基本上是sample,sample可以放在各种各样的频道(channel)里,一个频道一次播放一个sample。现在我们尝试着做一个音乐
我们首先找空地(诀窍:鼠标左键单击一个数字,然后右键insert- a new line)可以直接插入
选择第一个电脑,然后点击Always。还是老规矩插入action。选择喇叭,右键,然后移到sample,选择Play and loop Sample on a specific channel,选择随意一个背景音乐(如果要自定义可以选择最下面一个file,然后转到你要的文件。最好为ogg格式,mp3格式不支持)然后再对话框中输入32,再输入0.就完成了以下代码:
Always
Play sample XXXXXX on channel #32, 0 times
这样测试关卡,发现背景音乐是这个音乐和另一个背景音乐混杂起来的(RE除外)。
这里只是给大家做个演示,因为每种引擎的音乐逻辑是不一样的,无法一一讲。
W10E是在音乐+通关处,把音乐=0下面的channel改一下,RE忘了。
接下来我们要让频道32停止。
删掉刚刚那个事件,再插入一个Always,然后选择喇叭--sample- stop channel,输入32,会发现正常情况下这个音乐会停止。
单击Always,右键Replace,在界面第一个电脑处右键选择Never,这样音乐就永远不会停止。
我们试着为频道32设置音量。
把Never改回Always,删掉那个stop channel,改为set chennel volume(方法:打开界面,右键喇叭-sample-- set channel volume)输入一个准确的音量就可以了。测试关卡看效果
2014年07月06日 05点07分 4
level 11
dodoufatch 楼主
4- 帧代码
帧代码为storyboard control类型。我们尝试着通过马里奥碰到板栗仔来跳到下一帧。
collision between Mario and 板栗
storyboard control(那个像棋盘一样的):Next Frame
测试关卡看效果。
其实我们还可以设置Jump to frame。一样的地方右键STORYBOARD CONTROL,选择jump to frame,选择一帧。这样,当马里奥碰到板栗的时候会跳到特定的界面了!
2014年07月06日 05点07分 6
level 11
dodoufatch 楼主
5- Test Position(比较坐标)
我们已经学过了X和Y坐标。接下来我们来学习比较坐标的一般方法。
比较坐标是作为条件出现的,语法格式为:
X position of Active(物品) 比较符 一个X坐标值
Y Position of Active 比较符 一个Y坐标值
比较符有等号(equal),不等(Different),不小于(Greater or equal),不大于(Lower orequal),小于(lower)和大于(greater)
一个X坐标值或Y坐标值可以是一个准确的数字,还可以是一个值。(例如此时帧最右边的X坐标、此时板栗仔的X坐标等等)
假设目前有创建了一个Active,我们来举个例子说明:
X position of Mario >= X(“active”)
Storyboard Control: Next Frame
此时,如果马里奥的X坐标不小于Active的X坐标,(即大于或者是等于)就去下一个界面。简单的说就是马里奥不在这个Active的左边时执行下面的代码。这个代码会一直执行直到帧的结束。
表示一个物体X坐标的语法为 X(“物体名”),Y坐标也是一样,是Y(“物体名”)
此时帧的最右侧可以表示为XRight Frame(这些全都可以用于强制滚屏,到时候会细讲!)
我们来体会一下这种用法
创建一个空的Active(方法应该都知道),重命名为“SBB”,放到关卡中适宜的地方。然后转移到event list editor,找空地插入新的条件。
我们单击代码马里奥的物品
图3-5 W10E中代表MARIO的物品
右键,选择Position,然后单击Test X Position to a value,在新的对话框中输入 X("SBB"),然后
图3-6 X、Y的判定
如上图,将上面的choose comparision methof中的equal换成Greater or equal(不小于),然后点击OK,就生成了一段代码。
然后我们在这个条件下面点击insert your action here,插入next frame(这个应该知道吧!)
完成了。我们测试关卡,发现MARIO一旦越过那个Active就会跳转界面
同样,我们双击那个X Position of Mario >=X(“SBB”),把X(“SBB”)换成100,测试关卡。
2014年07月06日 05点07分 8
level 11
dodoufatch 楼主
6- Test Value
在F2中,最主要的VALUE为Global Value(全局变量)和Alterable Value(物体内置可变变量)。
关于VALUE的基本介绍可以看X7的教程或者我的第一册有一点点介绍
图3-7 第一册中关于VALUE的一丁点儿介绍
在语句中,如果要直接套用value,则语法为
Global Value ..(如果重命名了则直接用改名字)
Alterable Value ... (“物体”) (注意引号不能省)
例如:
Always
Set Global Value A to Global Value A
Set Global Value B to Alterable Value A("Active 1")
TEST VALUE用于条件中。
创建一个条件,选择
(图3-8),右键选择Compareto Global Value
(下图为图3-9)
出现如图3-9的界面。
(马里奥大小 为已命名的Global Value A。关于初始命名请参见第一册的第一章的第12节)
这个界面和TEST POSITION中的那个界面很像
我们在下面输入任意一个值,就可以进行判定了。
例如判定当Global Value Z=12时关闭游戏,则
如下:
(图3-10)
Alterable Value 的判定方法则大同小异。
插入新条件,在界面中选择一个物体,右键,选alterable中的第一个
出现大同小异的界面。
alterable value的实质是这个物体的各种数据以及属性。
如
图3-11
另外还可以大于小于不等于等等。
后面的值也可以直接引用position、另一个value等等。
2014年07月06日 05点07分 9
level 11
dodoufatch 楼主
7- Changing values
更改globalvalue
更改value的值在动作块进行。首先新建动作,找到如图3-8的东西,选择change a global value,然后有3个选择:set add subtract
set则是重新设置。
add和subtract是加和减。
例如add 3 to Global Value A
相当于set Global Value A to Global Value A +3
subtract则相当于add这个表达式的值的相反数。
subtract 3 from GVA 相当于 set GVA to GVA -3
图3-12 也可以set一个表达式
alterable value的设置方式大同小异。这里不再过多阐述。
(关于spread value现在可以不去管它,后面会说到)
2014年07月06日 05点07分 10
level 11
dodoufatch 楼主
预告:7月10日左右会出台针对各种新人的入手版本:《代码运用实例初阶》,介绍如何用各种有限的代码来制作出无限的创意,并让你懂得用代码来实现各种你想要的效果。还附赠视频哦!(同时该帖也会更新)
2014年07月06日 05点07分 11
level 4
之前的一个月全白自学了QAQ
2014年07月06日 09点07分 12
level 12
说明一下:
X position of Mario > X(“active”)
这条代码可以直截了当地说就是
当Mario在该物体前面时触发什么事件
相反
X position of Mario < X(“active”)
当Mario在该物体后面时触发什么事件
2014年07月07日 00点07分 13
level 13
新手必看!好!
2014年07月07日 03点07分 14
level 11
dodoufatch 楼主
8- Player Control与Keyboard --键盘控制
-合作学习-
在马里奥运动的代码块中,你认为什么是必不可少的?
仔细研究一些引擎关于动作的代码块,他们的条件中都有什么?
Player1的Score和什么相关联?
Player还有什么功能?
-课前引入
大家都知道,马里奥是通过键盘来控制的。F2中关于键盘控制的一共有2种类——PlayerControls和KeyboardControls。前者是内置的,后者是要装入一个ctrlx.mfx(貌似是这个吧反正是一个MFX具体不清楚了)才能用,也就是拓展包。拓展包非常好用。(有关拓展包的使用这里不做介绍,详见8月推出的《MF制作常用拓展控件宝典 第一卷》)(今天除外)
这里我们明天再介绍PlayerControl(也就是那个Player1 Player2之类的。RE中一共3个,W10E中则4个,各有各的功能) 今天我在外面的电脑上没F2
一般地,W10E的Player2的score是控制金币的。。
PlayerControl最主要的2个功能:1 显示Score(包括Lives) 2 进行输入控制(俗称按键控制)
-课内详解
KEYBOARD,就是创建新条件(注意是条件!CONDITION)时界面中一个类似键盘的东西。KEYBOARD只运用于条件。有2个主要功能:1. 按下键时执行一次下列动作。 2.只要一直按着一直执行。
-例题-
【例1】 按下键K后,关闭游戏
【讲解】
我们创建一个KEYBOARD条件,选择“Upon Pressing a Key”,然后按一下键盘上的“K”,那么条件就完成了。
条件应该为 Upon Pressing a Key "K"
然后下面就直接用STORYBOARD CONTROL中的end the application即可。
【答案】
Upon pressing "K"
storyboardControl: End the application
【例2】重新制作一个新的MFA,里面有一个小球。键盘按下→时小球会向右运动。
【讲解】
这句话的意思其实是“当键盘按住→时小球就要一直向右运动”。因此用Repeat while pressing a key。
向右运动则可以通过递加X坐标来实现。
【答案】
创建一个Active。命名为BALL,并画成球形
Repeat While Pressing "Right Arrow" (编者注:上下左右键输进去后在代码中显示是Left/Right/Up/Down Arrow,空格是Space。所以只需按一下→即可)
BALL: Set X Position to X("BALL")+1 (编者注:可以是2、3、4、5、6,只不过速度不一样)
完成了!
2014年07月07日 06点07分 15
level 11
dodoufatch 楼主
9- 将组(Group)应用到条件中
之前我们在第一册的第一章第11节学过Group的概念(忘记了可以去温习一下)。创建Group当然是为了应用到代码中。今天我们通过几个例子来介绍GROUP应用的方便性和必要性。
【课前思考】
现在有100种金币,如果马里奥吃到了任意一种金币都直接跳入下一个Frame,那么有必要输入100个Events吗?
有没有更便捷的方法?
【例1】解决【课前思考】中的问题
【分析】如果这100个金币都能放入一个Group那会很轻松。
为了方便,我们在对一个金币克隆前,提前将他加入一个Group(例如Group.13)里。(加入GROUP的方法请参考第一册第一章第11节)然后再克隆100份,进行编辑。
【答案】
Collision between 马里奥 and Group.13 (在界面里能看到一个东西名为Group.13)
STORYBOARDCONTROL: Next Frame
【应用】
马里奥被怪物碰到时,都会变小(或死亡)。因为大多数引擎将怪物放入了一个Group,只要马里奥碰到这个Group的任何一个成员的实例,那么都会执行动作。
【课后思考题】
实现 当马里奥碰到金砖时,视为马里奥碰到怪物。
2014年07月07日 06点07分 16
level 11
dodoufatch 楼主
10- Animation(状态)作条件的初步应用
【课前挑战】 制作一个警告文字牌,里面会先后出现3段话,当3段话均展示完毕时,该牌子消失
【课内要点】
Animation如果忘记了回到第一册第一章温习一下,
今天我们主要将“Has an animation finished?”来做条件
格式如下:
物体:Animation ...... is over(通过“Has an animation finished?”选项得出)
动作
【例1】解决【课前挑战】
【分析】
首先,创建一个Active,调到宽200,长200,并且删去那个菱形,画一个长方形,并填充黄色。
首先写上第一段话。
然后在下面将这个Animation下面的FRAME1复制粘贴5份,并转入DirectObject界面,将Speed调到10,然后返回Frames界面。在Frame5写第二段话,复制到Frame9,同理一直到Frame13完成。
然后将该东西放到关卡中。
【答案1】
警告牌:Animation Stopped is over
警告牌:Destroy
【答案2】
警告牌: Animation Stopped is over
警告牌:set semi-transparency to 128
【例2】 制作一个小球静止不动,当他碰到Mario的时候放变大动画,然后小球消失,板栗仔出现。
(制作小球都会吧)
【分析】我们要在小球的Appearing这个Animation中制作一下变大动画,最后别忘了调速度,变的不要太快
【答案】
Collision between 小球 and Mario
Alterable Value A of 小球 <>0
小球:change animation to Appearing
小球:set alterable value A to 1
小球:Animation Appearing is over
CreateObject:Create 板栗 at (0,0) from 小球
小球:Destroy
2014年07月07日 06点07分 17
level 11
dodoufatch 楼主
OK!明天继续。今天完成
2014年07月07日 06点07分 18
level 11
dodoufatch 楼主
11- Flag(旗帜、标志,俗称开关)与Flag判定
Internal Flag(内部标志)为一种特殊的alterable value。他类似于Flash语言中的Boolean类,只有真假两个量。F2中的INTERNAL FLAG着附与物体上,并且只有on和off两种值,可以视作只有1和0的Alterable Value。
Flag的运用很广泛。比如当一些判定条件比较复杂,且有一组动作有时执行有时不执行时,就可以用Flag来控制是否执行。Flag的编号为从0开始的正整数。每个物体都有自己特有的FLAG,FLAG初始值为off。初始值也可以在Start of Frame中进行初始化设定。
下面是Flag语句:
(条件) 物体:is internal flag 旗帜编码 on?(或者off?)
执行动作
(动作)判定条件
物体:set internal flag 编码 on(或者off)(或者Toggle internal flag 编码)
TOGGLE FLAG是反转旗帜。一开始如果是on则off,off则on。(条件中没有Toggle语句)
我们通过一个例子来体会flag
【例1】在新的MFA里让小球做四边形轨迹的运动。必须用到flag
【分析】我们首先画一个四边形的BACKDROP(背景),然后插入四个active,设置为初始不可见,并将形状画为矩形。将四个矩形分别如下图放置法:
图3-13 红色为Active,蓝色为小球运动轨迹。此例为逆时针。
然后删去那个背景长方形,只剩4个ACTIVE以及一个小球。
通过控制四段代码的flag开关来执行代码。
(另外:flag的条件创建方法——点击物品——右键——Alterable Value选项——里面有个flag选项)
【答案】
1(条件)·小球:internal flag 1 is on
(动作)小球:set X position to X("BALL")+3
2(条件)小球:internal flag 2 is on
(动作)小球:set Y position to Y("BALL")+3
3(条件)·小球:internal flag 3 is on
(动作)小球:set X position to X("BALL")-3
4(条件)小球:internal flag 4 is on
(动作)小球:set Y position to Y("BALL")-3
5(条件)Collision between BALL and Active 1
(动作)小球:set internal flag 1 on
小球:set internal flag 2 off
小球:set internal flag 3 off
小球:set internal flag 4 off
6(条件)Collision between BALL and Active 2
(动作)小球:set internal flag 2 on
小球:set internal flag 1 off
小球:set internal flag 3 off
小球:set internal flag 4 off
后面的以此类推,将FLAG3和FLAG4控制好。
【后话】 其实,本题可以直接通过运动状态的改变、运动方向的改变来实现。那样会更加简洁!下一节我们就来研究这种方法。(晚上再发)
2014年07月10日 07点07分 19
level 11
dodoufatch 楼主
12- Activate 与Deactivate
【事件组的概念】
事件组是保存一组事件的,相当于文件夹。
如图3-14就是
我们打开事件组,发现里面有一些事件
如图3-15就是一个事件组打开后的样子。
我们可以先在空地右键——insert——A Group of event,就可以创建事件组。
打开事件组的属性,发现如下界面
图3-16
第一个为事件组名称,第二个为是否密码保护。第三个勾勾选项默认是选的,表示是否开始就执行。如果没打就是一开始不执行,事件组的标题显示为灰色。这种事件组是可以调用Activate与Deactivate的
【讲解】
Activate与DEACTIVATE的实质是INTRENAL FLAG的变形。也就是说,灰色标题的事件组在“internal flag”开的情况下才执行,否则不执行。而这两个动作则相当于将internalflag进行了开关。
Activate一个事件组表示启用该事件组。DEACTIVE则表示禁用。在禁用期间该事件组相当于不存在。
我们打开条件面板,点击第一个类似电脑的东西,右键选择Group of event里面的第一个,既可以创建一个条件。当一个被指定的事件组状态为启用中时,则条件成立,执行下面的动作。如果想要判定是否为禁用中,则只需NEGATE。
打开动作面板,在同样的地方能找到set activate与set deactivate。他们分别能把一个指定的事件组启用与禁用。
效果图如图3-17
(图3-17)
【应用】
在一些引擎中,关于怪物的事件组通常在Start of Frame中被激活,而当马里奥死去时,则禁用这些事件组,防止一些BUG的发生 。
而这种启用禁用事件组由于使用起来方便,因此应用广泛。(关于滚屏的设定大家可以自己去研究一下哦!看看怎样应用这些代码的)
2014年07月10日 10点07分 20
level 11
dodoufatch 楼主
13- PlayerControl(操作控制)(1)
上次由于那个原因,这个没发。这次直接进入正题。
PLAYERCONTROL的效果应用与KEYBOARDCONTROL大同小异,只不过按键可以随着玩家设定而改变,并不是固定的。
图3-18
在图3-18黑圈的位置可以设定按键。
其中BUTTON1BUTTON2等等的为PLAYERCONTROL效果中的fire 1 fire 2等等
打开条件面板,右键player1,选择Joysticks中的read joystick state
后面出现界面如图3-19
图3-19
我们发现这里有8个方向,实质键盘只有4个方向。当我们按下键盘上的对应的上下左右(这些上下左右键都可以设定,这里的上下左右指3-18中设定的上下左右)时,条件就会执行一次,然后等待下一次实现。而那个REPEAT WHILE....选项则是一旦实现则一直执行。这两者的区别,相信在KEYBOARD那一课中已经知道了吧。
Fire button 1、2、3、4分别为3-18中设定的4个特殊键。一般引擎中FIRE 1 为跳跃, FIRE 2 为加速。
2014年07月10日 10点07分 21
level 11
dodoufatch 楼主
出门三天,可能会延缓
(爪机码字累)但我仍旧会上线
2014年07月11日 01点07分 22
1 2 尾页