卷动背景(scroll background)

8 篇文章 0 订阅
7 篇文章 0 订阅

背景是游戏比较不重要但又不可或缺的一部分。这个游戏中需要有一个由上往下卷动的背景(就像游戏厅里所有的飞行射击游戏一样)。在MIDP2.0里,game包里新增的一些类型极大的方便了画面的制作(详见wireless toolkit api文档)。

 

LayerManager

       顾名思义,图层管理。即把若干个图层叠加在一起,上层的覆盖下层的。LayerManager规定index号为0的为最上层,然后index号累加,号码越大的越“背景”。

       用法:

1.       添加图层:

LayerManager layManager = new LayerManager();

layerManager.append(layer0);//0

layerManager.append(layer1);//1

最早添加的在最上层。

2.       变动每个图层:

此时每个图层上的图像的相应坐标原点就是layerManager的左上角而非屏幕了。

3.       画图:

在画图函数中直接写layerManager.paint(g,0,0);这样的句子,就分别把图层画出来了,不再需要一个一个图层自己画。

LayerManager的好处是方便(显然),并且所有的图层位置直接和背景相关,更符合实际也更便于计算和管理。

TiledLayer

移动设备存储空间有限,不可能为游戏存储一幅一幅的背景,于是把相同的背景元素提取出来,然后根据需要在各个位置画不同的元素来组成一幅画——就像星际的地图编辑器,地形一共也就那么几种,地图就是各种地形像地砖一样拼凑起来的(tiled)。具体用法见api文档。

 

卷屏:

有了上面这两个东西,实现卷屏就简单了。先设计一个地图(由数字组成,表示每个地方放哪一个标号的地形元素),再在每帧设置背景层的位置(卷动)

int[][] map = { { 0, 0, 0, 0, 0, 0 }, { 3, 0, 0, 0, 0, 0 },

                { 6, 0, 0, 0, 0, 0 }, { 6, 0, 0, 0, 1, 2 },

                { 6, 0, 0, 0, 4, 5 }, { 6, 0, 0, 0, 7, 8 },

                { 6, 0, 0, 0, 0, 0 }, { 9, 0, 1, 2, 3, 0 },

                { 0, 0, 4, 5, 6, 0 }, { 0, 0, 7, 8, 9, 0 },

                { 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0 },

                { 0, 0, 0, 0, 0, 0 }, { 3, 0, 0, 0, 0, 0 },

                { 6, 0, 0, 0, 0, 0 }, { 6, 0, 0, 0, 1, 2 },

                { 6, 0, 0, 0, 4, 5 }, { 6, 0, 0, 0, 7, 8 },

                { 6, 0, 0, 0, 0, 0 }, { 9, 0, 1, 2, 3, 0 },

                { 0, 0, 4, 5, 6, 0 }, { 0, 0, 7, 8, 9, 0 },

                { 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0 },

                { 0, 0, 0, 0, 0, 0 }, { 3, 0, 0, 0, 0, 0 },

                { 6, 0, 0, 0, 0, 0 }, { 6, 0, 0, 0, 1, 2 },

                { 6, 0, 0, 0, 4, 5 }, { 6, 0, 0, 0, 7, 8 },

                { 6, 0, 0, 0, 0, 0 }, { 9, 0, 0, 0, 0, 0 },

                { 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0 },

                { 0, 0, 0, 0, 0, 0 }, { 3, 0, 0, 0, 0, 1 } };

 

public void tick() {

        scrollTerrain();//卷动

}

 

private void scrollTerrain() {

        if (terrainScroll < 0) {

            terrainScroll += 2;

            terrain.setPosition(0, terrainScroll);//通过设置位置来卷动。

        }

}

 

源码打包:http://www.j2medev.com/bbs/dispbbs.asp?boardid=11&id=4028&star=1#21355

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值