第7章游戏编程.pptVIP

  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文档。上传文档
查看更多
小结 本章中对TiledLayer的功能进行了阐述,主要包括生成、填充以及和Sprite的碰撞检测,另外,也讲解了LayerManager的用法。 * * 从构造函数中可以看出,参数3是一个Image对象,表示TiledLayer封装的地图所对应的图片。 因为一个游戏的背景占用的屏幕空间往往很大,为了显示人物移动,背景往往需要不断的滚动显示。所以如果都是使用一副大图片的画,一方面美工不容易做,代价太高。另一方面就是程序处理的效率很低,内存占用太多。由于背景往往很多局部画面是相同的,所以往往使用许多小图片平铺形成一副完成的背景图片。 * * 在一般的游戏内,在地图中,当Sprite接触到墙壁时,都不能运动,接触到草地时却能运动,因此想到一个策略,将所有的墙壁看成一个图层,将所有的草地看成一个图层。这样的话,碰撞检测时就可以较好地进行判断了。 一个完整的地图,实际上相当于是用很多TiledLayer重叠起来的。 * 显然,这个地图由两个图层组成,一个为草地,一个为墙壁。如果用传统方法,这两个图层一起滚动,比较麻烦,可以用LayerManager将这两个图层统一管理起来工作。 * 对于游戏背景大于手机显示屏幕的游戏来说,在屏幕中需要显示的只是其中的一部分。 LayerManager类提供了可视窗口机制来实现这个功能。在将LayerManager中的所有图层画到画布上时,还可以设定只画图层上的某一个小窗口区域。具体画哪一部分,是用如下函数在LayerManager上确定一个矩形:。 手机 游戏开发 图层 1:用于制作游戏背景的类: javax.microedition.lcdui.game.TiledLayer 2:用于图层管理的类: javax.microedition.lcdui.game.LayerManager TiledLayer类 GameCanvas显示之后,界面背景是白色,但是,很多界面上还有地图的应用。如图所示,界面上有块区域,有草地和墙壁。 地图可以用TiledLayer类实现。 TiledLayer类 在Game API内,Sprite是Layer的子类,Layer还有另一个子类:TiledLayer。 Tiled中文意思就是平铺,TiledLayer类就是用图片来平铺屏幕背景的类,即常说的贴图。 TiledLayer用于制作一些静态的目标,如地图、背景等。 切割和填充地图 TiledLayer构造函数有1个: 切割和填充地图 为了节省资源,我们不可能将一整张地图单独作为一个图片。仔细观察案例地图,会发现,该地图实际上可以分为4行4列,16个单元格,这些单元格,要么是墙壁,要么是草地。如图所示: 0 2 1 0 3 2 1 3 怎样告诉系统这幅地图分为4行4列呢?这就靠构造函数的参数1和参数2了。 参数1表示将地图分成的列数,参数2表示将地图分成的行数。 切割和填充地图 切割和填充地图 这幅地图的源图片(map.png)实际上如图所示: 所以,在TiledLayer的构造函数中,第3个参数应该传入的就是这幅源图片的对象。传入这幅源图片之后,系统将它分割成为2块,用左边的小块表示青草的区域,用右边的小块表示墙壁的区域。 切割和填充地图 该图片传入之后,系统怎么知道它要被划分为2块呢?这就由构造函数的第4个和第5个参数决定了。 参数4和参数5确定了每一小块的宽度和高度。 案例中的图片,当每一小块宽度确定为整个图片宽度的1/2,每一小块高度确定为整个图片高度时,图片被自动划分为2小块,从左到右分别编号为:1、2。注意:不是从0开始。 案例代码就可以写成: 注意,图片的宽度一定要能被2整除。 但是,有些图片可能不是1行2列的,这种情况下的标号是怎么确定的呢? TiledLayer文档中提到,切割图片原则为:首先按照行切,一行切完,取下一行,编号从1开始。 Image map = Image.createImage(/map.png); TiledLayer ta = new TiledLayer(4,4,map,map.getWidth()/2,map.getHeight()); 切割和填充地图 填充地图 将源图片进行切割之后,要填充到地图上去。TiledLayer类有一个重要函数: 该函数就是将源图片中的第tileIndex小块,填充到地图的第row行,第col列。 切割和填充地图 可以使用数组的方法对TiledLayer进行填充。 代码如下: int[][] cells = new int[][]{{1,2,1,2}, {1,2,2,2},

文档评论(0)

***** + 关注
实名认证
文档贡献者

本账号下所有文档分享可拿50%收益 欢迎分享

1亿VIP精品文档

相关文档