论坛首页 移动开发技术论坛

JAVAME学习笔记(8)

浏览 1404 次
该帖已经被评为隐藏帖
作者 正文
   发表时间:2009-01-10  
Layer是一个抽象类,表示游戏中的一个可视元素。上节中讲述的Sprite就是Layer的一种。每个Layer都有位置(取决于它的左上角在其容器中的位置),宽度,高度和可视与否。 Layer的子类必须实现一个paint(Graphics)方法,使得它们能够被渲染。如果该Layer可见。 Layer从它的左上角开始渲染,其当前坐标(x,y)是相对于原始的Graphics对象。当渲染Layer时,应用程序可以使用剪辑和坐标变换来控制并限制渲染的区域。实现此方法的子类有责任检查Layer是否可见,如果不可见,这个方法应该不做任何事。此外,调用此方法不应该改变Graphics对象的属性(剪辑区域,坐标变换,绘图颜色等等)。

Layer的位置坐标(x,y)通常都是相对于Graphics对象的坐标系统,该对象通过Layer的paint()方法传递。这个坐标系统被称为绘图坐标系统。一个Layer的初始位置是(0,0)。

6.4.1   TiledLayer
TiledLayer由一系列单元格组成,单元格可被一组贴图填充。这个类允许不必使用特别大的图像来创建大的虚拟层。这个技术在2D游戏中被广泛用于创建特别大的可卷动的背景。



贴图(Tiles)



贴图用于填充TiledLayer的单元格,由一个单一的可变或不可变的Image对象提供。图像被切割成一系列相同大小的贴图;贴图大小随Image一同指定。如下图所示,相同的一系列贴图可以以不同的方式存储,取决于对游戏开发者而言方便与否。





每个贴图都被赋予一个唯一的索引号。位于图像最左上角的贴图被赋予索引号1。剩下的贴图按照一行一行的顺序(首先是第一行,然后是第二行,以此类推)依次递增。这些贴图被视为静态贴图(static tiles),因为贴图和图像内容有固定的联系。



当实例化一个TiledLayer时,一组静态贴图就被创建了;也可以在任何时候调用setStaticTileSet(javax.microedition.lcdui.Image, int, int)方法来更新它们。



除了静态贴图外,开发者同样能够定义一系列动态贴图(animated tiles)。一个动态贴图就是一个虚拟的贴图,它与一个静态贴图动态地联系在一起;一个动态贴图的外观就是当时与之联系的静态贴图。



动态贴图允许开发者能非常容易地改变一组单元格的外观。对于用动态贴图填充的单元格而言,改变它们的外观仅仅需要简单地改变与动态贴图关联的静态贴图即可。此技术对于动画显示大的重复性区域非常有用,因为不需要显式地改变大量单元格的内容。



动态贴图可以通过调用createAnimatedTile(int)方法来创建,该方法返回一个索引号,用于标记新创建的动态贴图。动态贴图的索引号总是负数,并且也是连续的,起始值为-1。一旦被创建,与之关联的静态贴图可以通过调用setAnimatedTile(int, int)方法来改变。



单元格(Cells)

TiledLayer由相同大小的单元格组成;每行和每列的单元格数目在构造方法中指定,实际大小取决于贴图的大小。



每个单元格的内容由贴图索引号指定;一个正的贴图索引号代表一个静态贴图,一个负的贴图索引号代表一个动态贴图。索引号为0的贴图表示该单元格为空;为空的单元格是完全透明的,并且不会被TiledLayer绘制任何内容。缺省的,所有单元格都包含索引号为0的贴图。
论坛首页 移动开发技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics