十一、程序设计
- 格式:doc
- 大小:7.18 MB
- 文档页数:36
十一、程序设计
1.故事板
在Alice中程序设计是将场景中的对象按剧情的要求动作起来,因此进行程序设计的第一步是熟悉并描述剧情,也就是对一个故事或一个游戏的描述,需要什么背景,有些什么角色或对象,剧情有哪些情节,在每个情节中这些对象有什么动作和行为等等都要描述清楚。第二步是要使用一种工具去描述剧情,在Alice中是釆用故事板(storyboard)这种工具来描述剧情,它为每一个情节设计了所需要的动作序列。在迪斯尼(Disney)等大的动画公司都是将大故事分成很多小故事,然后对毎个小故事来用故事板去描述一些场景和情节,设计对象的动作或行为。第三步是根据故事板来编写代码,以实现故事板所要求的情节动作,这也是通常所说的编程。最后一步是测试,看程序是否正常运行,是否达到原设计要求。故事板有图形式和文本式两种,动画师们爱用手绘图形来描述场景,附以文字说明对象动作,如描述雪地上有三个人,两人女雪人区在交谈,来了一个男雪人,向一女雪人眨眼,可用下面手绘图形来描述场景,灰色波纹表示雪地,远处有山作背景等。
而文本式故事板是一个用文字表达的任务列表,它概括故事的各个场景及完成某一任务的一些动作,同时还列出了写代码时应遵循的结构,在程序设计中一个程序的结构是指程序执行的顺序,一般是三种结构:顺序结构、选择结构和循环结构,程序中所有的代码都是按这三种结构组织的,文本式故事板不仅指出动作而且给出结构,这样根据它来写编码更为方便。下面以一实例来介绍用文本式故事板描述剧情,并根据它来写编码。
实例34:男雪人与女雪人
剧情是:在雪之歌音乐背景下,在冬天的雪地里有两个女雪人正在交谈,而旁边的男雪人试图吸引其中一个女雪人的注意,朝她叫了一声”Ahem”并向她眨了眨眼,女雪人转过身来脸红地看了看男雪人,她对见他没有兴趣,冷眼看了看他转身继续和如她的朋友交谈,他只好转身离她而去。
在这个故事中有三个雪人,一个男的二个女的,冬天有雪的场景,在故事的情节中涉及雪人的动作有:男雪人试图引起女雪人的注意,叫了一声,眨了眨眼;女雪人转过身,脸红,冷眼看了看他转身;男雪人转身离开。因此可以把剧情看作四个动作序列:(1)男雪人通过呼叫以引起女雪人注意。(2) 女雪人转过身时男雪人向她眨了眨眼。(3)女雪人脸红,冷眼看了看他转身。(4) 男雪人转身离开。
可以想象这个故事有这样三个场景:
(1)初始场景,场景响起背景音乐,看到雪地上有三个雪人,其中男雪人想约见带红帽的女雪人
(2)场景2:男雪人向女雪人说”Ahem”
(1)女雪人转身,男雪人向女雪人眨眼
对这三个场景可以设计出一个文本故事板去描述它
完成的而后两个动作则要求同时完成。因此故事板是给出了完成某一任务的动作序列,并规定了程序的结构,本例是给出程序的顺序结构。显然,这块故事板还只是描述了故事的一部分,还需把后半部分的情节补充进去,由于前后联系紧密,将它放在同一块故事板上。
下面就要将故事板的描述转换成程序代码,在Alice中程序就是完成某一任务的命令(动作)序列,而对象的命令即为对象的方法(methods),每个对象都有内置的方法,这可从该对象的方法列表中找到,如果没有对应该动作的方法,就要建立新的方法去实现它。编码主要是指方法的编码,如果涉及到交互动作,则要进行事件编码。
在方法编码前,首先要建立剧情要求的场景,即选择snow为背景,在场景中加入三个雪人(二女一男),调整他们的位置如上面初始场景所示的图形。
方法编码是在World.my first method方法编辑区内编辑,按故事板上的顺序,第一步是要求后面二项动作是依序执行,Alice提供了两种顺序结构的命令Do in order及Do togather,因此只要将Do in order拖入到编辑区内。
第二步是要求snowman转向snowwoman去看她,因此要点击对象树上snowman,在methods 列表中找到方法turn to face,该方法能满足要求。
第三步是snowman要向snowwoman打招呼,在方法列表中找到say,可用此方法向snowwoman 说Ahew。
第四步要求后面两个动作同时执行,因此要将Do togather拖入到编辑区内,并放在Do in order 之内
第六步要求snowwomam要转头,点击对象树中snowwomam左边的+号,让snowwomam的组成部件也显示出来,点击其中的head,就能从其方法列表看到跟头部动作有关的命令,找到并拖turn to face至Do Nothing处,并选择snowman,
第七步要求snowman眨眼,它要左右眼都要眨,而且是与第六步同时进行。点击对象树上snowman左边+号,先拖leftEye move至编辑区,选择up并设置0.04 meter,再拖leftEye move 至编辑区,选择down并设置0.04 meter,类似地对rightEye也拖二条move命令,分别选择up 私down并设置0.04 meter
上下眨眼的距离是需要经过多次试验才得令0.04这个数据较为合适,这是一种试错法(trial-and- error),即不断地试验、纠错、再试验,最终可获得理想的结果。
至此可去测试所编代码的正确,没有必要一定等整个程序都完成了才测试。按Play后发现snowman的左右眼既不向上也不向下,因而也就不能眨眼,这就是程序中通常所说的bug,分析其原因是因为要求move up和move down要同时进行,实际上就等于不动,因此只要把move up和move down放在Do in order之下,让它们依次执行就可以了。
另外还要给出眨眼的持续时间,通常在Do togather下同时执行动作的时间应该是相同的,如果眨眼时间为1 second,那么up和down各占0.5 second,为此点击move命令后面的more,设置duration为0.5 second。