我有一个包含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);
}
如何在敌人的单个实例上进行动画而不是所有动画?
答案 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);
}