C#中能实现这样的数组吗?axis[1].gopos[1,1]

《基于Unity3D迷宫历险游戏的设计与实现》由会员分享,可在线阅读,更多相关《基于Unity3D迷宫历险游戏的设计与实现(32页珍藏版)》请在人人文库网上搜索。

Unity3D内容摘要随着计算机技术的发展,游戏成为了一种娱乐产品,以其精美的画面,视觉的冲击,博得大众的眼球,市场需求量非常大。因此,对游戏的开发有着很大的研究价值。使用Unity3D引擎制作出来的游戏能给予玩家比较真实的体验感,其界面交互效果友好。学好Unity3D引擎对以后的发展有着至关重要的作用。在这次课题中将使用Unity3D引擎制作出一款效果不错的游戏。本次课题是设计出一款迷宫历险类游戏。主角需要在一个地势复杂的迷宫里面躲避敌

2、人,各种陷阱机关,收集完缺失的地图碎片才能找到钥匙,进而开启迷宫出口的大门。在整个游戏的设计过程中,采用了状态机,自动导航系统,剧情对话系统,背包系统,UI交互逻辑知识,需要对Unity3D有一定的熟悉程度。开发出来的游戏有一定的娱乐性满足玩家的需求,也可以为后续开发迷宫游戏提供参考价值。因此,本次课题的开发不仅有一定的学习研究意义,也有一定的市场价值。关键词: 游戏设计

17、ual Studio(简称VS)是美国微软公司的开发工具包系列产品。Visual Studio为Unity引擎提供了优质的调试环境,开发者可以通过设置断点来快速确定问题的所在。它还提供了功能全面的IDE,可以制作自己喜欢的编码环境,如字体、颜色及其它设置,提高工作效率。此外,在Visual Studio中编写C#代码时会提供代码导航的功能,能让编程者快速并准确编写出代码。第三章 游戏需求分析及概要设计3.1迷宫历险游戏的需求分析游戏需要制作开始界面用来开始游戏,游戏退出以及了解游戏玩法的游戏介绍选项。游戏中需要制作一个动态加载界面,来让玩家了解距离进入游戏的时间游戏的主场景包含三个场景。场景的

18、设计多样化,难易程度不同。游戏中应包含玩家的各种动作状态,以及碰撞触发事件。在UI交互上有主角的头像,血量,背包系统,设置,退出等。此外,游戏中还存在敌人,机关陷阱,以及可拾取的物品。还有创新性的地图碎片,让游戏更加有趣。3.2 游戏的概要设计3.2.1 游戏的结构设计本次迷宫历险游戏设计主要涉及三个界面:游戏开始界面、游戏加载界面、游戏界面。下面对每个界面进行介绍。开始界面:包括“游戏介绍”、“开始游戏”、“退出游戏”三个按钮,此界面可以查看游戏的介绍以及再次确认退出游戏,当玩家点击“开始游戏”可进入游戏加载环节。加载界面:游戏加载完所需的资源后自动进入游戏主界面。游戏界面:包含“背包”、“

19、设置”、“退出”三个按钮,进行游戏的相关操作,查看背包情况,设置音量以及退出当前游戏。游戏的结构图如图3-1所示。图3-1 游戏结构设计图3.2.2 游戏总体设计通过需求分析结果,可以得出本游戏的总体设计框架,如图3-2所示。图3-2 游戏的总体框架图根据所得的游戏总体框架,结合Unity3D引擎和C#脚本,迷宫历险游戏的各个模块实现方法如下:(1)场景设计:本游戏主要设计了幽径迷宫,地牢迷宫,房间迷宫,三种地形。将收集的模型导入Unity3D引擎中,在Scene视图对模型进行简单的处理,制作出岔路复杂,符合迷宫特色的地形。场景中采用了不同的主题,分别设计了拥有众多分岔路口的道路,黑暗的地牢以

