libgdx使函数成为一个单独的类

时间:2014-06-30 07:49:04

标签: java libgdx

所以我有这段代码

public class MyGdxGame implements ApplicationListener {
private SpriteBatch batch;
private Texture grasstext;
private GrassField field;

@Override
public void create() {      

    batch = new SpriteBatch();

    grasstext = new Texture(Gdx.files.internal("data/grassA.png"));

    field = new GrassField();
}

@Override
public void dispose() {
    batch.dispose();
    grasstext.dispose();
}
@Override
public void render() {      
    Gdx.gl.glClearColor(1, 1, 1, 1);
    Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
    //DrawField(100,10,3,3,31);
    //DrawField(200,50,4,2,31);
    field.DrawField(10, 10, 3, 5, 31);
}

@Override
public void resize(int width, int height) {
}

@Override
public void pause() {
}

@Override
public void resume() {
}

public void DrawField(int x,int y,int width,int height,int value)
{
    for(int xt=0;xt<width;xt++)
    {
        for(int yt=0;yt<height;yt++)
        {
            batch.begin();
            batch.draw(grasstext,((x+xt)+xt*value),((y+yt)+yt*value));
            batch.end();
        }
    }
}

我希望能够从另一个类调用函数“DrawField”。我尝试创建一个包含与此函数相同的代码的新类,从中创建一个对象并调用该函数,但我得到一个空指针异常

1 个答案:

答案 0 :(得分:0)

我可以猜测你做了什么,所以如果你可以输入你的新类的代码(我猜它是GrassField)会很好,但是你检查了批处理对象(SpriteBatch)和grasstext(纹理)在GrassField有售吗?据我所知,你使用的是没有任何参数的构造函数,我看不到任何包含所需引用的方法。您可以尝试使用构造函数或使用GrassField的单独方法添加所需的对象。它可能看起来像这样:

public class GrassField {
private SpriteBatch batch;
private Texture grassText;

public GrassField(SpriteBatch batch, Texture grassText) {
    ...
    this.grassText = grassText;
    this.batch = batch;
    ...
}

..........

}