Jump to content

JasonCh

Members
  • Posts

    4
  • Joined

  • Last visited

Recent Profile Visitors

The recent visitors block is disabled and is not being shown to other users.

JasonCh's Achievements

Newbie

Newbie (1/14)

0

Reputation

  1. Problem solved. Must choose release build and sign it during testing from android studio's instant run. Debug builds seem to cause poor quality code generation. Now it's 60 fps again.
  2. I have 2 phones, a Huawei Y6 and a Sony Xperia sola. I narrowed down poor frame rate performance under 60fps down to spriter player.update() function The Sony Xperia sola has a dual core 1.0 ghz cortex A9, it is able to achieve 60 fps with 20 spriter players on screen. Mali-400 gpu The Huawei Y6 has a quad core 1.1 ghz cortex A7. it is struggling and only achieved 20 fps with 20 spriter players on screen. Adreno 304 gpu. The Xperia is at least 5 years old whereas the huawei Y6 is quite recent (2015 model) Benchmark apps rated the Y6 as almost twice the performance of the Xperia sola but on actual use of spriter player, it runs slower. It is not the spriter.draw speed, because without calling the player.update() function, the frame rate doesn't suffer. What is being done inside player.update() function that is destroying the cortex A7 cpu performance?
  3. Sorry posted in wrong section, please help move to developer help or implementation section.
  4. 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(); } }
×
×
  • Create New...