20、及复杂的房间。此外,游戏将采用了第三人称的视觉效果,使用脚本控制摄像机的跟随效果,采用Skybox设置其天空的颜色。(2)角色设计:主角是一个左手持盾牌,右手持剑的角色。采用Input.GetAxis()获取角色的水平和垂直方向的输入事件,然后使用CharacterController.Move()方法进行移动,对于角色的攻击防御将采用Tag来标记攻击对象,根据键盘输入事件,后使用触发器来检测事件。角色的血量变化则是根据受到的伤害值进行减少,根据时间Time.time进行回血功能。(3)敌人AI设计:对于敌人的AI系统,使用Bake烘焙出可巡逻区域,采用NavMeshAgent组件,通过敌人与

21、主角的距离改变状态,使用LookAt()来控制朝向,NavMeshAgent.SetDestination()方法设置巡逻点;攻击方面,将采用Random函数随机出现攻击方式以及触发事件实现;血量方面主要设计了回血功能以及血条显示。(4)机关陷阱设计:根据不同的机关陷阱灵活设计其功能,包括对主角造成伤害、获取物品道具、传送等等,采用触发器来触发机关陷阱,transform.Find()来查找对象,Destroy()函数来销毁对象。(5)动画系统设计:该模块主要采用Animator动画状态机来播放多个动画,实现动画切换,Animation来播放单一动画,采用Timeline来录制简单动画。然后脚

22、本控制动画的播放与切换。(6)游戏音效设计:将采用AudioSource组件添加音效,使用Play()可播放音乐Stop()暂停播放。(7)游戏UI界面设计:本游戏的UI界面采用Unity的UGUI实现搭建。通过鼠标点击事件以及SetActive()控制UI界面间的交互逻辑,使用LoadScence()跳转界面。背包系统将设计出物品类、卡槽类、背包数据存储类、背包物品显示类以及拖拽,实现背包物品间的灵活数据处理功能。还设计通过Fungus插件制作简单的剧情对话系统,使用正交摄像机制作小地图。综合上述方法,灵活使用,运用于实际的开发,即可制作出迷宫历险游戏的各个功能模块。第四章

23、现4.1 场景设计4.1.1 场景制作游戏场景占据游戏的很大一部分,优秀的场景能够带给玩家更加沉浸的游戏体验,影响着玩家对游戏的整体评价 郉桐桐.浅谈游戏场景的设计和制作J.卫星电视与宽带多媒体,4-115.。场景的制作需要导入地形素材,对素材进行搭建,制作出道路复杂,岔口多的迷宫地形,统一游戏的风格为黑夜,Unity3D中光源主要有点光源和平行光源两种 李兵川.基于Unity 3D游戏开发流程分析J.山东工业技术,8.,由于是黑夜采用点光源采光。地形1为幽径迷宫:制作风格比较简单,采用一个个半圆形的模型制作而成道路,通过材质球,设置其远处幽暗的效果

24、。场景中设置的机关陷阱数量多,但难度一般,如图4-1所示。图4-1 幽径迷宫效果图地形2为地牢迷宫:三层地牢,采用简单地牢风格,里面有各种机关陷阱,具有一定的挑战性。此场景选取了地牢的特色,有门,上下楼梯,以及部分桌椅,铁链,地板比较暗,使用火把作为光源,还原了地牢黑暗的环境,如图4-2所示。图4-2地牢迷宫效果图地形3为房间迷宫:有着各式各样的房间,地形十分大,道路众多,难度系数高。在场景中每个房间里面有着各种各样的大门,也有书架道路,房间里面曲折的道路。如图4-3所示。图4-3房间迷宫效果图4.1.2 场景摄像机制作游戏中必不可少的一部分就是摄像机,相当于人类的眼睛,可以看到角色所处的位置

