Andriod游戏开发 第八章 地图的设计和实现.docxVIP

Andriod游戏开发 第八章 地图的设计和实现.docx

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Andriod游戏开发 第八章 地图的设计和实现

从零开始Android游戏编程(第二版) 第八章 地图的设计和实现 收藏第八章 地图的设计和实现这本来是第十章,前面计划还 有两章的内容,一是跟第四章一样,完成一个Asteroid游戏作为小结,总结一下前面讲过的Sprite的用法,并演示NPC和子弹的处理方法。但是, 在写第七章的最后一个例子的时候,把本来简单的碰撞检测的例子扩充了一下,加入了NPC和子弹,基本和Asteroid的功能差不多了,所以就把原定的 Asteroid砍掉了。另外一章是讲解程序的生命周期,内容相对简单,但考虑到上一章讲Sprite时已经引入了TiledLayer,如果接着讲地图 应该会更连贯些,所以把生命周期向后移了一章。那么,就先让我们看看地图的设计和实现。如果我们需要的地图很小又很 少,完全可以将整个地图画在一张图片上。但是如果地图很多,绘制和管理地图的工作就会很麻烦,这时我们就需要用到另外一种技术——图块(Tile)。所谓 Tile,就是将地图中的公共元素提取出来,然后在显示的时候组合这些元素形成完整的地图,这就是本章要介绍的主要内容。如下图是组成坦克大战地图的所有元素(16x16像素):接下来让我们看一幅游戏中的场景:可以看到,整个游戏场景就是由上面那些Tile构成的。这样,摆在我们面前的任务就很简单了:将地图依照Tile的大小分成若干格,将对应的Tile填到格子中。在 前面讲Sprite的时候,我们知道可以将组合在一张图片中的关键桢编号,以后就可以通过编号来使用这个桢(参看上一章桢动画的相关内容),这种方法也同 样适用于Tile。而2D地图很容易让我们想到二维数组。也就是说我们可以将Tile的编号放到二维数组中,这样我们就可以通过历遍数组元素,像显示 Sprite那样将整张地图一块一块的显示出来。以上面的那张游戏截图为例,一共13行13列,我们可以定义一个13x13的二维数组(因为地图上有空白区域,所以我们将Tile的编号从1开始,用0表示空白)。让我们找到GameView_Old.java,增加成员变量map[][]:int[][] map = {{0,0,0,2,0,0,0,2,0,0,0,0,0},{0,1,0,2,0,0,0,1,0,1,0,1,0},{0,1,0,0,0,0,1,1,0,1,2,1,0},{0,0,0,1,0,0,0,0,0,2,0,0,0},{3,0,0,1,0,0,2,0,0,1,3,1,2},{3,3,0,0,0,1,0,0,2,0,3,0,0},{0,1,1,1,3,3,3,2,0,0,3,1,0},{0,0,0,2,3,1,0,1,0,1,0,1,0},{2,1,0,2,0,1,0,1,0,0,0,1,0},{0,1,0,1,0,1,1,1,0,1,2,1,0},{0,1,0,1,0,1,1,1,0,0,0,0,0},{0,1,0,0,0,1,1,1,0,1,0,1,0},{0,1,0,1,0,1,6,1,0,1,1,1,0},};在资源中增加tile.png在构造函数中初始化bitmap对象res = context.getResources();bmp = BitmapFactory.decodeResource(res, R.drawable.tile);在onDraw中绘图//用来显示图块的Rect对象Rect src = new Rect(0, 0, 0, 16);Rect dst = new Rect();for(int i=0; i13; i++) {for(int j=0; j13; j++) {//根据Tile的编号得到对应的位置src.left = (map[i][j]-1) * 16;src.right = src.left + 16;//根据地图上的编号计算对应的屏幕位置dst.left = j * 16;dst.right = dst.left + 16;dst.top = i * 16;dst.bottom = dst.top + 16;canvas.drawBitmap(bmp, src, dst, paint);}}最后不要忘了修改Main.java中的setContentViewGameView_Old gameView;/** Called when the activity is first created. */@Overridepublicvoid onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);gameView = new GameView_Old(this);setContentView(gameView);}好了,运行一下程序看看结果: 对比一下原图,除了基地四周的

文档评论(0)

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档