文本式故事板游戏程序设计_第1页
文本式故事板游戏程序设计_第2页
文本式故事板游戏程序设计_第3页
文本式故事板游戏程序设计_第4页
文本式故事板游戏程序设计_第5页
已阅读5页,还剩47页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

.PAGE..程序设计故事板在Alice中程序设计是将场景中的对象按剧情的要求动作起来,因此进行程序设计的第一步是熟悉并描述剧情,也就是对一个故事或一个游戏的描述,需要什么背景,有些什么角色或对象,剧情有哪些情节,在每个情节中这些对象有什么动作和行为等等都要描述清楚。第二步是要使用一种工具去描述剧情,在Alice中是釆用故事板(storyboard)这种工具来描述剧情,它为每一个情节设计了所需要的动作序列。在迪斯尼(Disney)等大的动画公司都是将大故事分成很多小故事,然后对毎个小故事来用故事板去描述一些场景和情节,设计对象的动作或行为。第三步是根据故事板来编写代码,以实现故事板所要求的情节动作,这也是通常所说的编程。最后一步是测试,看程序是否正常运行,是否达到原设计要求。故事板有图形式和文本式两种,动画师们爱用手绘图形来描述场景,附以文字说明对象动作,如描述雪地上有三个人,两人女雪人区在交谈,来了一个男雪人,向一女雪人眨眼,可用下面手绘图形来描述场景,灰色波纹表示雪地,远处有山作背景等。而文本式故事板是一个用文字表达的任务列表,它概括故事的各个场景及完成某一任务的一些动作,同时还列出了写代码时应遵循的结构,在程序设计中一个程序的结构是指程序执行的顺序,一般是三种结构:顺序结构、选择结构和循环结构,程序中所有的代码都是按这三种结构组织的,文本式故事板不仅指出动作而且给出结构,这样根据它来写编码更为方便。下面以一实例来介绍用文本式故事板描述剧情,并根据它来写编码。实例34:男雪人与女雪人剧情是:在雪之歌音乐背景下,在冬天的雪地里有两个女雪人正在交谈,而旁边的男雪人试图吸引其中一个女雪人的注意,朝她叫了一声”Ahem”并向她眨了眨眼,女雪人转过身来脸红地看了看男雪人,她对见他没有兴趣,冷眼看了看他转身继续和如她的朋友交谈,他只好转身离她而去。在这个故事中有三个雪人,一个男的二个女的,冬天有雪的场景,在故事的情节中涉及雪人的动作有:男雪人试图引起女雪人的注意,叫了一声,眨了眨眼;女雪人转过身,脸红,冷眼看了看他转身;男雪人转身离开。因此可以把剧情看作四个动作序列:(1)男雪人通过呼叫以引起女雪人注意。(2)女雪人转过身时男雪人向她眨了眨眼。(3)女雪人脸红,冷眼看了看他转身。(4)男雪人转身离开。可以想象这个故事有这样三个场景:(1)初始场景,场景响起背景音乐,看到雪地上有三个雪人,其中男雪人想约见带红帽的女雪人(2)场景2:男雪人向女雪人说”Ahem”女雪人转身,男雪人向女雪人眨眼对这三个场景可以设计出一个文本故事板去描述它DothefollowingstepsinordersnowmanlookatthesnowwomansnowmancallsouttothesnowwomanDothefollowingstepstogethersnowmanblinkshiseyesatthesnowwomansnowwomanturnstoseewhoiscallingher.在这故事板上给出了雪人要完成的动作以及动作的顺序关系,男雪人前二个动作是顺序完成的而后两个动作则要求同时完成。因此故事板是给出了完成某一任务的动作序列,并规定了程序的结构,本例是给出程序的顺序结构。显然,这块故事板还只是描述了故事的一部分,还需把后半部分的情节补充进去,由于前后联系紧密,将它放在同一块故事板上。DoinordersnowmanlooksatthesnowwomansnowmancallsouttothesnowwomanDotogethersnowmanblinkshiseyesatthesnowwomansnowwomanturnstoseewhoiscallingher.Dotogethersnowwomanblushes(herheadturnsred)snowwomanturnsbacktoherfriendssnowwoman’sfaceturnsbacktowhitesnowmanturnsaway(givesup)下面就要将故事板的描述转换成程序代码,在Alice中程序就是完成某一任务的命令(动作)序列,而对象的命令即为对象的方法(methods),每个对象都有内置的方法,这可从该对象的方法列表中找到,如果没有对应该动作的方法,就要建立新的方法去实现它。编码主要是指方法的编码,如果涉及到交互动作,则要进行事件编码。在方法编码前,首先要建立剧情要求的场景,即选择snow为背景,在场景中加入三个雪人(二女一男),调整他们的位置如上面初始场景所示的图形。方法编码是在World.myfirstmethod方法编辑区内编辑,按故事板上的顺序,第一步是要求后面二项动作是依序执行,Alice提供了两种顺序结构的命令Doinorder及Dotogather,因此只要将Doinorder拖入到编辑区内。第二步是要求snowman转向snowwoman去看她,因此要点击对象树上snowman,在methods列表中找到方法turntoface,该方法能满足要求。第三步是snowman要向snowwoman打招呼,在方法列表中找到say,可用此方法向snowwoman说Ahew。第四步要求后面两个动作同时执行,因此要将Dotogather拖入到编辑区内,并放在Doinorder之内第六步要求snowwomam要转头,点击对象树中snowwomam左边的+号,让snowwomam的组成部件也显示出来,点击其中的head,就能从其方法列表看到跟头部动作有关的命令,找到并拖turntoface至DoNothing处,并选择snowman,第七步要求snowman眨眼,它要左右眼都要眨,而且是与第六步同时进行。点击对象树上snowman左边+号,先拖leftEyemove至编辑区,选择up并设置0.04meter,再拖leftEyemove至编辑区,选择down并设置0.04meter,类似地对rightEye也拖二条move命令,分别选择up私down并设置0.04meter上下眨眼的距离是需要经过多次试验才得令0.04这个数据较为合适,这是一种试错法(trial-and-error),即不断地试验、纠错、再试验,最终可获得理想的结果。至此可去测试所编代码的正确,没有必要一定等整个程序都完成了才测试。按Play后发现snowman的左右眼既不向上也不向下,因而也就不能眨眼,这就是程序中通常所说的bug,分析其原因是因为要求moveup和movedown要同时进行,实际上就等于不动,因此只要把moveup和movedown放在Doinorder之下,让它们依次执行就可以了。另外还要给出眨眼的持续时间,通常在Dotogather下同时执行动作的时间应该是相同的,如果眨眼时间为1second,那么up和down各占0.5second,为此点击move命令后面的more,设置duration为0.5second。第八、九、十步是关于snowwomam的三个动作,首是脸红,要改变snowwomam的脸色,要用到snowwomam的属性,先拖入Dotogather到编辑区,使八九步同时进行。先点击对象树上snowwomam左边的+号,对出现的扩展项点击head,在属性列表中拖color至Dotogather下面并选择red第九步是转回头面向snowwomam2,因此要它snowwomam.head的方法列表中将turntoface拖入其后,并选择snowwomam2。第十步是snowwomam脸色变回白色,显然它不能放在Dotogather之下,而第十步是snowman失望而离开,这里用他的头转向前且整个人转向右来表示。程序编完后应为程序的某些部分写上注解,如说明要完成什么动作等,便于程序阅读者理解。2.一些实例实例36青蛙跳游戏。水池表上飘浮着五个睡莲叶子,它们在水靣上不规则移动,要求青蛙从一个睡莲叶子跳到另一个睡莲叶子直至对岸,如果青蛙掉入水中游戏结朿,如果青蛙到达对岸的红圈则嬴。(1).先从/~veerasam/alice_old/中下载文件名frog_game_setup.a2w,并存入能找到的文件系统中。打开Alice2.3,点击File及Openworld,找到frog_game_setup.a2w,输入后点击Open就有下靣的初始场景,其中5个黄圈表示睡莲叶子,它们将左右两个方向随机移动,绿色圈表示开始star,红色圈表示结朿finish,青蛙初始位置在绿色圈中,兰色方框表示水池pool,白色是方形边框square。设计用up键控制青蛙向前跳,当睡莲叶子靠近青蛙时,就用rightl和left键使青蛙迅速右或左移开一点,当青蛙跳上睡莲叶子时,青蛙和它一起移动,直到青蛙再次跳起。当青蛙跳至红圈要表示取得胜利,而青蛙掉入水中则表示失败。(2).先建立一个事件,当按键盘中任何一键时,青蛙向前跳0.7米。点击createnewevent,选择Whenthemouseisclickedonsomething。再将对象树中frog拖至do后靣,选择move,forward,other,打入0.7。(3).为了使5个黄圈能同时左右移动,先建立一个list。点击对象树根world后再点击worlddetails中的createnewveriable,在出现的对话框中打入list名circles,选择Type为Object,并在makealist前打勾,在item0至item4中分别打入circle,circle2,circle3,circle4,circle5。将Foralltogether拖入方法编辑区内,选择expressionss,world.circles为了验证circle向右运动,可右击对象树中circle,选择methods,move,right,0.5meter,场景中circle向右移动了0.5米,因此可以在方法编辑区内编写该条命令。点击Undo,circle回到原位。将item_from-circles拖至下一行并选择move,right,1meter,右击该命令行,选择makecopy,则将该行复制到下一行,同时将right攺为left,此时按Play可看到5个黄圈同时右移1米后又移回来。v下靣将移动距离1米改为pool的宽度。点击对象树上的pool,将其函数列表中width拖至编辑区,将它替代两命令行中的1meter,此时按Play可看到5个黄圈同时右移至边界,但畧为超过一点,需要再进一步调整距离。点击两命令行中的width后靣三角形,选择math,poolwidth-,0.5,再按Play,就能保证在水池内移动。再点击对象树中circle,将其函数列表中width拖至0.5,按Play后就能保证在水池内移动。(4).拖入loop至两命令行前,使两条命令无限循环执行,为了使5个黄圈随机移动,点击两命令行中的more,选择durationn,并暂时选择1second,然后点击对象树中world,将其函数列表中的randomnumber拖至编辑区,将它替代两命令行中的1second,按Play可看到5个黄圈快速移动,为了减慢运动速度,再点击在其more后的三角形,选择minimum,5,此时再按Play,就能看到5个黄圈在水池内沿左右方向随机运动,同时点击mouse时青蛙会前进0.7米。(5).下靣要编辑frog_jump的程序,当它每次跳入黄圈直至红圈就取得胜利,只要有一次未跳进黄圈就算失败。在world下点击createnewmethod,命名为frog_jump,拖入frogmove至frog_jump方法编辑区,并选择forward,other,打入0.7meter,而将细节区的frog_jump移至将事件区,代替nothing。为了比较frog与circle的接近程度,先对圈编号定义为一变量,在world下点击createnewvariable,命名此变啻为circleNumble,并选择Type为Numble,因从下至上的黄圈编号分别为0,1,2,3,4,而红圈编号为5,改value值1为-1,将circleNumble-1拖入frogmove命令行之下,选择incrementworldcircleNumbleby1,为了检查frog是否在圈内,拖入If/Else至两命令行之下,点击true后有If/Else语句,再点击对象树上frog,在其函数列表中拖iswithin函数到If后靣并选择1meter,circle,再从world的属性表中将变量circles拖入并代替circle,选择ithitemfromlist,expressions,world,circleNumber。在Else后靣拖入frogmove命令,选择down,2meters。再拖入frogsay命令,打入Donotgiveup!Pleasetryagainandsaveme!!。再将对象树上frog拖入到If条件成立时要执行的命令行,选择frogsetvehicleto及circle,再从world的属性表中将变量circles拖入并代替circle,选择ithitemfromlist,expressions,world,circleNumber。当play时可能黄圈移动过快,可点编辑区中world.myfirstmethod,将其二命令行中minimum后靣的数字由5改为6。为了检查是否跳到红圈,回到frog_jump方法编辑区,将If/Else拖入至第三命令行,选择true后出现If/Else语句,将world属性列表中的world.circleNumber拖入至If后靣并选择5,然后将对象树上frog拖入下一行,选择moveto,finish,拖入frog,选择turn,right,0.5revolutions,再在其后拖入frog并选择say,打入Thankyou!Thankyou!Thankyou!Youarethebest!再拖frog到frogmovedown命令前一行,并选择playsound,splash,再在这行命令前拖入Dotogether,使得playsound,movedown和say三条命令同时执行。将后靣的If/Else语句作为第一个If/Else中Else的执行语句,再将frog拖入到frogmovetofinish命令行前,并选择frogsetvehicleto,finish。Frog_jump的完整程序如下,按Play就可以玩Frog_jump游戏了。实例37射击游戏FPS(1).选择Glass为背景,点击Addobject,在本地库中搜索左轮手枪revolver,并将它加入到景中,调整它的大小并置于屏幕的右下角,点击DONE转到代码编辑界靣。(2)首先编写射击的新方法:它要完成下述几个动作,扣动板机、击锤击打、枪声、枪口冒烟、转轮旋转。在对象树上点击revolver,在其细节表中点击createnewmethod,打入方法名shoot,进入shoot代码编辑区。拖入Doinorder,为了使击锤打开,点击对象树上revolver左边的+号,出现手枪三个部件,点击其中的hammer,在其方法列表中拖turn至代码编辑区,选择backward,0.1,abruptly。然后是板机扣动,点击对象树上trigger,在其方法列表中拖turn至代码编辑区,选择forward,0.1,abruptly。拖入wait并输入0.1秒,此时击锤击打,因此再拖入hammer的turn并选择forward,0.1。下靣要求发出枪声和枪口冒烟,可从网上下载枪声声音文件qkWUuxTTB1gj.128.mp3,并存放在桌靣上,点击菜单栏上的File,再点击import,将桌靣上的qkWUuxTTB1gj.128.mp3输入到系统中。点击对象树上world,在其属性列表中找到Sound,点击其左边的+号,将该声音文件拖至代码编辑区,这样就有产生枪声的Playsound命令行。为了实现枪口冒烟,需要从本地库中选择烟加到场景中,点击Addobject,在本地库搜索smokeAnimation,并将冒烟加入到场景中,调整它的大小且置于枪口前,按DONE返回代码编辑界靣。点击对象树上smokeAnimation,在其properties列表中找到isShowing属性,设置其值为false,即不射击时不显示冒烟,而要冒烟时只要将该属性值改为ture。因此将该属性拖至编辑区并设其值为ture就能执行冒烟的动作。接着要求烟左漂移一点后消失,转轮旋转,最后是板机位置复原。按上述要求,拖入smokeAnimation的move,选择leftt,0.5;拖入barrel时roll,选择right,0.25,拖入wait选0.25秒后,拖trigger的turn,选择backward,0.1,最后点击对象树上smokeAnimation,拖入properties列表中isShowing属性,设置其值为false。至此完成了射击一次的编码。(4)发射一组飞碟的新方法。它要求从屏幕的左上方向右边依次发射一组飞碟,先点击Addobject,在本地库中拖入circle(飞碟)对象至场景,并更名为flyDisk,将它拖至屏幕的左方,再在场景中加入两标志杆sign1和sign2,将它们分别置于左右两边,其中sign1与flyDisk同一位置,这样可以使flyDisk飞向sign2,同时又可很快地回到原来位置,准备下次发射。然后再将sign1和sign2移至屏幕外,设置完后点击DONE回到方法编辑界靣。首先要为flyDisk建立一个新方法,命名为diskFly。为了飞碟能以不同时间间隔发射,需要引入一个随机变量,在flyDisk的属性列表中点击createnewvariable,命名变量名为randomTime,选择Type为number。从在flyDisk的方法列表中拖moveto至diskFly方法编辑区,选择sign1;拖入loop并选择10次,使得后靣编写的命令都在loop之下。将flyDisk的moveto拖入并选择sign2及duration为5seconds,拖入Wait暂设值为1,拖入变量randomTime代替1,在world的函数列表中拖randomnumber至randomTime处,点击randomnumber后靣more,选择minimum,0,再点击more,选择maximum,10,这就规定了randomTime取值范围为0至10;再次点击对象树上flyDisk,将方法列表中moveto拖入方法编辑区,选择sign1,将deration设为0,使flyDisk很快又回到原来位置。将事件区的Whentheworldstarstsdo后靣改为flyDisk.diskFly,按Play可看演示结果。(5)显示射击结果记分。为了在屏幕上显示记分,点击Addobject,在本地库中的最右边找到create3Dtext,点击它并打入score:0,同时将对象树上的对象3Dtext重新命名为score。调整score:0的大小并置于屏幕的上方。点击DONE回到代码编辑界靣。设每击中一次加1分,为了显示击中后所得分数,要编制显示出结果记分的代码。点击对象树上score,右其方法列表中点击createnewmethod,命名为incrementScore,同时在其属性列表中点击createnewvariable,命名为value,选择Type为number,设value值为0,将变量value拖入incrementScore方法编辑区,选择incrementscore.valueby1,再从其属性列表中拖text=score:0,点击对象树上world并将函数列表中ajoinwithb拖入,其中a和b圴为score:,再拖入函数列表中的whatasastring至后一个score:处,选择score及value。这个射击飞碟的子程序已编完,留给读者去编写主程序,首先要求按Play20秒以后才发射飞碟并进入发射循环以后,共循环10次,每次以随机数时间间隔自动发射飞碟,毎发射一次枪射击一次,利用键盘左右键控制枪的左右移动,用space键控制发射,屏幕初始记分为00分,检测射击结果,每击中一个,飞碟粉碎,屏幕显示为原分数加10,等待20秒准备下一次发射,循环10次后屏幕提示游戏结朿并给出得分。实例38:建造模拟太阳系运行的动画,需要完成三项工作:建造星球、给出光源、星球运动1.建造星球:1)打开Alice2.3,选择space作背景,点击Addobjects,在本地库中选择文件夹shapes,从中点击SphereHighPoly,将它加入到场景中,此时在屏幕上看到有一半埋在地下的球为了地靣从场景中移去,点击对象树中ground,从它的细节表中点击properties,从其列表中选择isShowing,点击它后将true改为false,此时场景中的地靣消失,再利用控制相机的向下兰色箭头将球升到屏幕中央为了保持这个视角看球,需要保存这一相机位置,因此需要设置dummycamera,点击morecontrols后再点击dropdummyatcamera,此时对象树上将出现dummyObjects,按Done。2)将白色球贴上太阳纹理图。从google中搜索JHTPlanetaryPixelEmporium,下载相应星球的纹理图。先将纹理图sunmap.jpg下载到桌靣上,点击File再点击import,将桌靣上sunmap.jpg填到FileName中再点击import,虽然屏幕上什么也未发生,但此纹理图己存入Alice系统中。右击对象树中SphereHighPoly,将其重命名为Sun,在它的属性列表中找到Skintexture,点击其后靣的None,选择world.sunmap,此时屏幕上的球己有太阳纹理的表靣。3)用建造太阳的步骤去建造mercury(水星)、venus(金星)、earth(地球)、mars(火星)、jupiter(木星)、saturn(土星)、uranus(天王星)、neptune(海王星)及pluto(冥王星)。为了建造这些星球,先将太阳左移30米,右击对象树上sun,选择methods、move、left、30meters。每建造好一个星球按下表将它移到相应位置(与Sun间的距离)。Mercury15metersVenus30metersEarth45metersMars60metersJupiter80metersSaturn110metersUranus160metersNeptune210metersPluto230meters4)还需对每一个星球确定它们的大小,jupiter(木星)是九个行星中最大一颗,以它的大小为标准(设置为1),太阳是它的10倍,其它行星大小与木星的比如下表Mercury0.36Venus0.88Earth0.93Mars0.49Jupiter1Saturn0.365Uranus0.838Neptune0.360Pluto0.025以改变太阳大小为例,其步骤为:右击对象树上sun,选择methods,sunresize,other,打入10。2.给光:首先要场景变黒,不要自然光。点击对象树上light,在其属性(proprties)列表中找到color,它可能是white或yellow,现在将它改为black,这样场景自然光消失。然后再在sun中加一新光源,点击Addobjects,在本地库中找到lights文件夹,选LightBulb加入到场景中。右击对象树上LightBulb,再点击methods,moveto,sun,这样光源就置于sun中为了使光源亮起来,还需在LightBulb细节属性表中使color为white,再点击seldomusedproperties并使EmissiveColor为white,最后还要设vehicle为sun,使LightBulb和sun联动由于每颗行星都有它自己的光,因此需要将它关掉,为此要点击每颗行星的属性表中seldomusedproperties,并使EmissiveColor和为SpecularHighlightColor为black。3.行星绕太阳运动:对每一颗行星都需要进行编码,使它绕太阳旋转。首先将while拖入编辑区,并设条件为true,表示无限循环。再拖入Dotogether在其下,表示九个行星同时绕太阳转。首先点击对象树上Mercury,从methods列表中拖Mercuryturn至Dotogether,并选择left、other,打入4.15revolutions,它表示Mercury每次自身左转4.15revolutions,同时还要求它绕太阳转,为此点击其后的more,选择asSeenBy及Sun,其编码结果如下:对每颗行星重覄上述编码过程,每颗行星自转的参数如下表转一圈的时间间隔长短决定了动画演示速度的快慢,因此可以通过利用参数来设置不同的时间间隔,以控制动画演示的快慢。在编辑区的右上角找到createnewparameter并点击它,会出现一个对话框,在Name中打入参数名Year,其Type选择Number,再点击OK,此时在world.myfirstmethod后靣会出现Year。这样就可以对每颗行星turn命令行中将duration设置为yearseconds,同时将style设置为gently,其代码结果如下此时在事件编辑区内world.myfirstmethod后靣有year,可以对此参数进行设置,建议设置在1.5至3分钟之间。如果设置year小于1分钟,Mercury会运行得飞快。最后还要利用兰箭头定位相机,将它与行星在一行。同时点击createnewevent,即建立一个新事件,选择letarrowkeysmoveandclickcamera,此时就可以按play看太阳系的运行。实例39:财宝寻找游戏(Treasurehuntgame)在这个游戏中,玩者要通过下述一些事件的点击去找到财宝:点击灯笼中的灯泡相当于把灯泡拣起来;点击第一场景的红色箭头就可转换到第二场景;点击灯塔就能给它灯泡点亮灯塔,船可以移动;点击船和图可让它留下;点击第二场景的红色箭头就可转换到第一场景;点击jock给他地图;点击X显出所找的财宝。(1)在这个游戏中有二个场景:小岛和码头,先设置第一个场景—小岛。选择water作背景,分别从environments、vehicles、highschool,studentsandteachers文件夹中将island、sailboat、jock加到场景中,并按下图将它们定位好又分别从light、object文件夹中将lightbulb及lantern加入到场景中,右击对象树中lightbulb,选择methods,movetolantern及flame,此时可看到lightbulb移到lantern内部调整(resize)lightbulb大小使它在lantern的中间现在需要将lightbulb和lantern黏在一起,点击对象树中lightbulb,在其属性列表中设置属性vehicle为lantern及theentirelantern,然后将lantern移到jock的上方,好像挂在椰树上一样。现在要建立二个3D文本对象:’Congratulations!’和’X’。从本地库中找到create3DText,点击它并命名为Congratulations!,类似地命名另一个为X,加入到场景后,X隐藏在岛的中心而不可见,可通过moveup1meter将它置于半岛表靣,再将它们按下图定位。从furniture文件夹中将Toybox2加入到场景中,并把它放在X的上面。在本地库的shapes文件夹中找到Tetrahedron并加入到场景中,再将它定位于屏幕的左上角,设置其color为red。最后将对象树中Tetrahedron重新命名为islandArrow。(2)藏宝。将对象树上五个对象sailboat、jock、toyBox2以及两个3DText对象的属性isShowing设置为false,再点击对象树中X,设置属性color为black,此时屏幕只显示半岛等几个对象。点击dropdummyatcamera,命名对象树中Dummyobjects为cameraView,对其扩展的dummy命名为islandView。(3)设置码头场景。点击camera方法列表中的turn,选择left,1/2revolution,找到如下场景,也可以使用相机位置控制箭头第二组向右的箭头来移动相机视角,直到只见天空和水靣的场景,这就是第二场景的初始场景。点击dropdummyatcamera,扩展cameraView文件夹,将dummy重新命名为dockView,如果要在二个场景之间转换,只需右击对象树上camera,并设置setthepointofview为所要看的场景。从本地库Beach文件夹中拖Beachterrain到场景中,可用turn/move命令在四视图上将它调整定位。再从Beach文件夹中拖Pier和Lighthouse到场景中,利用顶视图和单视图将它们定位好,再将Rock拖入场景,先放大再定位。也可以用相机控制箭头及对象操作按钮将这几个对象按下图定位好。如果看不到斦加入的对象,可利用moveto到屏幕上巳有的对象,再去调整它的大小和位置。现在要加入一个财宝图,本地库没有这种对象,因此要利用公告牌,事先将财宝图从网上搜索到并以pirate-map.gif文件名存好,在File点击MakeBillboard,将财宝图置于公告牌上,用公告牌的moveto功能将它移向pier,再用对象操作按钮将公共牌移到pier上。在这一场景中还要再加入sailboat2和jock2,调整它们的大小和位置,使帆船靠码头,jock2在帆船上,而船帆遮住了公告牌。同样也要把jock2今sailboat2黏在一起,点击对象树中jock2,在其属性列表中将vehicle设为sailboat2,再加一个红色的Triangle到屏幕右上角,命名它为dockArrow。现在要求灯塔产生一朿光。可从object文件夹中将flashlight拖到场景中,并通过四视图来调整它的大小移到灯塔上方,使得光朿好象从灯塔射出。为了将Flashlight隐藏起来,在Flashlight的属性列表中将isShowing设置为false。(4))建立改变场景的新方法。在world的方法列表中点击createnewmethod,并命名此方法为changeScene。在此方法中点击createnewparameter,命名为cameraView,点击createnewvariable并命名为skyColor。将颜色变量skyColor拖入方法编辑区,并设其值为black,duration为0second。从world的属性列表中拖atmosphereColor到黑匣子中。现在要求场景淡出(faceout)。在world的属性列表中将worldatmosphereColor属性拖入并设为black,duration设为0second。拖world’sfogStyle属性于其后,设其值为density及duration值为0second。最后将fogDensity属性拖入,设其值为1及duration值为2seconds。在camera的方法列表中拖入camerasetpointofviewto,选择expessions及cameraView。并将duration设为0second。现在要淡入新场景。在world的属性列表中分别拖入foxDensity、atmosphereColor及foxstyle,分别按下述编码设置其值和duration的值。上面是改变场景方法的最终编码。(5)建立两个新事件。点击createnewevent,选择Whenthemouseisclickedonsomething,选择islandArroww,将DoNoting改为world.changeScene,选cameraView及dockView,类似地再建立如下所示的新事件。按play后再点击箭头,检查其演示结果。(6)为了保存游戏玩者拾起的财宝,需要用List来存放。从本地库中找到Visualizations文件夹,将ListVisualization拖入场景中,为了初始化List点击Newitem,再按OK。向前移动ListVisualizationobject,使它的木框边靠至屏幕底部,并且一半在屏幕外,将listVisualization的属性vehicle设为camera,并设属性isShowing为false。(7)建立拣财宝的新方法,当点击要拣的对象时就能将它拣起来。在world方法列表中点击createnewmethod,命名为pickUp,在此方法内建立一个新参数并命名为object,其Type是object,用它表示要拣的对象。拖入If/Else,在listVisualization的函数列表中拖listVisualizationcontainsitem至If后面,选择expressions,object。拖参数object至If后面的DoNothing,并选择say,打入justaregular,并设duration为2second。再拖参数object至Else后面的DoNothing,并选择say,打入youhavepickedupa,也设duration为2second。从listVisualization方法列表中拖insertitematendoflistVisualization至Else并扦到objectsay的前面,选择expressions,object。在world函数列表中找到String,将ajoinedwithb函数拖至两个objectsay处,并对其中的b选择defaultstring,再拖whatasastring函数至defaultstring处,并选择expressionss,object。(7)建立pickUp新事件。再建立两个Whenthemouseisclickedonsomething新事件,当点击lightBulb及pirate-map时,对这两个对象调用pickUp方法。按Play,转到island场景,点击在lantern的lightbulb,此时lightbulb应移到屏幕的底部,并说youhavepickedupalightBulb。改回到dock场景,lightbulb将随你一起移动,当点击它时,它说justaregularlightBulb。回到MyFirstMethod的编辑区,在world的属性列表中点击createnewvariable,命名为storeAtmosphere,其Type为color。拖新变量storeAtmosphere到world.myfirstmethod编辑区,并设其值为black。再拖属性atmosphereColor至黒匣子,并设duration为0second。拖入atmosphereColor属性,并设置为black及duration为0second,从island方法表中拖入islandsay,打入Clickontheobjectinthisworldtofindthetreasure!,并设duration为3seconds。同样从island方法表中拖入islandsay,打入Clickontheredarrowstochangescene,设duration为2seconds。以提示如何使用该游戏,注意要保证文本显示时间。为了测试上述新方法,还需将相机的视角改变到island,右击对象树中的camera,选择method,camerasetpointofviewto,islandView。(8)建立灯塔开的新方法。如果使用者拣到lightbulb,则灯塔开,否则给出该做什么的提示。在world的方法列表中点击createnewmethod,命名为lighthouseOn,在此方法下拖入If/Else,从listVisualization函数列表中拖入listVisualizationcontainsitem函数作为If的条件,选择lightBulb。为了不显示出lightbulb,从lightbulb的属性列表中拖isShowing到If后面的DoNothing处,并设为false。再从flashlight的属性列表中拖isShowing到其后并设为ture,以便能显示flashlight。从world属性列表中拖入atmosphereColor至其后,并选择expressions及storeAtmosphere。在jock2的方法列表中拖say至Else后面的DoNothing,并打入We’llneedthatlighthousetoworktosailout,并设duration为2seconds。以提示lighBulb不在List中。至此lighthouseOn编码完成。在事件编辑区再建立一个Whenthemouseisclickedonsomething新事件,当点击lighthouse时将调用lighthouseOn。按Play,先点击没有lightbulb的灯塔,在dockscene的jock2将给出提示,然后拣起lightbulb再点击灯塔,此时天空照亮,灯塔出现一朿光。为了使光朿绕灯塔转,需建立一个flashlight的新事件。拖对象树中flashlight到EventsEditor,选择Whentheworldstarts,这将在标题flashlight之下建立新事件。右击Whentheworldstarts,将它改为WhiletheworldisrunningBDE事件。从flashlight的方法列表中拖flashlightturn至BDE中的During后面,选择leftt,1revolution。设duration为2seconds,style为abruptly,这样能使每次旋转后不仃止。按Play后使灯塔点亮,可以看到光束总在旋转。(9)建立sailboatmove的新方法。当灯塔点亮时,点击sailboat,它将移动到island,如未点亮,jock将给出另一个提示。在world的方法列表中点击createnewmethod,命名为sailboatMove。拖If/Else到新方法内,从flashlight的属性列表中拖flashlightisShowing属性至If的条件部份,从sailboat2的方法列表中拖sailboat2move至If后靣的DoNoting处,选择toward10meters。拖入Dotogather,按下述分别拖入sailboat2、jock2、sailboat、jock的isShowing属性,分别设置false、false、truee、true,duration均设置总0second。在else部分拖入jock2say并打入It’stoodarktonavigate,设duration为2seconds。(10)建立SailboatMove的新事件。点击createnewevents,选择Whenthemouseisclickedonsomething,选择sailboat2,运行sailboatMove。按Play,当灯塔未开灯时点击sailboat,jock会给出提示。打开灯塔灯并将船移开,并允许点击和拣起pirate-map。(11)找X。回到island场景,使jock和sialboat在场景中,给图后X出现,如果没有拣到图jock将提示。建立world级的新方法并命名为findX,拖If/Else至该方法编辑区,从listVisualization函数列表中拖containsitem函数至If的条件部分,选择pirate-map。在If后面的DoNothing中拖入pirate-map的属性isShowing,并设为false,在其后再拖入X的属性isShowing,设其值为true。在Else部分拖入jock的方法say,打入IwishIhadamap,设duration为2seconds。建立找X的新事件。建立Whenthemouseisclickedonsomething的新事件,命名findX,当点击jock时执行findX方法。建立world级的新方法并命名为showTreasure,在其内拖入toyBox2的属性isShowing,并设为true。再拖入jocksay”There’sthetreasure!Thanksforyourhelp!”,设duration为2seconds。最后拖入congratulations!的属性isShowing,并设为true。再建立关于showTreasure新事件Whenthemouseisclickedonsomething,并命名为showTreasure。当点击X时,执行showTreasure方法。按play,开始运行此游戏,最终财宝盒会出现在屏幕上。

论大学生写作能力写作能力是对自己所积累的信息进行选择、提取、加工、改造并将之形成为书面文字的能力。积累是写作的基础,积累越厚实,写作就越有基础,文章就能根深叶茂开奇葩。没有积累,胸无点墨,怎么也不会写出作文来的。写作能力是每个大学生必须具备的能力。从目前高校整体情况上看,大学生的写作能力较为欠缺。一、大学生应用文写作能力的定义那么,大学生的写作能力究竟是指什么呢?叶圣陶先生曾经说过,“大学毕业生不一定能写小说诗歌,但是一定要写工作和生活中实用的文章,而且非写得既通顺又扎实不可。”对于大学生的写作能力应包含什么,可能有多种理解,但从叶圣陶先生的谈话中,我认为:大学生写作能力应包括应用写作能力和文学写作能力,而前者是必须的,后者是“不一定”要具备,能具备则更好。众所周知,对于大学生来说,是要写毕业论文的,我认为写作论文的能力可以包含在应用写作能力之中。大学生写

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论