Mask用来是否剔除某一层的对象。为了营造游戏中黑夜的环境,迷宫历险游戏的设计上添加了Skybox天空盒,并将其材质设置为黑色。游戏中可以存在多个摄像机,但必须有一个是MainCamera,作为主要视角。在设置完参数后,将摄像机跟随的逻辑添加。为此,采用了第三人称摄像机跟随的方法,插值法控制摄像机以一定的速度和距离自动跟随玩家移动。使用该方法可以自动调节角色视角,无须通过按键或者鼠标调整视角,当碰到障碍物遮挡视线时,会自动调整摄像机的高度,从而达到摄像机平缓的视觉效果。如图4-4所示。图4-4

26、nce计算出玩家与摄像机的距离之差。然后利用Vector3.Slerp球形插值法设置出5个观察点并存入数组中,使用for循环遍历每个观察点,通过射线检测判断是否看到玩家,如果看到玩家则停止遍历,否则继续寻找观察点,直到找到玩家后用Vector3.Lerp线性插值法把摄像机移到观察点,接着通过LookRotation()调整摄像机的角度,同样使用线性插值法固定摄像机的旋转速度,最后使用transform.eulerAngles固定y轴和z轴,使屏幕平缓。根据以上逻辑,其核心代码逻辑如下所示:currentPoints0

29、ler,该碰撞器即使不用刚体也自带重力,当角色处于半空中时,会受到重力的影响掉落到地面上。调节radius大小和height的高度,使碰撞器的边缘接近角色的模型的边缘。然后通过C#脚本编写角色的逻辑,设置角色的移动速度,通过Input.GetAxis()获取Horizontal水平和Vertical垂直方向,移动可以通过WSAD键以及方向键来控制前后左右四个方向的位移,接着判断玩家朝向问题,使用插值法调整位置。4.2.2 角色攻击系统找到武器的组件,添加Box Collider碰撞器并勾选Is Trigger,然后挂载触发事件的脚本,当触发器进入时,如果玩家按下攻击键并且碰到的是敌人则会对敌人

30、造成一定的伤害。当角色进入防御状态,无论敌人怎么攻击都无效。角色的攻击方式主要有挥剑、剑刺、远程盾击以及三段氏连击。角色的攻击系统,如挥剑攻击是通过Input.GetKeyDown(KeyCode.J)获取按下键盘的按键信息。4.2.3 角色血量系统在游戏中,为了直观的了解角色的生命值,设计了血条,当角色受到伤害时,血量会减少,在一定的时间间隔内可以回血。实现逻辑如下:以血量和加血时间为基础,当角色的血量为零时,主角死亡;当角色处于满血状态,不加血;其它状态以时间为单位,每次达到加血时间,恢复一定的血量,并在血条UI上显示。4.3 敌人AI设计4.3.1 敌人AI系统游戏中,AI系统用于实现游

31、戏中角色的某种智能行为,可以使游戏的体验效果更加逼真 卫敏.3D游戏中AI自动寻路机制的算法与优化策略研究J.山西电子技术,-92.。通过制作智能的敌人能添加迷宫历险游戏的趣味性。这里,主要使用Unity3D引擎提供的AI系统,使用Bake烘焙游戏场景,制作出敌人的活动范围,敌人对象上添加Nav Mesh Agent组件,需要特别注意的是,为了避免敌人与主角之间产生撞倒问题,需要根据不同的敌人调整其组件上Stopping Distance的距离大小。敌人的智能巡逻规则:当没有玩家靠近时,敌人自动在一定区域内自动巡逻;玩家靠近时,追踪玩家;达到攻击距离时,自动攻击。敌人的A

32、I系统流程,如图4-5所示:图 4-5 敌人AI系统的流程图在了解敌人的AI规则后,新建一个EnemyAI的C#脚本。首先通过Vector3.Distance计算出敌人与主角的距离distance,根据distance判断是否处于可攻击的范围圈内。如果两者的距离刚好是两者巡逻组件与角色控制器的半径之和,则进入攻击状态,并且使用transform.LookAt()设置敌人朝向主角。如果还没有达到攻击距离,则设置为追踪状态,使用SetDestination()设置主角的位置为巡逻点。当主角不在可攻击的范围圈内,以自身的位置为中心点,随机选择一个位置作为巡逻点,在这主要采用Random.Range(

