繁体   English   中英

动画libGDX问题

[英]Animation libGDX issue

我创建了第一个动画类,称为Animation_SS。 为了制作此类,我从以下代码中获取代码: https : //github.com/libgdx/libgdx/wiki/2D-Animation 我将代码从该站点转换为我的课程。 我不知道为什么,但是运行程序后,它立即关闭。 我使用libGDX lib。 这是控制台输出

Exception in thread "LWJGL Application" java.lang.NullPointerException
at AnimationDemo.AnimationDemo.render(AnimationDemo.java:78)
at com.badlogic.gdx.backends.lwjgl.LwjglApplication.mainLoop(LwjglApplication.java:215)
at com.badlogic.gdx.backends.lwjgl.LwjglApplication$1.run(LwjglApplication.java:120)

它显示了render方法。

这是主班

public class AnimationDemo extends ApplicationAdapter {

Animation_SS walkGuy;

SpriteBatch batch;

@Override
public void create () {

    walkGuy = new Animation_SS(6, 0.025f, true);
    walkGuy.loadSS("StickSS.png");
    walkGuy.cropSS(4, 2);

}

@Override
public void render () {
    Gdx.gl.glClearColor(1, 0, 0, 1);
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);

    walkGuy.loadCurrentFrame();

    batch.begin();
    walkGuy.drawFrame(batch,10,10);
    batch.end();


}

}

这是Animation_SS类

int cols;
int rows;
int totalFrames;
float duration;
float stateTime=0f;

Boolean restart;

Texture texture;
TextureRegion[] frames;
TextureRegion currentFrame;
Animation myAnimation;

SpriteBatch batch;

public Animation_SS(int totalFrames, float duration, Boolean letItRestart){
    this.totalFrames = totalFrames;
    this.duration = duration;
    this.restart = letItRestart;
}

public void loadSS(String path){
    texture = new Texture(Gdx.files.internal(path));
}

public void cropSS(int FRAME_COLS, int FRAME_ROWS){
    this.cols = FRAME_COLS;
    this.rows = FRAME_ROWS;
    TextureRegion[][]framesArray = TextureRegion.split(texture, texture.getWidth()/FRAME_COLS, texture.getHeight()/FRAME_ROWS);
    frames = new TextureRegion[totalFrames];

    int index = 0;

    for (int i=0; i<rows; i++){
        for(int j=0; j<cols; j++){
            if(index<totalFrames)
                frames[index++] = framesArray[i][j];
        }
    }

    myAnimation = new Animation(duration, frames);

}

public void loadCurrentFrame(){
    stateTime +=1 *Gdx.graphics.getDeltaTime();
    currentFrame = myAnimation.getKeyFrame(stateTime, restart);
}

public void drawFrame(SpriteBatch batch, float x, float y){
    batch.draw(currentFrame,x ,y);
}

}

我猜您忘记了初始化SpriteBatch对象,在您的代码中看不到此行:

batch = new SpriteBatch();

因此,当您调用batch.begin(); render()方法中,您将获得一个NPE因为未创建此对象。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM