libgdx:[40]level loader

2024-10-17 07:40:31

本篇是关于level (管卡场景)加载器的实现。

工具/原料

libgdx

Implementing the level loader 实现level加载器

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

libgdx:[40]level loader

2、Create a new file for the Levelclass and add the following code:创建一个新文件:Level类并添加如下代码:*** ***代码太多相同的内容无法通过百度的检测

libgdx:[40]level loader

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

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

libgdx:[40]level loader

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

libgdx:[40]level loader

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

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

libgdx:[40]level loader

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

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

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

libgdx:[40]level loader

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

libgdx:[40]level loader
猜你喜欢