35、ndPos);4.3.2 敌人攻击系统首先,明确敌人的攻击动作有3种,然后在敌人的武器或者手上添加碰撞器,使用OnTriggerEnter()并且设定两个条件处于触发器进入时并且玩家按下攻击键才能攻击敌人,敌人的攻击会根据时间判断是否进入二次攻击。4.3.3 敌人血量系统与主角血条不同的是,敌人的血条设置在世界地图里面,会出现血条不在玩家视线的问题,为了避免这个问题的产生,采用transform.LookAt()将血条的朝向改为朝向摄像机的视角。使敌人的血条不会因为敌人的移动攻击而遮挡血条。当敌人的血量小于0时,敌人的血条会隐藏,之后销毁。4.4 陷阱机关设计游戏中采用了迷宫历险的主题,在偌大

36、的迷宫中,除了岔路多之外总少不了陷阱机关的存在,它们的存在既增加了迷宫的复杂性,也使游戏多元化,增加了游戏的投入度 玄令岐.基于UE4的迷宫逃生游戏设计J.电子质量,-46.。在迷宫中经历各种危险,需要玩家时刻保持警惕才能取得胜利。为此,在游戏中设置了以下陷阱机关,如表4-6所示。表4-6 陷阱机关名称效果陷阱机关图示墙刀处于墙壁上,伤害比较小,但触发频率高,伤害值为5。地刺由单个锥形尖锐物体组成,伤害值为5。升降门处于地牢的大门上,门按照一定的速度上下移动,速度平缓,伤害值为5。大型墙刺处于墙的两侧,常以多个大型墙刺一起出现,伤害值为30。大斧头处于道路上,是旋转的斧头

37、,旋转速度慢,伤害值为20。大摆锤旋转速度一般,伤害值为30。齿轮齿轮不停的左右移动,伤害值为30。大镰刀当主角靠近时会对主角造成一定的伤害,伤害值为50。镰刀铁笼一次性激活型,隐藏于暗处,主角触碰机关后迅速掉落,主角需及时躲避或者劈开铁笼方可逃脱,主要伤害来源于铁笼内的大镰刀攻击。大型地刺板处于宝箱的下面,由铁链拴住,劈开铁链后可掉落,伤害值为50。锥形铁门门上有密密麻麻的尖锐物体,不停旋转,伤害值为100。宝箱对主角有利,位置不定,打开后可获取物品:血瓶、地图碎片、钥匙,用于加血或者是打开迷宫大门。传送门可以从某处瞬间移动到另一个地方。在了解这些机关陷阱的伤害值后,需要添加其代码逻辑。首先

38、,在这些对象上添加网格碰撞体Mesh Collider,相比其它碰撞体来说,网格碰撞体能贴近对象的边缘,减少对象触发的误差。然后勾选Is Trigger。最后进入编写代码环节,通过tag的标识,如果主角进入触发器则用GetComponent获取主角的对象上的血量信息,减少主角的血量并更新血条。部分机关陷阱的移动,如升降门,可通过transform.position.y获取对象y轴的位置,设定两个极限,当达到这两个位置时,以一定的速度反向移动。宝箱中地图碎片的制作,主要依靠材质渲染Rendering Mode中的Cutout,可以将材质透明的部分隐藏,然后使用Cube就可以制作不规则的碎片。需要

39、注意的是,宝箱机关的处理涉及到销毁与产生的逻辑,为此,将物品作为宝箱的子对象,Unity中的仅仅使用SetActive能将显示的对象隐藏但对于隐藏中的对象不能显示,为了避免这一现象,可以通过代码将对象隐藏之后再显示,而不是手动隐藏。游戏中可能有很多对象名字相同,Unity在查找对象时,存在找到的对象只是其中一个,通过transform.Find().gameObject找到子对象的位置,然后在触发事件进入时,判断按键事件,之后再将子对象显示,达到开启宝箱获取物品的效果。打开箱子的核心代码如下:public

