JasonCh Posted January 5, 2017 Report Share Posted January 5, 2017 Is there an official way to use AtlasLoader with AssetManager? My current solution is to modify AtlasLoader.java to check for assetmanager being assigned and to use that instead. My modifications in bold. public static AssetManager assetManager = null; public AtlasLoader(Data data, FileHandle atlas, String indexPrefix) { super(data); if (assetManager == null) this.atlas = new TextureAtlas(atlas); else this.atlas = assetManager.get(atlas.path(), TextureAtlas.class); Array<AtlasRegion> array = this.atlas.getRegions(); for(int i = 0; i < array.size; i++){ AtlasRegion region = array.get(i); if(region.index != -1) region.name = region.name+indexPrefix+region.index; } } This minor modification allowed me to write my own AsynchronousAssetLoader for scml files but the catch is I have to load the .atlas file using assetmanager first before I load the .scml file, If anyone else is interested in my example usage of AtlasLoader with custom AsynchronosAssetLoader, feel free to copy and modify it. I couldn't find a working sample to do this online so finally managed to get it done myself. SpriterObjectLoader.java import com.badlogic.gdx.assets.AssetDescriptor; import com.badlogic.gdx.assets.AssetManager; import com.badlogic.gdx.assets.loaders.AsynchronousAssetLoader; import com.badlogic.gdx.assets.loaders.FileHandleResolver; import com.badlogic.gdx.files.FileHandle; import com.badlogic.gdx.utils.Array; /** * Created by jason on 1/2/2017. */ public class SpriterObjectLoader extends AsynchronousAssetLoader<SpriterObject, SpriterObjectParameter> { public SpriterObjectLoader(FileHandleResolver resolver) { super(resolver); } SpriterObject spriterObject = null; @Override public void loadAsync(AssetManager manager, String fileName, FileHandle file, SpriterObjectParameter parameter) { //return new SpriterObject(fileName, parameter.batch, parameter.renderer, parameter.assetManager); this.spriterObject = new SpriterObject(fileName, parameter.batch, parameter.renderer, manager); } @Override public SpriterObject loadSync(AssetManager manager, String fileName, FileHandle file, SpriterObjectParameter parameter) { SpriterObject so = this.spriterObject; this.spriterObject = null; return so; } /* @Override public SpriterObject load(AssetManager manager, String fileName, FileHandle file, SpriterObjectParameter parameter) { return new SpriterObject(fileName, parameter.batch, parameter.renderer, parameter.assetManager); }*/ @Override public Array<AssetDescriptor> getDependencies(String fileName, FileHandle file, SpriterObjectParameter parameter) { return null; } } SpriterObject.java import com.badlogic.gdx.Gdx; import com.badlogic.gdx.assets.AssetManager; import com.badlogic.gdx.files.FileHandle; import com.badlogic.gdx.graphics.g2d.SpriteBatch; import com.badlogic.gdx.graphics.glutils.ShapeRenderer; import com.badlogic.gdx.utils.Disposable; import com.brashmonkey.spriter.Player; import com.brashmonkey.spriter.SCMLReader; import com.brashmonkey.spriter.gdx.AtlasLoader; import com.brashmonkey.spriter.gdx.Drawer; /** * Created by jason on 1/2/2017. */ public class SpriterObject implements Disposable { public Player player; public Drawer drawer; public AtlasLoader loader; FileHandle scmlFile; SCMLReader reader; FileHandle atlasFile; public SpriterObject(String fileName, SpriteBatch batch, ShapeRenderer renderer, AssetManager assetManager) { scmlFile = Gdx.files.internal(fileName); reader = new SCMLReader(scmlFile.read()); atlasFile = Gdx.files.internal(scmlFile.pathWithoutExtension() + ".atlas"); AtlasLoader.assetManager = assetManager; loader = new AtlasLoader(reader.getData(), atlasFile); loader.load(""); drawer = new Drawer(loader, batch, renderer); player = new Player(reader.getData().getEntity(0)); player.flipY(); } public void draw() { drawer.draw(player); } public void draw(float x, float y) { player.setPosition(x, y); drawer.draw(player); } public void dispose() { if (loader != null) { loader.dispose(); loader = null; Gdx.app.log("SpriterObject", "dispose " + scmlFile.name()); } } } Sample usage public void create () { manager = new AssetManager(); manager.setLoader(SpriterObject.class, new SpriterObjectLoader(new InternalFileHandleResolver())); batch = new SpriteBatch(); renderer = new ShapeRenderer(); SpriterObjectParameter param = new SpriterObjectParameter(); param.renderer = renderer; param.batch = batch; manager.load("jetcat/jetcat.atlas", TextureAtlas.class); //Load this atlas first before scml file. manager.load("jetcat/jetcat.scml", SpriterObject.class, param); } public void render () { Gdx.gl.glClearColor(1, 0, 0, 1); Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); if (manager.update()) { if (spriterObject == null) { spriterObject = manager.get("jetcat/jetcat.scml", SpriterObject.class); spriterObject.player.setAnimation("jetcat_center"); spriterObject.player.setPosition(600, 300); } spriterObject.player.update(); batch.setProjectionMatrix(cam.combined); batch.begin(); spriterObject.draw(); batch.end(); } } Quote Link to comment Share on other sites More sharing options...
JasonCh Posted January 5, 2017 Author Report Share Posted January 5, 2017 Sorry posted in wrong section, please help move to developer help or implementation section. Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.