libGDX与Kotlin
移动游戏开发(5)

原文地址:Creating an assets manager for libGDX using Kotlin | #5


加载和管理游戏资源,对于跨平台游戏来说非常重要,应该正确对待。libGDX有一个推荐使用的资源管理器AssetManager。这是所有资源保存的惟一场所,防止一个资源多次加载。加载过程是异步进行的,所以推荐在加载过程中显示一个加载过程画面或进度条。

在Kotlin中编写资源管理器

资源管理器的全部代码:AssetsManager.kt。因为需要只运行一个实例,所以采用单例模式:

https://gist.github.com/Majirefy/c1f70ed6b413b2bd9e9377f3d9361371

这就是Kotlin中单例模式的类的编写方式。单例运行一个AssetsManager,在游戏退出时候被释放。由于需要在加载所有资源的时候向用户显示一个启动画面,应该首先加载启动画面所有需要的资源:

https://gist.github.com/Majirefy/b59a4fc11f6e1872197625bfebc6f837

常量SPLASH_IMAGE_PATH是文件名字符串“splash.png”。调用finishLoading()方法来阻断进程,直到所有的资源加载完毕。这个方法并不会阻断用户界面。接着,加载其它资源:

https://gist.github.com/Majirefy/44d387dc51bd08a69101248f12b88bb0

在loadAtlas()方法中,遍历所有的资源管理器中的资源,并将其保存参考到一个hash map中,以便之后调用。对于动画文件也是一样。之前提到,精灵图是一个或几个包含所有精灵或资源的图像地图,被称为贴图地图TextureAtlas。这个地图被分为称为贴图区域TextureRegion的不同区域。所以贴图hash map集合中,字符串作为key、TextRegion作为value。动画地图也是如此,不过是一个动画作为value。使用以下代码来填充hash map:

https://gist.github.com/Majirefy/248f66fc0ea5b3177850d5cc3ea47f5c

字体是通过以下方式来创建和自定义的。BitmapFont(点位图字体)在游戏中无法调节字号,必须缩放其所在的图像。这会导致字体看起来很奇怪,所以除非使用很大的字体(耗费大量内存),或者使用gdx freetype扩展包。好处是可以迅速自由地按所需字号创建BitmapFont,并打包一个小巧的.tff文件到游戏中。不过缺点是HTML5的GWT不支持这个扩展功能。线性贴图滤镜可以显著提升字体显示质量。

https://gist.github.com/Majirefy/5287452925490bf3f885be8d45a30475

通过用以下代码,使用TextureRegion来创建动画。一个字符串数组被用来作为参数传入,数组包括texture region的名称。

https://gist.github.com/Majirefy/6d379bbcdbd819abfbdf8f861772520a

在Kotlin中使用Lambda表达式创建数组

Resources.AnimationNames枚举类中,用数组存储来需要创建的动画信息。最后的数字代表相应的帧。例如“jellybig_red_anim_0”是第一帧。利用Lambda表达式,可以轻松创建数组:

https://gist.github.com/Majirefy/cab6021967ea57c23f1a12026abfe09b

Majirefy

Majirefy

喜欢折腾,喜欢各种各样的生活。曾经年少不懂事,看着别人写代码的样子感觉好帅,于是走上了半个不归路……然而,比起代码更喜欢写一些纯粹的文章,却经常因为自我不满意删掉重来。喜欢分享,无论是生活美好的瞬间,还是技术上的发现,虽然经常苦恼技术能力不强。由于喜欢买qiong买qiong买qiong,所以时常写一些类似使用体验的文章。

您可能还喜欢...

发表回复

您的电子邮箱地址不会被公开。