`
wjlgryx
  • 浏览: 308662 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

使用TiledLayer类及Canvas类实现游戏背景图层

阅读更多
1. 创建一个平铺图层


MIDP 2.0 API通过TiledLayer类支持平铺图层,这个类使得创建和使用平铺图层变得相对容易。每个平铺图层都有一个相关的图像,它指定了一组用来描述平铺图层地图的贴砖。每个平铺图层都有一个地图,它包含了用来引用图层图像中的单个贴砖的贴砖索引。由于TiledLayer派生自Layer类,所以,可以按照和操纵游戏Sprite(精灵)差不多的方式来操纵,即可以改变平铺图层的位置、获得它的尺寸和位置、绘制它并且通过一小段简单的方法用来控制它的要见性。
创建一个平铺图层的时候,要以贴砖为单位指定它的宽度和高度,以及包含贴砖组的图像、贴砖的宽度和高度。每块贴砖的大小必须相同。当第一次创建一个平铺的图层的时候,这些信息都传递到TieldLayer构造函数中。
下面的代码摘自我做的游戏,其功能用来创建一个平铺图层:

//太空背景
private TiledLayer        waterLayer;

……

try{
                  waterLayer=new TiledLayer(50,200,Image.createImage("/res/backg.png"),32,32);
                } catch (IOException e) {
                        System.err.println("^_抱歉,太空背景图片加载失败^_^")

TiedLayer()构造函数中的头两个参数分别指定了平铺图层的列数和行数。第3个参数是一个Image对象。其余两个参数分别是每个贴砖的宽度和高度,在本程序中背景贴砖的宽和高都是为32像素的标准正方形。
创建了一个TiledLayer对象以后,接下来就是把其每个单元格设置为贴砖索引,从而创建其地图。贴砖索引都是从1开始计数,索引0是一个特殊的贴砖索引,表示贴砖空缺,即绘制平铺图层的时候,贴砖索引被指定为0的贴砖是透明的。
下面是本游戏中存储在一个一维整数数组中的图层地图(数值被忽略)

/*Setup the water tiled layer map*/
Int [] waterMap={
……
……
……
……
};

由于没有把贴砖索引数组传递给Tiedlayer的方法,所有必须多次调用setCell()方法把贴砖索引置入到平铺图层的每个单元格中。下面代码是本游戏使用一个for循环来为游戏平铺图层来完成这项任务的代码:



/*Set the contents of cells*/
                int column,row=-1;
                for (int i = 0; i < waterMap.length; i++) {
                        column = i % 24;
                        row = (i - column) / 24;
                        waterLayer.setCell(column, row, waterMap[i]);
                    }

这段代码通过循环访问了贴地砖地图的每个条目,并根据具体的行和列来设置平铺图层中的每个相应的单元格。这段代码可以很容易地进行修改以适应不同大小的地图,只要改变第2行和第5行代码中的行数和列数就可以了。
2. 移动和绘制一个平铺图层


Canvas类的update()方法是处理按键输入和和相应的地方。在本游戏中,按键输入导致背景图层在精灵下滚动,而精灵在游戏中由按键操作移动,关于按键的处理已在我的一篇博文《手机游戏中处理按键输入的方法》中提到。
使一个图层移动并且具有动感的代码如下: 
 

/***********背景更新*******************************/
  private void backGroundUpdate() {
    //实现背景的移动
        if(y<0)
        {
                y+=speedOfBG;
                downLimit-=speedOfBG;
                upLimit-=speedOfBG;
        }
                    
        //使太空背景具有动感
        if (++waterDelay > 3) {
            if (++waterTile[0] > 3)
                waterTile[0] = 1;
            waterLayer.setAnimatedTile(-1, waterTile[0]);
            if (--waterTile[1] < 1)
                waterTile[1] = 3;
            waterLayer.setAnimatedTile(-2, waterTile[1]);
            waterDelay = 0;
        }
  }


本文转载于http://dev.firnow.com/course/3_program/java/javajs/20100106/186638.html
分享到:
评论

相关推荐

    midp2.0 GameAPI实现

    GameCanvas是Game API中的关键类,它是Canvas类的子类,专为游戏设计。它提供了一个无用户界面的画布,可以全屏显示游戏画面,避免了与普通UI元素的冲突。开发者可以通过重写GameCanvas的`paint()`和`update()`方法...

    J2ME Tutorial, Part 3: Exploring the Game API of MIDP 2.0

    - **简介**:`LayerManager` 类提供了一种方便的方式来管理游戏中的各种可视元素(如精灵和背景图层),并确保它们按照正确的顺序进行渲染。 - **机制**:它通过管理不同的`Layer` 实例来控制游戏屏幕的显示顺序。 ...

    Java DevelopmentDeveloping Games with the Game API

    这个API包含了处理图形、声音、物理等多方面的类和接口,使得开发者可以专注于游戏逻辑的设计而不是底层细节的实现。 #### 3. 游戏画布(Game Canvas) **游戏画布**是游戏的主要显示区域,在这里绘制所有的游戏元素...

    JAME GameAPI

    3. **TiledLayer**:一种特殊的图层类型,主要用于处理地图或背景等大面积重复纹理。 4. **Layer**:抽象基类,所有具体的图层都继承自该类。 5. **Sprite**:另一种特殊的图层类型,用于表示游戏中的角色、物体等...

    郭克华 J2ME视频配套课件 及源码 ppt

    24:GameAPI3:TiledLayer和图层管理 网络应用开发 18网络编程1:Socket编程 19案例4:聊天室开发 20网络编程2:UDP编程 21网络编程3:HTTP编程 RMS开发 15RMS编程1:基础知识 16RMS编程2:高级知识 17案例3

    关于JAVAME试卷的整理

    1. **游戏编程与图形渲染**:在MIDP 2.0的游戏编程中,`TiledLayer`类被广泛用于绘制游戏地图。它提供了处理瓦片图层的能力,使得开发者能够高效地管理和渲染复杂的游戏场景。相比之下,`LayerManager`类用于管理多...

    MIDP2.0 Game API简介

    `GameCanvas` 类继承自 `Canvas`,专为游戏开发设计,提供了一系列优化方法,比如支持离屏缓冲区(Off-Screen Buffering),可以提高游戏性能,减少重绘时的闪烁现象。此外,`GameCanvas` 提供了对按键事件的支持,...

    JME试题及答案 socket 多线程 高级UI

    - **解析**:`TiledLayer`是用于构建基于平铺的2D游戏UI的重要组件,可以将一系列小图像拼接成一个更大的背景图层。 **13. Sprite初始化时图片宽度和高度不匹配时发生的情况** 正确选项为 **D**:异常 - **解析**...

    J2ME移动开发实战教学视频(9.多线程.rar)

    郭克华-J2ME移动开发实战教学视频() 全部课程内容: 1. 体系介绍和环境配置 ...22. GameAPI 1游戏画布,图层和游戏精灵 23.GameAPI 2Sprite碰撞检测和动画 24. GameAPI 3TiledLayer和图层管理 25. J2ME代码优化

    3. 高级界面开发2Command事件和List

    郭克华-J2ME移动开发实战教学视频() 全部课程内容: 1. 体系介绍和环境配置 ...22. GameAPI 1游戏画布,图层和游戏精灵 23.GameAPI 2Sprite碰撞检测和动画 24. GameAPI 3TiledLayer和图层管理 25. J2ME代码优化

    3.高级界面开发2Command事件和List1\03-2.swf

    郭克华-J2ME移动开发实战教学视频() 全部课程内容: 1. 体系介绍和环境配置 ...22. GameAPI 1游戏画布,图层和游戏精灵 23.GameAPI 2Sprite碰撞检测和动画 24. GameAPI 3TiledLayer和图层管理 25. J2ME代码优化

    3.高级界面开发2Command事件和List1\03-3.swf

    郭克华-J2ME移动开发实战教学视频() 全部课程内容: 1. 体系介绍和环境配置 ...22. GameAPI 1游戏画布,图层和游戏精灵 23.GameAPI 2Sprite碰撞检测和动画 24. GameAPI 3TiledLayer和图层管理 25. J2ME代码优化

    1. 体系介绍和环境配置

    郭克华-J2ME移动开发实战教学视频(我会全部上传~谢谢大家支持) 全部课程内容: ...22. GameAPI 1游戏画布,图层和游戏精灵 23.GameAPI 2Sprite碰撞检测和动画 24. GameAPI 3TiledLayer和图层管理 25. J2ME代码优化

    j2me-中文api(自己整合的简版pdf)

    - **TiledLayer**:用于处理基于瓷砖的地图或背景。 - **Math**:提供数学运算支持。 - **TimeZone**:提供时区信息。 - **Calendar**:提供日期时间的操作。 - **Random**:提供随机数生成。 - **Player**:用于...

Global site tag (gtag.js) - Google Analytics