动画系统设计游戏动画和角色的具体动作、游戏的设计方案有着莫大的联系,动画的使用能让玩家产生现实感,可以有效的提高游戏的视觉设计,可以增加玩家对游戏的参与感 陈其庸.游戏中角色动作探讨研究J.卫星电视与宽带多媒体,1-112.。在前面章节

41、,已经制作好角色和敌人的交互逻辑,但这些对象的都还没有赋予真实的动作状态。为了让对象更加真实,需要制作对象的动画。在Unity中可以通过Animation来录制动画的位置,然后使用Animator状态机来切换动画。Animator状态机将每个动画看做是一种状态,根据不同的条件改变不同的状态,达到切换动作的功能,动画之间的融合可以实现这些动作之间的平滑过渡 郭睿静,张帅.基于Unity3D游戏动作的控制和设计J.兰州文理学院学报:自然科学版,-47.。4.5.1 角色动画系统角色状态包含有:无所事事(Idle)、走路(Walk)、剑击(Attack_1)、剑刺(Attack_

42、2)、盾击(Skill)、三段式(LongAttack)、防御(Defend)、死亡(Death)等几个状态通过脚本控制角色在不同的行为切换不同的动画。根据Unity引擎的特性,动画须挂载在角色的模型上才能发挥其作用,首先选定角色打开Animator面板,将录制好的动画拖进面板里面,然后使用线条将动画连接起来,设置动画的类型,常见类型有四种,分别为Float、Int、Bool、Trigger。主角的动画逻辑图如4-7所示。图4-7 角色的动画逻辑图根据上面的角色的动画逻辑图,可以大致了解角色动作的切换过程,下面以三段式攻击为例,分析其实现过程:首先,在主角的对象上,添加Animator组件,把

43、所需的动画拖进Animator面板,在面板内选取需要连击的动画,针对三段式的三个动画设置为Int类型,并设置名字为LongAttack。并在主角的对象上添加Animator组件。然后,设置三段式中每个动画之间的逻辑关系,并且在动画的连线上选择LongAttack名字的动画,动画之间的参数设置为:SK_Idle-SK_Combol_1的Equals为1;SK_Combol_1-SK_Combol_2的Equals为2;SK_Combol_2-SK_Combol_3的Equals为3;其余的Equals均为0。动画之间可以不设置每个动画退出的时间,来达到立即切换的效果。最后,编写脚本。使用GetC

44、omponent()获取主角对象上的组件信息,通过AnimatorStateInfo获取每个动画的名称,并根据短时间内点击键盘的次数进行判断,连续攻击的程度。连击规则:如果在当前动画播放的时间normalizedTime小于设置的值过程中再次点击攻击按键则会播放第二个攻击动画,如果超过时间则从第一个动画进行播放,简单的说,是根据玩家按攻击键的速度进行判断,计算短时间内按下键盘的次数,决定播放多少个动画片段,以此达到连击的效果。三段式攻击核心代码逻辑如下:if

46、称,点击次数依次增加4.5.2 敌人动画系统敌人状态有:无所事事(Idle)、走路(Walk)、攻击1(Attack1)、攻击2(Attack2)、攻击3(Attack3)、死亡(Death)。虽然每个敌人动作都不一样,但可以设置相同的动作名称并设置相同的动画类型,使敌人能够使用一套代码就可以播放不一样的动画。由于敌人是智能巡逻的,很难对每个动画进行准确的判断,需要考虑动画的优先级问题,通过Solo和Mute可以实现同一动画层级之间的优先级播放,当勾选Solo时播放,勾选Mute时禁用,如当攻击状态时,敌人的走路状态被禁用。敌人的动画逻辑图如图4-8所示。图 4-8 敌人动画逻辑此外,敌人的攻

