用于定义和包含libgdx动画的类:
public class ScreenObject {
protected int width;
protected int height;
protected float stateTime;
protected String spriteSheetFile;
protected int spriteSheetCOLS;
protected int spriteSheetROWS;
protected float frameDuration;
protected Texture spriteSheet;
protected TextureRegion[] frames;
protected Animation animation;
public void makeAnimation() {
spriteSheet = new Texture(spriteSheetFile);
TextureRegion[][] temp = TextureRegion.split(spriteSheet, width, height);
frames = new TextureRegion[spriteSheetROWS * spriteSheetCOLS];
int index = 0;
for ( int i = 0; i < spriteSheetROWS; i++ ) {
for ( int j = 0; j < spriteSheetCOLS; j++ ) {
frames[index++] = temp[i][j];
}
}
animation = new Animation(frameDuration, frames);
stateTime = 0;
}
public void draw(SpriteBatch batch) {
TextureRegion currentFrame = animation.getKeyFrame(stateTime, true);
batch.draw(currentFrame, 0, 0);
}
}
如果我将这个类抽象化并将其扩展为TestScreenObject,我可以在构造函数中设置所有属性,然后调用makeAnimation(),一切都像我期望的那样工作。
但是,如果我使用工厂类使用setter动态设置属性值并将ScreenObject返回到ScreenObject []数组,然后通过引用数组索引在ScreenObject上调用makeAnimation():
sof = new ScreenObjectFactory();
planets = new Planet[] { sof.randomPlanet() };
planets[0].makeAnimation();
我在draw()调用中得到零错误:
Exception in thread "LWJGL Application" java.lang.ArithmeticException: / by zero
at com.badlogic.gdx.graphics.g2d.Animation.getKeyFrameIndex(Animation.java:142)
动画的KeyFrames数组中没有帧!但这令人难以置信。我已经验证了工厂生成并存储在ScreenObject []数组中的ScreenObject已经具有由setter设置的适当值,然后我调用使用这些值来制作动画的相同makeAnimation()方法......但是它只有一种方式而不是另一种方式。
我已尝试在getKeyFrame()上搜索ArithmeticException的其他问题,以及创建我的ScreenObject类的两种不同方法可能产生的效果,但我真的不知所措。< / p>