如何在Array <enemy>中更新更多对象类Enemy的框架?

时间:2016-12-19 20:19:10

标签: java libgdx

我有一个包含Enemy类型的List,我使用下面的循环填充此列表:

for(....) {
arrayEnemy.add(new Enemy(new Rectangle(50.50f, 50.50f, 
Enemy.WIDTH, Enemy.HEIGHT), 
facesRight? 0.10f : -0.10f, 0.7f));
}

和cheking objects敌人:

    if(arrayEnemy.get(num).isDie){
        arrayEnemy.get(num).rendCountAnim++;                
        arrayEnemy.get(num).setStateEnemy(Enemy.StateEnemy.Deadening);
        arrayEnemy.get(num).getStateEnemy();                
        if (TimeUtils.millis()>(arrayEnemy.get(num).startTimeAnim+35100)) {
            arrayEnemy.removeIndex(num);
            break;
        }
    }

敌人类:

 public class Enemy {
    enum StateEnemy {
         Walking, Deadening
    }

    public StateEnemy stateEnemy = StateEnemy.Walking;
    static float WIDTH;
    static float HEIGHT;
    public boolean isDie = false;
    private Rectangle rect;
    private float velocityX;
    private float velocityY;
    public long startTimeAnim = TimeUtils.millis();
    public int rendCountAnim = 0;

    public Enemy(Rectangle rect, float velocityX, float velocityY) {
        this.rect = rect;
        this.WIDTH=rect.width;
        this.HEIGHT=rect.height;        
        this.velocityX = velocityX;
        this.velocityY = velocityY; 
    }

    public StateEnemy getStateEnemy() {
        return stateEnemy;
    }

    public void setStateEnemy(StateEnemy stateEnemy) {
        this.stateEnemy = stateEnemy;
    }

    public void moveX() {
        rect.x += velocityX;
    }
    public void moveY() {
        rect.y += velocityY;
    }

    public float getOldPointCellX(){    
        return oldPointCellX;
    }
    public float getOldPointCellY(){    
        return oldPointCellY;
    }

    public Rectangle getRect() {
        return rect;
    }

    public float getVelocityX() {
        return velocityX;
    }
    public void setVelocityX(float velocity) {
        this.velocityX = velocity;
    }
    public float getVelocityY() {
        return velocityY;
    }
    public void setVelocityY(float velocity) {
        this.velocityY = velocity;
    }
}

他们都像预期的那样在地上行走。但!!!我杀了一个敌人,但所有的敌人动画都改变了!这是渲染方法代码:

TextureRegion frameEnemy = null;
        if(arrayEnemy.size != 0){
            switch (arrayEnemy.get(num).getStateEnemy()) {

            case Walking:
                frameEnemy = animWalkEnemy.getKeyFrame(stateTime);
                break;  
            case Deadening:
                frameEnemy = animDeadEnemy.getKeyFrame(stateTime);
                break;  
            }
        }

        for(num=0; num < arrayEnemy.size; num++){
            batch.draw(frameEnemy, arrayEnemy.get(num).getRect().x,
            arrayEnemy.get(num).getRect().y, 
            Enemy.WIDTH, Enemy.HEIGHT);
        }

如何在敌人的单个实例上进行动画而不是所有动画?

1 个答案:

答案 0 :(得分:0)

与评论中指出的DavidS一样,您应该分别为每个frameEnemy对象设置Enemy。您可以按照以下方式执行此操作

for(Enemy enemy : arrayEnemy) {
    //Set the animation texture for the enemy object
    switch (enemy.getStateEnemy()) {
        case Walking:
            frameEnemy = animWalkEnemy.getKeyFrame(stateTime);
            break;  
        case Deadening:
            frameEnemy = animDeadEnemy.getKeyFrame(stateTime);
            break;  
    }

    //Render the enemy object
    batch.draw(frameEnemy, enemy.getRect().x, enemy.getRect().y, Enemy.WIDTH, Enemy.HEIGHT);
}