由工厂生成的零KeyFrame动画,用于直接实例化

时间:2015-04-10 00:58:35

标签: java animation libgdx

用于定义和包含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>

0 个答案:

没有答案