2014-06-30 1 views
-1

j'ai donc ce codelibgdx faire des fonctions à une classe distincte

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(); 
     } 
    } 
} 

et je veux être en mesure d'appeler la fonction « DrawField » d'une autre classe. J'ai essayé de créer une nouvelle classe qui contient le même code que dans cette fonction, en en faisant un objet et en appelant la fonction mais j'obtiens une exception de pointeur nul

Répondre

0

Je peux juste deviner ce que vous avez fait pour que ce soit génial si vous pourriez mettre le code de votre nouvelle classe (je suppose que c'est GrassField), mais avez-vous vérifié si les objets batch (SpriteBatch) et grasstext (Texture) sont disponibles dans GrassField? Autant que je peux voir vous utilisez un constructeur sans aucun paramètre et je ne peux pas voir toutes les méthodes qui contiennent les références nécessaires. Vous pouvez essayer d'ajouter les objets nécessaires avec le constructeur ou avec une méthode séparée de GrassField. Il pourrait ressembler à quelque chose comme ça:

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

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

.......... 

}

Questions connexes