Quantcast
Channel: Question and Answer » libgdx
Viewing all articles
Browse latest Browse all 434

LibGDX multiple enemies animations

$
0
0

Hello everyone i have a question about animating multiple enemies on the screen at the same time.

Basically, i figured out how to use the Pool for creating enemies and dispose them after use etc..
All enemies are equal to each other, and all enemies have 3 different animations for creating, moving, destroying.

Everything is working fine, but when i have multiple enemies on screen, they are all animating at the same times, even if they were (obviously) created in different times.

For example, i create 3 enemies, make them moving on the screen and they all have the same frame.. the animation must be the same for all, but i expected that the time when they change frame should be different.

The animations are instantiated inside the Enemy class, so i guess every instance of Enemy must have its own animation.

This is how i draw them in the Renderer class:

private void drawEnemies(float runTime) {
    enemyArrayLen = catta.activeEnemies.size;
    for (int i = enemyArrayLen; --i >= 0;) {
            currentEnemyAnimation = catta.activeEnemies.get(i).getCurrentAnimation();
            batcher.draw(currentEnemyAnimation.getKeyFrame(runTime), catta.activeEnemies.get(i).getX(),
                    catta.activeEnemies.get(i).getY(), catta.activeEnemies.get(i).getWidth() / 2.0f,
                    catta.activeEnemies.get(i).getHeight() / 2.0f, catta.activeEnemies.get(i).getWidth(), catta.activeEnemies.get(i).getHeight(), 1, 1, 0);
    }

}

Enemies are stored in the catta.activeEnemies array.

currentEnemyAnimation is a “support” variable in which i put the Enemy in every cicle of the for cicle.

This is how i initialize an Enemy:

public void init(float posX, float posY, int width, int height) {
        this.position.set(posX,  posY);
        this.width = width;
        this.height = height;
        this.alive = true;
        this.enemyRunTime = 0;
        this.creationTime = 0.8f;
        this.destructionTime = 0.8f;
        this.crea_Animation = AssetLoader.enemy_creaAnimation;
        this.crea_Animation.setFrameDuration(this.creationTime / 4);
        this.mo_Animation = AssetLoader.enemy_moAnimation;
        this.des_Animation = AssetLoader.enemy_desAnimation;
        this.des_Animation.setFrameDuration(this.destructionTime / 4);
        this.enemyState = EnemyState.CREATING;

Maybe it’s all a runTime and delta matter?


Viewing all articles
Browse latest Browse all 434

Trending Articles