- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
XNA游戏开发常用输入及输出处理本课要点XNA用户输入处理XNA碰撞检测XNA声音输出3输入类型XNA中的用户输入可以由多种设备组合而成:键盘、鼠标、Xbox360手柄、Xbox360周边设备和WindowsPhone触摸屏和加速器。注意鼠标输入在Xbox360和WindowsPhone上不可用。本节课将讲解如何为游戏添加对键盘,鼠标的支持。在之前的课程中,我们讨论了轮询和事件注册。两者之间的不同在处理输入设备的时候最明显。传统的Windows程序员习惯于对事件进行注册,比如某个键被按下或着鼠标移动。在这个编程模型中,应用程序执行一些功能,然后当它空闲时,消息泵将消息送入应用程序并且事件被处理。在游戏开发中,没有所谓的空闲时间,所以允许开发者进行事件注册的开销过大。取而代之是由开发者对输入设备进行轮询以得知玩家是否对这些设备进行了操作。4键盘输入方法描述Keys[]GetPressedKeys()返回一个在方法被调用时被按下的键的数组boolIsKeyDown(Keyskey)返回true或false,取决于方法调用时参数所代表的按键是否被按下boolIsKeyUp(Keyskey) 返回true或false,取决于方法调用时参数所代表的按键是否被释放if(Keyboard.GetState().IsKeyDown(Keys.A))键盘输入是通过Microsoft.XNA.Framework.Input命名空间中的Keyboard类来处理的。Keyboard类有一个叫做GetState的静态方法,用KeyboardState结构的形式返回键盘目前的状态。5控制精灵自由移动KeyboardStatekeyboardState=Keyboard.GetState();if(keyboardState.IsKeyDown(Keys.Left))playerPosition.X-=speed;if(keyboardState.IsKeyDown(Keys.Right))playerPosition.X+=speed;if(keyboardState.IsKeyDown(Keys.Up))playerPosition.Y-=speed;if(keyboardState.IsKeyDown(Keys.Down))playerPosition.Y+=speed;为什么不用Ifelse提高效率?如何确保按一次空格发射一枚炮弹?6属性类型描述LeftButtonMiddleButtonRightButton ButtonState返回鼠标左键的状态返回鼠标中键的状态返回鼠标右键的状态ScrollWheelValueint 返回自游戏开始后鼠标滚轮滚动刻度的累加量.要想知道滚轮滚动了多少,把当前帧的ScrollWheelValue和上一帧的进行比较. XY int 返回鼠标光标相对于游戏窗口左上角的水平位置(坐标).如果鼠标光标在游戏窗口的左侧,这个值是负值;如果在游戏窗口右边,这个值大于游戏窗口的宽度. 默认情况下当鼠标划过XNA游戏窗口时鼠标指针是隐藏的。如果您想在窗口中显示鼠标,只要设置Game类的IsMouseVisible属性为true就可以了。不管鼠标光标是否可见,GetState调用返回的MouseState结构体都表示鼠标当前的状态。MouseState结构体中重要的属性鼠标输入本课要点XNA用户输入处理XNA碰撞检测XNA声音输出8碰撞检测实现碰撞检测最简单和快速的方式是通过包围盒算法。本质上,当用一个包围盒算法时,您需要在屏幕上的每个物体周围“画”一个盒子,然后检查这些盒子是否相交。如果相交,就有碰撞。实际游戏通常使用一个比实际帧尺寸稍微小一点的矩形,这样将得到更加精确的碰撞检测:ringsRect.Intersects(skullRect);9使用多个包围盒或者象素检测将得到更加精确的碰撞检测效果,但是性能会下降10像素检测,对屏幕坐标上同一点的两个对应纹理中的亮度通道进行比较,只有两个都不透明时才发生碰撞,检测精准但是效率最差本课要点XNA用户输入处理XNA碰撞检测XNA声音输出12使用XACT“跨平台音效制作工具”英文全称MicrosoftCross‐PlatformAudioCreationTool,后文会使用它的英文缩写简称XACT13在代码中使用XACT声音文件要从XACT项目文件中读取数据到对象中让您可以在XNA中播放声音,您需要添加以下成员变量到Game1类的顶部:AudioEngineaudioEngine;WaveBankwaveBank;SoundBanksoundBank;CuetrackCue;第一个变量代表一个称为声音引擎(soundengine)。这个对象会用来创建WaveBank和SoundBa
文档评论(0)