- 1、本文档共26页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
2.2让我们编写Pong
游戏构思都解决了,并且所有你需要着手的文件也有了。是做实际编码的时候了。首先,注视SpriteBatch类,并且看看如何不费力地管理所有的sprite精灵。SpriteBatch类不仅能按照图像保存时的格式来渲染sprites,还能把它们放大或缩小,给它们重新着色,甚至能旋转它们。
把菜单一起放进来之后,您将会添加球拍,并且在你第一章就看到过的输入功能的帮助下,来移动它们。球自身的移动主要靠一些简单的变量,而且每次你撞击到球拍之一都会把球反弹回来,并且播放声音文件PongBallHit.wav的声音。如果球出了左边或右边的屏幕边界,将播放文件PongBallLost.wav的声音,同时玩家失去一条生命。
一些单元测试被用来确保菜单和基本的游戏工作。然后再添加另外的单元测试来处理复杂的部分,像球拍的侧边撞击球以及微调游戏的玩法。为了支持多玩家,您还将使用一个单元测试来考验操作控制,然后把它们添加到主菜单选项来支持多人模式。
在本章的下一部分,您将在Xbox 360上测试整个游戏,并思考如何对游戏做更多的改进。
Sprites精灵
正如你在第一章看到的,SpriteBatch类被用来直接在屏幕上渲染您的纹理。因为您还没有任何的辅助类,您仍将使用相同的方式来渲染所有的东西。更多关于辅助类的信息可以让您每天的游戏编程生活更容易,可以参考第三章。在您的Pong游戏中,您会使用两个层:空间背景,它通过加载PongBackground.dds纹理文件来实现;用菜单和游戏的纹理来呈现菜单文本和游戏组成(球拍和球)。
要加载所有纹理,使用下列代码行。首当你必须定义这里要使用的纹理:
Texture2D backgroundTexture, menuTexture, gameTexture;
然后在Initialize方法加载一切:
//Load all our content
backgroundTexture=content.LoadTexture2D(PongBackground);
menuTexture=content.LoadTexture2D(PongMenu);
gameTexture=content.LoadTexture2D(PongGame);
最后,您可以使用在第一章中学到的SpriteBatch的方法来渲染背景:
// Draw background texture in a separate pass, else it gets messed up
// with our other sprites, the ordering does not really work great.
spriteBatch.Begin();
spriteBatch.Draw(backgroundTexture,
new Rectangle(0, 0, width, height),
Color.LightGray);
spriteBatch.End();
使用LightGray这个颜色,意味着你让背景稍微变暗了些,以至于和前景项(菜单文本内容和游戏元素)形成较鲜明的对比。如您所见,渲染一个sprite到屏幕上并非只使用一行代码,并且只渲染sprite纹理的一些部分还要更复杂得多。看一下您在游戏中使用的矩形(rectangle):
static readonly Rectangle
XnaPongLogoRect = new Rectangle(0, 0, 512, 110),
MenuSingleplayerRect = new Rectangle(0, 110, 512, 38),
MenuMultiplayerRect = new Rectangle(0, 148, 512, 38),
MenuExitRect = new Rectangle(0, 185, 512, 38),
GameLivesRect = new Rectangle(0, 222, 100, 34),
GameRedWonRect = new Rectangle(151, 222, 155, 34),
GameBlueWonRect = new Rectangle(338, 222, 165, 34),
GameRedPaddleRect = new Rectangle(23, 0, 22, 92),
GameBluePaddleRect = new Rectangle(0, 0, 22, 92),
GameBallRect = new Rectangle(1, 94, 33, 33),
GameSmallBallRect = new Rectangle(37, 108, 19, 19);
真是相当多的矩形对象,不过比起诸如导入一
文档评论(0)