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