高级指南:猴子趣事
此指导包含一个高级示例程序,帮助你全面理解Mama开发环境和语言。
内容
此指导中的主题包括:
- 移动摄影机,淡出,淡入
- 把程序代码分成模块
- 更多关于3D运动,移作和转向
- 更多关于指令的并行执行
- 定义事件
- 使用函数
布置舞台
我们必须首先把对象数插入到舞台中:
- 插入树木和植物。
- 插入电视,沙发和遥控器 - 从文件夹对象添加电视和遥控器,并从文件夹家具添加扶手椅。 按照上面的图片式样,把对象放好。
- 插入猴子 - 从文件夹动物添加2只猴子。 把第一只猴子放在电视右边,第二只放到电视左边,如上面图片所示。
- 插入角色 - 从文件夹字符_/小孩添加角色特雷弗和克里斯滕。 从字符_/宠物添加狗萨姆。
既然刚刚添加的最后一个角色只在动画运行时进入舞台,我们就把它放到左侧,摄像机视野之外。你可以通过变焦,拖住角色到左侧,然后恢复到原来的焦距来实现。 这是一种设置带有对象的舞台的常用技术,以帮助对象在视频播放时进入画面。 这和真实剧院很相似。 演员会在幕后等着,当表演时再进入舞台。
程序脚本
就像在话剧中一样,我们需要编写动画剧本。 我们将逐步完成:
- 黑色屏幕,显示介绍标题,渐渐出现。
- 摄像机从树梢开始,然后慢慢下降到原来的舞台高度。
- 开始的场景: 两只树上的猴子,树枝上两只猴子之间的电视机,地面的控制器和扶手椅上,扶手椅是倒下的。
- 电视右边的猴子(猴子1)尖叫。
- 特雷弗和萨姆(从左边)进入舞台。
- 特雷弗看了一下遥控器,然后又看了看尖叫的猴子,最后又看了一下遥控器- 他知道猴子想要遥控器。
- 特雷弗用他的脚把遥控器弹给猴子。
- 猴子停止了尖叫,特雷弗和萨姆(从右边)离开舞台。
- 猴子2在扶手椅上跳跃,开始看电视。
- 猴子1把遥控器扔到了猴子2的头上。
- monkey2开始尖叫并逃跑了(从左边离开舞台)。
- 克里斯滕(从左边)进入舞台。
- 猴子1又开始尖叫。
- 相机上升到树梢。
- 淡出,结束标题。
设置程序为方法
我们可以看到,脚本太长以至于不能写在world主方法中。 把它分成方法将简化程序代码的编写和维护,也可以简化更改或添加新的功能。 方法:
- 世界程序.主要_方法() - 程序的主要方法,调用其它方法
- 介绍() - 淡出,显示开始的标题和淡入。然后把摄像机取景从树梢向下移动到地面
- 猴子1尖叫 - 我们并不需要定义方法。 在猴子对象中已经有一个名为尖叫的方法
- 世界程序.特雷弗_进入() - 特雷弗和萨姆进入第二阶段
- 世界程序.特雷弗_见到_猴子() - 特雷弗见到猴子
- 特雷弗.转换_视线() - 特雷弗在猴子和遥控器之间转换视线
- 特雷弗.弹跳() - 特雷弗把遥控器弹到猴子的手中
- 世界程序.特雷弗_离开()- 特雷弗和萨姆离开舞台
- 世界程序.猴子2_跳_上_扶手椅() - 猴子2在扶手椅上跳跃
- 世界程序.猴子_扔出_电视_遥控器() - 猴子1把遥控器扔在猴子2的头上
- 世界程序.猴子2_逃走() - 猴子2逃跑
- 世界程序.克里斯滕_进入() - 克里斯滕进入舞台
- 世界程序.结束() - 移动摄像机到树梢,淡出,显示标题结束
以上两种方法,大多没有具体到某个特定的对象,但工作在几个对象,因此应被视为是在世界对象的方法定义。 这两个例外是
特雷弗.
转换_视线()和
特雷弗.
弹跳()。 此外,我们可能需要确定该方案的写作过程中更多的方法。 在本教程的其余部分,我们将省略的简单方法
世界程序。
编写方法
现在,我们已经准备好编写world的方法。 提醒: 为了在
世界程序对象中创建一个方法,选择
object tree中的“world”,然后在细节区域选择
创建新的方法。 打开的对话框提供了方法的名称。
方法说明:
介绍()
- 淡出 - 使用摄像机的标准方法淡出到黑色 - 拖住方法到当前方法的开始处
- 显示开始标题 - 使用摄像机的标准方法显示标题 - 以介绍标题的一个变量提供出来,并把时长设为2秒
- 向上移动摄像机 - 调用摄像机的移动, 其中变量 向上 及 5.5米
- 淡入 - 使用摄像机的从黑色淡出,而且时长=2
- 向下移动摄像机- 再次使用摄像机的移动,其中变量向下而且5.5米, 时长=5.5秒
点击此处获得方法代码 特雷弗_进入()
- 首先,我们告诉特雷弗步行2米进入舞台,使他被看到 - 使用方法特雷弗.步行。 注意: 此方法对某些角色(位于对象图库的文件夹字符_)有效。
- 我们想对萨姆做同样的操作,但是没有步行方法! 根据方法代码,在萨姆对象中创建名为萨姆的方法。 然后调用变量为2米的此方法。 注意你必须为类型为数字的方法创建一个参数。
- 当特雷弗和萨姆步行时:
- 用猴子1的方法尖叫使它尖叫。
- 使用带有变量特雷弗的标准方法转向,让两只猴子看特雷弗。
- 步行结束,特雷弗注意到两只猴子 - 用他的方法转向让他的头转向尖叫的猴子。而且,使用变量为猴子1的方法观看让他的头转向尖叫的猴子。
- sam 很兴奋 - 为了表达情绪,调用他的方法兴奋,大叫和变量为2的摇_尾巴。
提示: 制作两个
一起执行模块,其中第一个包含指令1-4,第二个包含指令3-7。 注意,有些方法被重复了,这对创造连续动画很重要。
点击此处获得方法代码 特雷弗_见到_猴子()
创建两个
一起执行模块。 第一个包括:
- 特雷弗前进1.5米
- 猴子1尖叫
- 两只猴子(再次)转向特雷弗
- 让萨姆转向尖叫的猴子
- 和之前一样,让萨姆看起来很兴奋
第二个:
点击此处获得方法代码 特雷弗.转换_视线()
这是一个简单的方法,但是特别的是,它接受两个变量: 两个要被看的对象。 相比显式的使用方法中的对象,这是一个更好的方案因为它更一般,而且将来可以被其他对象使用(重用)。
- 创建两个变量
- 让特雷弗看第一个对象: 调用特雷弗.观看,并且当变量选择表达式,然后选择第一个方法变量。
- 拖住变量为1秒的指令等待。
- 和以前一样,让特雷弗看第二个对象。
- 再次添加变量为1秒的指令等待。
- 让特雷弗看第一个对象。
点击此处获得方法代码 特雷弗.弹跳()
这个方法也定义在
特雷弗对象上,并且也接受变量: 弹跳的对象 -
什么(遥控器),目标对象 -
谁(猴子1的左手),和整个目标体 -
睡_身体。 我们按照如下方法制作动画:
特雷弗走向
什么对象,然后三件事情同时发生:
特雷弗突然蹲下,
什么对象移动到
谁对象,并且
睡_身体向前倾斜抓住
什么对象。 然后
特雷弗站起来,
睡_身体向后靠。
- 创建上述变量
- 让特雷弗看什么
- 使用特雷弗的方法什么让特雷弗走向步行。 作为一个临时总量参数,设为1米。 我们想要做的是让特雷弗走向什么对象,我们该如何实现呢?
- 提示: 选择对象树中的特雷弗和细节区域中的函数_。 找到函数距离至,并拖住它放到对走向调用的数量参数中。 从弹出菜单中选择表达式然后选择什么。
- 点击更多...选择空间关系,然后选择上边。 这个参数决定了特雷弗应该从空间位置的角度看,如何得到什么对象。
- 现在并行执行:
- 让特雷弗跪下 - 找到合适的方法 - 并给它一个膝盖变量和时长1/4秒。
- 移动什么到谁 - 从定义中拖放什么,从弹出菜单中选择移向并给出变量谁。 使用对象谁中的函数距离至设置参数总量。
- 现在我们需要做一些修正: 从刚定制的总量中选择更多..., 然后选择数学。 选择减法操作。 减法操作设置为0.07米。
- 为了让猴子1前倾,调用睡_身体。 转动参数向前且时长0.25秒。
- 让特雷弗再看一次谁,因为它已经移动了。
- 现在把猴子放回初始位置: 因为我们想让遥控器一直在他手里,所以我们需要把它和谁“粘”在一起。 标准方法设置_交通工具可以完成这些。
- 调用什么.设置_交通工具并把谁作为一个变量传递给他。 现在,什么就和谁“粘”在了一起,而且可以随着它移动和转向。
- 使用转动方法让睡_身体回到初始位置。
- 现在调用什么.设置_交通工具,其中世界程序对象是一个变量 - 这个方法可以使它和谁分离。
- 调用特雷弗.站起来
点击此处获得方法代码 特雷弗_离开()
在这个简单的方法中
特雷弗和
萨姆离开舞台。 在
一起执行中执行:
- 调用特雷弗的方法走出画面 - 这会使它离开
- 让萨姆转向特雷弗
- 让萨姆走7米
点击此处获得方法代码 猴子2_跳_上_扶手椅()和跳_向
我们现在想让猴子2跳过扶手椅,但是他没有这样一个方法。 他确实有一个名为
猴子_跳的方法,但是它只是做原地跳。 在下一部分中,我们将制作这个方法的副本并编辑它以便满足我们的需求。 所以首先去下一部分完成方法
跳_向的创建。
- 添加等待指令,时长半秒。
- 从猴子2中调用跳_向并把armchair作为一个变量传递给它。
- 添加等待指令,时长1/4秒。
- 让猴子2转向电视机。
- 让猴子2看电视机:因为猴子2没有观看方法,所以调用头部的指向方法。 为了完成这些,首先选择对象树中的猴子2,然后选择它的子树。 找到猴子的头,拖放到编辑区域。 从弹出菜单中选择指向,其中一个参数是电视机。
- 调用猴子2的猴子_面部方法以便猴子朝向电视机。
点击这里获取方法的代码 猴子2.跳_向()
如前所述,我们需要为猴子编写
跳_向方法,以便可以跳向给定的目标:
- 当选定对象树中的猴子2,右击方法跳跃并从弹出菜单中选择复制。 右击刚创建的方法,并改名为“跳_向”。
- 让我们检查新的方法代码:
- 方法包含四个一起执行模块: 第一个是猴子倾斜,第二个是猴子伸直腿站起来,第三个是猴子向上移动时回倾一些,最后一个是猴子回到初始位置。
- 创建名为什么类型为物件的参数。
- 让猴子转向目标,什么。
- 缩减所有指令中方法的时长到0.25秒。
- 在第三个模块中,当回倾向上移动时,调用带有参数什么的方法移向。 和之前对特雷弗的操作一样,设置总量参数。弹跳0.07米。 设置时长为0.75秒。
点击这里获取方法的代码 猴子_扔出_电视_遥控器
这个方法实现了猴子1把遥控器扔到猴子2头上的过程。 扔的动包括猴子1的左臂向后转,然后进一步把他的前臂向后转,接着扔出遥控器的同时手快速向前带出。
- 使用猴子1的设置_交通工具方法把遥控器和猴子1的左手粘起来。
- 并行执行: 左手在0.5秒内向后转0.12圈,并使用相同的变量移动他的前臂。
- 把遥控器从猴子1的左手分离出来。
- 并行执行: 使用方法移向把猴子1的左手在0.25秒内向前转动0.12圈,使用函数距离至移动遥控器距猴子2的头部0.3米的距离。
- 并行执行: 猴子2的头部向后移动0.12圈,让它尖叫,并移动遥控器到有电视机的树旁的花旁边(如果没有花,添加一个)。
点击这里获取方法的代码 猴子2_逃走
在这个方法中猴子2逃到舞台左侧。
- 转动猴子2的面部朝向舞台左侧。 你可以通过在舞台左侧放置假花,然后使猴子朝向它来完成。
- 调用猴子2中刚刚创建的有花作为目标变量的方法。
- 如果到左侧距离太大,你可以在中间放置另外一朵花,可以作为中间步骤让猴子跳过去。
点击这里获取方法的代码 克里斯滕_进入
在这个方法中
克里斯滕进入舞台,而且猴子1又开始尖叫。 按照之前
特雷弗_进入的方式构建这个方法的代码。
点击这里获取方法的代码 结束
- 向上移动摄像机(6米)到树梢
- 淡出
- 播放标题,例如“就这样持续下去:)”
- 播放标题“剧终”
点击这里获取方法的代码