La división por cero excepción causada por fotograma clave de animación (libgdx)

thesameritan:

Básicamente, he intentado implementar una animación en una de las pantallas de mi juego usando una TextureAtlas y utilizando .findRegions () para utilizar para el objeto de animación.

He intentado cambiar el nombre de los archivos a sus respectivos índices (así como la actualización de la carpeta .Pack)

Sample Pack Folder:

sunglasses_1.png
format: RGBA8888
filter: Nearest,Nearest
repeat: none
tile000
  rotate: false
  xy: 1, 1
  size: 600, 600
  orig: 600, 600
  offset: 0, 0
  index: -1
...and so on until sunglasses_35.png

También he leído sobre la misma cuestión en SAO aquí: Animación de la matriz de sprites creado a partir de atlas textura - sin embargo, no ayuda. También he leído la página de GitHub incluyendo información sobre animaciones y TextureRegions.

Estas son las líneas de código que se utilizaron para aplicar una animación

configuración de la animación

//animation setup with batch
        batch = new SpriteBatch();
        animationAtlas = new TextureAtlas(Gdx.files.internal("sunglasses.pack"));
        animation = new Animation<>(0.13f, animationAtlas.findRegions("sunglasses"), Animation.PlayMode.LOOP);

Animación llamada en la función de render () de la clase Screen

  @Override
    public void render(float delta) {
        float elapsedTime = 0f;
        elapsedTime += Gdx.graphics.getDeltaTime();

        Gdx.gl.glClearColor(0, 0, 0, 1);
        Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
        stage.draw();

        batch.begin();
        batch.draw(animation.getKeyFrame(elapsedTime), 100, 100);
        batch.end();
    }

Error

Exception in thread "LWJGL Application" java.lang.ArithmeticException: / by zero
    at com.badlogic.gdx.graphics.g2d.Animation.getKeyFrameIndex(Animation.java:138)
    at com.badlogic.gdx.graphics.g2d.Animation.getKeyFrame(Animation.java:122)
    at com.tantei.game.Screens.MainMenu.render(MainMenu.java:104)
    at com.badlogic.gdx.Game.render(Game.java:46)
    at com.tantei.game.Game.render(Game.java:21)
    at com.badlogic.gdx.backends.lwjgl.LwjglApplication.mainLoop(LwjglApplication.java:225)
    at com.badlogic.gdx.backends.lwjgl.LwjglApplication$1.run(LwjglApplication.java:126)

Cualquier ayuda se agradece !!

[EDIT] animation.getKeyFrames() devuelve un tamaño de 0 - por lo tanto la excepción. Todavía no entiendo por qué no tiene elementos

Tenfour04:

Su atlas no se crea correctamente para una animación, por lo que cuando se llama animationAtlas.findRegions, se devuelve una matriz vacía. Cuando se llama animation.getKeyFrame(), es la división por cero fotogramas de la animación, por lo tanto, la excepción.

Para animationAtlas.findRegions("sunglasses")el trabajo, sus regiones en el archivo del módulo serían cada necesidad exactamente el mismo nombre (gafas de sol), no tile000, tile001, tile003, etc, y cada uno debe tener un diferente indexdebajo de ellos, no todos tienen una indexde -1.

Tratar de crear una textura atlas manualmente se acaba castigando a sí mismo. Uso TexturePacker.

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=192161&siteId=1
Recomendado
Clasificación