47、击动画也不是单一的进行播放,而是通过随机函数Random.Range(0,3),随机切换攻击动画,根据if条件判断当数字是多少是出现哪种攻击方式。使用该方法可以实现攻击方式没有规律,给予玩家一定的挑战性。4.5.3 机关陷阱动画系统对于机关陷阱来说,其动画系统比较单一,尽管Animator切换动画很方便,但占用内存比Animation大,本次迷宫历险游戏涉及的机关陷阱比较多,考虑内存问题,采用Animation制作这部分的动画。在每个机关陷阱中添加Animation组件,设置为循环播放模式,根据机关陷阱的危害程度,改变其动画播放的帧率,还可以录制这些对象的位置。由于是不断播放的动画,玩家触发时

48、可做成一定程度的触发效果,如箱子动画有打开和关闭两种状态。4.6 游戏音效设计音效的使用关系到玩家的感官享受和游戏体验,能在视觉上给予玩家提示,引导操作 田翠华,许立灿,彭奕翔,陈施恩,陈玉明.基于Unity 3D异星大冒险游戏的设计与开发J.中国现代教育装备,-11.。Unity3D中常用的音效格式主要有.mp3,.orgg,.wav三种,Unity播放声音的组件主要有两种分别为AudioListener和AudioSource。将声音文件导入场景中后,在AudioSource的Volume可以调节声音的大小,然后使用脚本控制声音的播放,暂停,停止。游戏中主要设计了背景音

49、乐、角色移动攻击、敌人攻击、打开箱子、触发机关陷阱的音效。在游戏中可根据声音是否勾选Loop循环播放音源文件。根据触发的条件使用music.Play()播放声音以及music.Stop()停止播放。4.7 游戏UI界面设计4.7.1 开始界面Unity本身有自带的GUI,游戏中常用的GUI主要有两种,第一种是NGUI,主要用来制作2D游戏,属于第三方的包,需要自行安装,该插件会占据一定的游戏内存空间,不太建议使用其制作简单的UI交互;第二种是UGUI,其所有的GUI元素都在Unity的Hierarchy视图中右键UI可找到所有元素。通过Canvas来管理其所有的UI节点。创建的时候系统会自动创

50、建EventSystem,用来接收管理事件。本次游戏中采用的是UGUI。游戏的开始界面主要由UGUI的Image,Panel,Button组成,分别制作出开始游戏,退出游戏,游戏介绍三个按钮,以及退出游戏面板和游戏介绍面板。首先,在游戏界面中,添加3个按钮以及2个面板,在组建中的Rect Transform可以调整其大小和位置,设置锚点为中间,导入制作好的素材图片,保持界面美观整洁。然后,完善按钮功能,找到按钮的On Click(),添加点击事件。接着,使用C#语言的XXX.SetActive()设置true或者false分别控制UI界面的显示与隐藏;SceneManager.LoadScen

51、Async(“XXX”)跳转到相应的场景;使用Application.Quit(),即可退出游戏。开始界面如图4-9所示:图 4-9 开始游戏界面点击退出游戏,可以打开再次确认退出游戏的面板。点击面板的关闭即可关闭面板,返回开始界面,点击确认即可退出游戏。图4-10 再次确认退出点击游戏介绍可以打开游戏说明面板,点击关闭可关闭面板。图4-11 游戏说明4.7.2 加载界面在进入游戏的主界面中往往会大量加载游戏资源,进而存在卡顿问题,为了使游戏连贯性更加友好,在加载界面制作一条Slider来实时显示加载的进度。图4-12 加载界面采用异步加载的方式,当玩家点击开始游戏时,会跳转到加载界面,自动加

Layout Group组件可以将背包的卡槽进行均匀分布。(1)卡槽GUI制作以及背包界面制作卡槽中需要使用UGUI制作出物品的图片、数量、以及3个功能按钮:移出按钮、使用按钮、合成按钮。如图4-13所示。图 4-13

54、 卡槽界面游戏的背包界面涉及到物品的显示功能以及部分地图碎片的合成地图功能的设计。如图4-14所示。图 4-14

