多语言展示
当前在线:248今日阅读:176今日分享:34

libgdx:[40]level loader

本篇是关于level (管卡场景)加载器的实现。
工具/原料

libgdx

Implementing the level loader 实现level加载器
1

我们将要实现level 加载器它将会读取并解析 图片数据。你或许需要查看一下我们在第三章中定义的level 格式。

3

Level类包含一个列举数据类型,他们将会代表我们游戏中的所有对象。每一个对象都有一个唯一的RGBA颜色值类识别他们。我们将会抛弃 透明度的通道,并且希望他们的颜色值都是完全不透明的。由于每一个颜色部分是一个8bit (8位),RGBA颜色是32位的值,而Java中的int 类型数值正好是32位的,所以用int类型的值来存储 RGBA颜色是最合适不过的了。

4

sameColor()方法,让我们可以很容易的比较两个颜色是不是相同的颜色,而且只是比较一个数值而不是比较四个。Level  有一个Rock 实例的列表:rocks。同样有Clouds 实例列表的变量Mountains 的和WaterOverlay的。所有这些变量将会在init()的level 加载进程中被填满。

5

在空的init()方法中填写如下代码:代码请查看图书

6

这个方法一开始创建了一个新的空的rocks列表。然后用Gdx.files.internal()获得文件操作,用来创建一个新的 pixmap 对象,它包括 我们的将要扫描和 解释的level图片的 像素数据。

7

扫描工作从图片的左上角到图片的右下角,baseHeight 变量被设置成最大高度减去当前扫描的像素点的高度的值,从而将像素点的y坐标值反转这样以来游戏对象将会在游戏世界中出现在正确的位置,从下往上增长,即便扫描工作是从左上角像右下角进行的。offsetHeight变量用于单独偏移游戏对象来适应游戏世界。 currentPixel变量存储这当前扫描的像素的颜色值。然后这个值会跟每一个已经定义的颜色值进行比较直到找到对应的颜色为止。如果没有找到相应的颜色信息,就会有一个错误信息被发送到控制台,表明有一个错误存在在我们 的游戏中。错误可以 是使用了一个未定义的颜色代码或识别方法 没有理这个颜色代码。错误消息将包含解码的RGBA值 ,这样使我们更多的了解一些故障信息。

8

在扫描工作完成之后,还有一些游戏对象需要初始化。作为装饰的 云、山、水平面。他们已经超出了Pixmap的宽度,他们需要实际的level的宽度来正常的工作。最终 Pixmaps被销毁以便释放被占用的资源。

9

直到现在我们的代码都是着眼于当有一个相匹配的颜色代码是会发生什么。我们现在实现的代码已经处理了我们的游戏对象将要使用的颜色代码,但是除了石头对象外还没有为别的对象定义实际的处理行为。如果当前的颜色代码是匹配的一个新的石头将会被创建并添加到rocks列表当中去。有一个lastPixel变量用来存储每一次遍历内循环中,上一个currentPixel的值。这个值使用临近的石头像素创建的石头对象来增加石头的长度,而不是重新创建一个新的石头对象。添加下面代码到空的render()方法:

10

这将最终绘制所有的level加载的元素 ,为游戏世界创建场景 。绘制工作的顺序是很重要的,后来的每次 绘制调用都会绘制在场景的最上面。绘图命令顺序可以想象 为有层次的,就像在图片中显示的那样。虽然没有真正的深度或在三维空间中的z轴。

11

每一个先绘制的对象都会显得比后来绘制的对象更深,更远,所以所有的山都比石头和水跟深远。

注意事项

代码内容和图片无法通过百度检测请谅解,有关代码的内容请查看图书内容

推荐信息