AssetBuilder is a library for automatically scanning asset files and generating Java code that does the asset loading/disposing.
Previously, whenever you update assets for your libGDX
project, you might also need to update your code that did asset load/reference/dispose work. For example, when you add a TextureAtlas
to your project, you might need to add the following code:
public class AssetBundle {
protected AssetManager assetManager;
// The new added TextureAtlas
public TextureAtlas newAtlas;
// you might also want to add a field that reference the TextureRegion in TextureAtlas
public TextureRegion newRegion1;
public TextureRegion newRegion2;
public void loadAsset() {
assetManager.load("new_atlas.atlas", TextureAtlas.class);
// ...
// after the AssetManager actually loads the new TextureAtlas
newAtlas = assetManager.get("new_atlas.atlas", TextureAtlas.class);
newRegion1 = newAtlas.findRegion("newRegion1");
newRegion2 = newAtlas.findRegion("newRegion2");
}
}
This can be even boring when the TextureAtlas
contains a lot of TextureRegion
s or when you have to add/update/remove a lot of assets.
However, with AssetBuilder, you only need to press the hotkey inside your IDE and the plugin will generate the code for you within less than 1
second. See an example code generated by AssetBuilder inside the tests
folder here.
The library
folder contains the library code, while the plugins
folder contains plugin project for each IDE. Plugin projects depends on the library code. Currently there is only a Intellij IDEA
plugin for libGDX gradle-based projects. However, you can easily create plugins based on the library code.
Note that the library scans and resolves asset files based on file extension, e.g., by default it resolves "libgdx.atlas" as a TextureAtlas
asset then generate all the TextureRegion
field for you,and it resolves "hello.particle" as a ParticleEffect
asset, this can be adjusted in AssetBuilderOptions.json
mentioned below.
There is already a installable IDEA plugin zip inside the Intellij IDEA
plugin project folder, i.e., AssetBuilderForIDEA.zip
, you can build the plugin project youself or you can directly install this zip to IDEA.
To use the plugin, open your gradle-based libGDX project, select your project and press ctrl+alt+1
which is the default hotkey for the IDEA plugin, then a balloon tooltip should appear and shows the result. The first time plugin is run, it will generate Java code under core
project, and the package name and class name is com/gametravel/assets/gen/AssetBundle.java
, it will also create a file named AssetBuilderOptions.json
inside which you can adjust the plugin options for current libGDX project.
Using the code generated by AssetBuilder is quite easy and a lot like AssetManager
except you don't have to manually load each asset:
public class AssetBuilderTest extends ApplicationAdapter {
static AssetBundle asset;
private SpriteBatch spriteBatch;
@Override
public void create() {
spriteBatch = new SpriteBatch();
// get instance of AssetBundle
asset = AssetBundle.getInstance();
// you can call asset.update() or asset.finishLoading() just like what you did with AssetManager
asset.finishLoading();
}
@Override
public void render() {
Gdx.gl.glClearColor(0.2f, 0.2f, 0.2f, 1f);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
// directly use the newRegion1 field..
spriteBatch.draw(asset.newRegion1, 20f, 20f);
}
@Override
public void dispose() {
super.dispose();
// remember to dispose the AssetBundle instance
asset.dispose();
}
}
Currently the library supports automatic loading/dispose of Shader/SpineBinary/SpineJson/BitmapFont/Music/ParticleEffect/Sound/Texture/TextureAtlas
assets. Model/Pixmap/Skin
are not yet supported because I wasn't using these asset type when creating this tool.
I created this tool mainly to avoid typing the same boring asset loading/disposing code for every libGDX
project, especially those protype projects whose assets changed a lot. You might don't wanna load all assets at once in a large project, which is not yet supported by this tool, but you can fork and modify the tool, for example, you can put the assets loaded in menu
screen in folder asset_pack_menu
and game level pack1
assets in folder asset_pack_level_pack1
then udpated the code to handle this and generate AssetBundleMenu.java
and AssetBundleLevelPack1.java
, so you can load/dispose them separately.
Note that the code especially those generates AssetBundle
code is quite hard-coded because I wanted to finish the tool ASAP.
And the following are what AssetBuilder does for each kind of assets:
For Shader
, it generates field for ShaderProgram
;
For SpineBinaray
and SpineJson
, it generates field for SkeletonData
and AnimationStateData
, you can modfify the code to generate more fields, like com.esotericsoftware.spine.Animation
;
For BitmapFont
, Music
, Sound
, ParticleEffect
, Texture
, it will generate corresponding fields, note that the tool defaultly distinguish Music
and Sound
by duration of audio assets, if duration is less than 5 seconds, the asset is classified as Sound
, otherwise Music
, and the library didn't resolve duration well when you use custom extension for audio files (Too lazy to fix this XD);
For TextureAtlas
, it will generate TextureAtlas
field and a lot of TextureRegion
fields. It also avoids generating TextureRegion
fields of those for other assets, e.g., if it found a TextureRegion
goblin_arm is used for a SpineJson
asset, then the goblin_arm field will not be generated.
Copyright 2014 Daniel Chow (zhouhang283295087@gmail.com)
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
The AssetBuilder uses the following libraries:
MP3SPI - http://www.javazoom.net/mp3spi/mp3spi.html
Spine libGDX runtime - https://github.com/EsotericSoftware/spine-runtimes
jorbis - http://www.jcraft.com/jorbis/