void synthetic()/物品合成功能第二步:创建Slot类:主要包含物品的图片、移除按钮、使用按钮、合成按钮,数量、信息,涉及卡槽物品添加、清除、使用、合成、丢弃以及物品信息。Item item;public

60、否符合拾取的条件,背包未满的情况才能拾取物品。第七步:创建UseProp类,主要用于道具的使用功能,需要判断背包中是否存在该物品,如果存在则调用此方法,背包调用Remove()方法,进行数据处理。4.7.4 游戏设置在游戏中需要设置游戏的背景音乐,游戏静音,以及打开地图画册。首先使用GUI制作出滑动条,然后用脚本将背景音乐的Volume声音大小等于滑动条Value大小,即可实现在设置面板中拖动滑动条改变声音的大小,可以通过AudioListener.volume调节全局音效达到静音效果。4.7.5 游戏退出在迷宫历险这个游戏中,涉及到3个游戏场景,全部挑战成功,需要一定时间,考虑到玩家可能需要

61、中途退出游戏。为此,使用GUI设计了游戏退出按钮,玩家可以随时退出游戏。4.7.6 小地图迷宫历险游戏是一个岔路众多的游戏,玩家很难找到迷宫出口,小地图的设计能在一定程度上给予玩家一定的位置参考。相比其它游戏的小地图,在本次设计中添加了一点难度,只有合并完地图碎片才能显示小地图。首先,新建一个Render Texture

62、然后,新建一个Image,将事先按照地形比例制作好的地图拖放到Source Image中,再新建一个子对象RawImage,将Minimap拖到Texture即可。接着,根据需求,将需要显示在小地图的对象,添加Quad作为对象图标,设置其Layer层为Minimap层,添加其材质。在本次游戏中,选用了3种不同的图标来区分角色,敌人,道具的图标。如此,可以实现小地图的功能。图4-15 Height,比例设置为0,表示只与屏幕的宽度进行适配,接着,将UI中的锚点为中间即可。(2)UI面板拖拽游戏中,当玩家同时点击多个UI时会造成遮挡现象,影响了被遮挡面板事件的触发,为了改变这种现象,可以通过C#脚本编写使用鼠标拖拽面板的功能,引用IDragHandler接口,将需要拖拽的面板中心锚点位置变成鼠标移动的位置,即可达到调节面板位置的目的。(3)剧情对话系统游戏中,存在大量的机关陷阱,为了让玩家

《Python程序设计期末作业》由会员分享,可在线阅读,更多相关《Python程序设计期末作业(6页珍藏版)》请在人人文库网上搜索。

1、球-弹簧物理模型模拟程序一、 编写目的1.模拟一个非线性动力系统,体会系统参数的混沌现象。2.熟悉VPython的使用。二、 物理模型描述模型空间的四周及顶面为刚性壁,底为一有质量的刚性平板,平板由一根轻弹簧支撑。模型空间内有数个刚性球作自由运动。球的初始位置在空间内均匀分布,初始速度满足正态分布。所有碰撞均为完全弹性碰撞。并假设平板只能作Z方向一维运动。三、 设计思想由物理学中的能量守恒和动量守恒推导碰撞前后物体的速度变化。每次迭代先使物体状态按时间小量dt发展,再判断是否有碰撞发生,若有则由前面推导的公式改变相关物体的速度。以适当的速率重复上述步骤,再用visual库绘制出对应图形,则得到

2、这个物理模型的模拟演示动画。四、 使用方法直接运行程序,则开始模拟并实时绘制。也可修改程序开始处的几个全局变量,改变模型的参数。五、 参考资料VPython官方文档六、 说明在Python2.7下调试通过。本程序中没有一行代码直接来自网络、书籍等处,参考资料仅为VPython官方文档。附截图及源代码。程序运行效果截图from visual import *from random

我要回帖

更多关于 java创建一个动态数组 的文章

 

随机推荐