andriod游戏开发地图的设计和实现

andriod游戏开发地图的设计和实现

ID:9377009

大小:90.18 KB

页数:14页

时间:2018-04-29

andriod游戏开发地图的设计和实现_第1页
andriod游戏开发地图的设计和实现_第2页
andriod游戏开发地图的设计和实现_第3页
andriod游戏开发地图的设计和实现_第4页
andriod游戏开发地图的设计和实现_第5页
资源描述:

《andriod游戏开发地图的设计和实现》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、从零开始Android游戏编程(第二版)第八章地图的设计和实现收藏第八章地图的设计和实现这本来是第十章,前面计划还有两章的内容,一是跟第四章一样,完成一个Asteroid游戏作为小结,总结一下前面讲过的Sprite的用法,并演示NPC和子弹的处理方法。但是,在写第七章的最后一个例子的时候,把本来简单的碰撞检测的例子扩充了一下,加入了NPC和子弹,基本和Asteroid的功能差不多了,所以就把原定的Asteroid砍掉了。另外一章是讲解程序的生命周期,内容相对简单,但考虑到上一章讲Sprite时已经引入了TiledLayer,如果接着讲地图应该会更连贯些,所以把生命周期向后移了一章。那么,就

2、先让我们看看地图的设计和实现。如果我们需要的地图很小又很少,完全可以将整个地图画在一张图片上。但是如果地图很多,绘制和管理地图的工作就会很麻烦,这时我们就需要用到另外一种技术——图块(Tile)。所谓Tile,就是将地图中的公共元素提取出来,然后在显示的时候组合这些元素形成完整的地图,这就是本章要介绍的主要内容。如下图是组成坦克大战地图的所有元素(16x16像素):接下来让我们看一幅游戏中的场景:可以看到,整个游戏场景就是由上面那些Tile构成的。这样,摆在我们面前的任务就很简单了:将地图依照Tile的大小分成若干格,将对应的Tile填到格子中。在前面讲Sprite的时候,我们知道可以将组

3、合在一张图片中的关键桢编号,以后就可以通过编号来使用这个桢(参看上一章桢动画的相关内容),这种方法也同样适用于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},

4、{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

5、,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对象Rectsrc=newRect(0,0,0,16);Rectdst=newRect();for(inti=0;i<13;i++){for(intj=0;j<13;j++){//根据Tile的编号得到对应的位置src.left=(map[i][

6、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_OldgameView;/**Calledwhentheactivityisfirstcreated.*/@OverridepublicvoidonCreate(BundlesavedInst

7、anceState){super.onCreate(savedInstanceState);gameView=newGameView_Old(this);setContentView(gameView);}好了,运行一下程序看看结果:对比一下原图,除了基地四周的砖块之外两者并无二致,可以说我们的Tile地图实践基本成功。现在我们知道了使用Tile显示地图的原理,实际上,我们不需要每次都很麻烦的写那么多代码,还记得前面说过

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。