By Deborah Nelson Duke University Professor Susan Rodger July 13, 2008 将对象联合起来:使用列表 By Deborah Nelson Duke University Professor Susan Rodger July 13, 2008
概况 这个教程将会叫你使用列表.列表是用来存放一些对象的地方. 使用列表,你可以让多个对象同时做相同的动作,而不必分别去操作他们 . 你也可以让他们依次做同一个动作. 我们将会使用一个列表使得多个忍者同时完成相同的动作,然后让他们依次(按照时间顺序)完成这个动作.
创建世界 打开一个新的世界,可以使用任意模版. 保存. 当你打开文件之后,点击一个绿色的名为“Add Object”的按钮(位于屏幕中间). 点击more controls 按钮. 点击 drop a dummy at the camera. 将dummy重命名为 originalPosition. 点击 Done返回原来界面.
增加对象 进入gallery 然后进入People 文件夹. 在你的世界中增加四个evilNinja 对象。 增加另外两个人物到你的世界中. 我添加了scientist_man 和 scientist_woman(位于 Web Gallery).
第一部分:创建列表 我们会使用列表使四个ninjas同时上下跳跃然后踢和旋转. 单击左侧对象列表中的world,然后单击下面的properties. 点击create new variable按钮. 命名为characters. 看下一张幻灯片的截图.
创建列表(续1) 在弹出的灰框中, 选择object 作为变量类型. 然后勾选make a List选项. 点击new item 按钮四次. 对于item0, 点击<None> 在下拉框中选择evilNinja. 对于 item1, 选择 evilNinja2. 对于 item2, 选择 evilNinja3. 对于 item3, 选择 evilNinja4. 见下一张的截图.
创建列表(续2) 现在,在properties选项的顶端出现了一个characters列表.
第二部分: 添加方法 拖动For all together 到 world.my first method.
添加方法(续1) 在出现的下拉菜单中, 选择expressions, 然后选择列world.characters. For all together 表示列表中所有的项目都会同时做出我们添加的动作.
步骤一: 对于所有的对象 点击For all together 声明后面的item_from_characters 按钮,按住你的鼠标向下拖动至写着Do nothing的地方.
对于所有的对象(续1) 在出现的下拉菜单中选择turn to face, 然后选择camera. 点击 more… ,将duration 调整为 0.25 seconds. 如上步骤拖放 item_from_characters 按钮两次,第一次选择move up 1 meter,另一个move down 1 meter。都将duration设置为0.25 seconds. 运行你的世界. 你的方法如下图所示:
步骤二: 依次完成动作 现在拖动For all in order 至For all together下面, 选择expressions, 然后 world.characters.
依次完成动作(续 1) For all in order (依次完成动作)表示忍者们将会依次完成我们添加的动作(顺序依照我们添加到列表的顺序)。 我们希望忍者们可以逐个扬起手臂并且旋转。 然而item_from_characters 是一个整体, 所以我们不能让item_from_characters 扬起它的左臂. 我们需要在方法里面使用累级别设置来操作对象的一部分。
依次完成动作(续 2) 首先, 如同之前的步骤,拖动 item_from_characters 到For all in order里 ,选择turn backward ¼ revolution. 将duration 设置为.25 seconds。 单击evilNinja 在对象列表里. 选择functions选项 向下找到evilNinja’s part named key。
Step 3: Object part named key 拖动这个方法到item_from_character的顶部在For all in order 指令中。
Object part named key (cont 1) 对象部分命名键(续1) 在对象树, 点击evilNinja旁边的+,就会看到名为leftLeg的子树。 2)在turn backward旁,点击框,然后输入leftLeg,跟它在对象树的大写部分与间距相同——没有间距,和第二个L必须大写。 按下一张幻灯片的截图的指示操作。
Object part named key (cont 3) 对象部分命名键(续3)
For all in order (cont 1) 拖动位于evilNinja顶部的item_from_characters 到leftLeg对话框里。 再次拖动 item_from_characters 到For all in order 中,在 the leftLeg的下一个 指令, 然后选择turn, 在继续向右的一个对话框中, 输入1 revolution. 设置duration 为0.25 seconds.
For all in order (cont 2) 然后 拖动另一个item_from_characters 到For all in order中, 选择turn, 然后点击forward,然后输入0.25 revolution. 设置duration为0.25 seconds. 目前你的 For all in order 代码应该如图示:
For all in order (cont 3) 我们需要最后做一个只有leftlag的说明 将evilNinja’s part named key函数 拖到item_from_characters 那一行,然后再次输入leftLeg 在part named key中,将item_from_characters拖到evilNinja顶部。
The complete method 完成方法 下面是完成方法,记得评论你的代码
Play your world now 现在玩你的世界吧
Step 4: Objects with different parts 步骤四:对象的不同部位 到目前为止,我们的列表只有evilNinjas。添加两个其它对象到列表中: 1)在对象树中点击world 2)点击properties 键进入对话框,然后点击characters旁边的框。 3)点击new item,然后选择你想添加的对象。 按下一张幻灯片的截图的指示操作
注意! 玩你的世界 如果你没有按照示范使用相同的对象,你可能会得到一个错误高亮的部分命名函数。 添加scientist-man和scientist-woman到列表中只能用作他们的身体部位的的一个标签,因为他们都有leftLeg。 如果你的角色并没有一个名叫leftLeg部分,你会得到一个错误,因为世界正在搜索一个不存在的leftLeg进行移动。
Fixing the error For example, I’ve added the Samurai (from the Web gallery in the People folder). 比如,我已经添加了Samurai When I add him to my list and play the world, I get the following error: 当我把他添加到我的列表,玩世界时,我得到了错误提示。 This is because the Samurai does not have a part named leftLeg. 这是因为Samurai没有leftLeg.
Fixing the error (cont 1) 纠正错误(续一) 在对象树中,点击Samurai旁边的+ 双击Lleg,重命名为leftLeg 现在玩你的世界 成功!
How to remove an object 如何移除一个对象 从列表中删除一个对象: 在对象树中点击world 2)进入properties 菜单,然后点击characters旁边的框 按下一张幻灯片的截图的指示操作。
Deleting an object from your list 从列表中删除一个对象 3) 拖动你想删除的条目到垃圾桶中。 对象仍然存在于你的世界,但是它将从你的列表中移除。
摘要 列表适用于让多元人物执行相同的系列动作。 For all together意味着列表中的所有对象同时执行任务 For all in order意味着列表中的所有对象一个接着一个执行任务 使用part named key函数来生成对象移动的附带部分,但是但是确保所有的字符有相同的部分,标记相同的方式。 警告:不要添加太多的对象到你的列表中,因为这样会使大大地降低你的世界运转速度