libGDX与Kotlin移动游戏开发

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

MajirefyPosted by

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


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

在Kotlin中编写资源管理器

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

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

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

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

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

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

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

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

打赏

Leave a Reply

电子邮件地址不会被公开。 必填项已用*标注

This site uses Akismet to reduce spam. Learn how your comment data is processed.