2017-06-16 12 views
0

Aus irgendeinem Grund, wenn ich versuche, Gdx.graphics.getDeltaTime() in meine Player-Klasse zu übergeben, ist die Float-Delta-Zeit null und gibt eine Nullzeiger-Ausnahme. Ich habe bereits versucht zu überprüfen, ob die Methode getDeltaTime funktioniert und wie sie zählt, aber wenn ich versuche, die Funktion zu durchlaufen, funktioniert sie nicht.Methode getDeltaTime() gibt mir null Exception?

Mein Hauptcode

 public class MyGdxGame extends ApplicationAdapter implements InputProcessor { 

SpriteBatch batch; 
private Player1 player1; 
private TiledMap iceLevel; 
private OrthogonalTiledMapRenderer renderer; 
private OrthographicCamera camera; 
float elaspedTime; 

@Override 
public void create() { 
    batch = new SpriteBatch(); 
    Gdx.input.setInputProcessor(this); 

    TmxMapLoader loader = new TmxMapLoader(); 
    iceLevel = loader.load("IceLevel.tmx"); 
    renderer = new OrthogonalTiledMapRenderer(iceLevel); 
    camera = new OrthographicCamera(); 
    camera.setToOrtho(false); 

    player1 = new Player1(new Sprite(new Texture("player1Right.png")), (TiledMapTileLayer) iceLevel.getLayers().get("Land")); 
    player1.setPosition(player1.getCollisionLayer().getTileWidth(), 6 * player1.getCollisionLayer().getTileHeight()); 
} 

@Override 
public void render() { 
    player1.update(Gdx.graphics.getDeltaTime()); 

    Gdx.gl.glClearColor(1, 0, 0, 1); 
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); 
    batch.begin(); 

    camera.update(); 
    renderer.setView(camera); 
    renderer.render(); 

    renderer.getBatch().begin(); 

    player1.draw(renderer.getBatch()); 

    renderer.getBatch().end(); 

    batch.end(); 
} 

@Override 
public void dispose() { 
    batch.dispose(); 
    iceLevel.dispose(); 
    renderer.dispose(); 
    player1.getTexture().dispose(); 

} 

Ein Teil meiner Spielerklasse

public class Player1 extends Sprite implements InputProcessor { 

private Vector2 velocity; 

private float speed = 60 * 2; 
private float gravity = 60 * 1.8f; 
private TiledMapTileLayer collisionLayer; 

public Player1(Sprite sprite, TiledMapTileLayer collisionLayer) { 
    super(sprite); 
    this.collisionLayer = collisionLayer; 
} 

public void draw(SpriteBatch spriteBatch) { 
    update(Gdx.graphics.getDeltaTime()); 
    super.draw(spriteBatch); 
} 

public void update(float delta) { 

    //gravity 
    velocity.y -= gravity * delta; 

    //set limit 
    if (velocity.y > speed) { 
     velocity.y = speed; 

    } else if (velocity.y < -speed) { 
     velocity.y = -speed; 
    } 

    // save old position 
    float oldX = getX(); 
    float oldY = getY(); 
    boolean collisionX = false; 
    boolean collisionY = false; 

    // move on x 
    setX(getX() + velocity.x * delta); 

    if (velocity.x < 0) { //going left 
     collisionX = collidesLeft(); 
    } else if (velocity.x > 0) { //going right 
     collisionX = collidesRight(); 
    } 

    // react to x collision 
    if (collisionX) { 
     setX(oldX); 
     velocity.x = 0; 
    } 
    // move on y 
    setY(getY() + velocity.y * delta * 5f); 

    if (velocity.y < 0) { // going down 
     collisionY = collidesBottom(); 
    } else if (velocity.y > 0) { // going up 

     collisionY = collidesTop(); 
    } 
    if (collisionY) { 
     setY(oldY); 
     velocity.y = 0; 
    } 
} 
+1

Floats nicht null sein kann. Die Ausnahme für den Nullzeiger liegt wahrscheinlich daran, dass Sie die Grafiken nicht initialisiert haben oder dass Sie sie versehentlich auf null gesetzt haben. Starten Sie das Spiel mit dem Standard-Desktop-Launcher? Können wir bitte auch Ihre Stapelverfolgung sehen? – Charanor

Antwort

0

Gerade refactor Delta-Zeit, um auszuschließen, Sie so codieren: -

@Override 
public void render() { 
float delta = Gdx.graphics.getDeltaTime(); 
// Log or print this 
if(delta > 0){ 
    player1.update(Gdx.graphics.getDeltaTime()); 

    Gdx.gl.glClearColor(1, 0, 0, 1); 
    ....... 
    ....... 
} 
0

Klingt Player-Klasse Update() -Methode ist das Problem, aber nicht das Float-Delta. Sieht aus wie es ist Geschwindigkeit. Es ist null.

private Vector2 velocity; 
... 
//gravity 
velocity.y -= gravity * delta; 

Sie versuchen den y public float Wert der Geschwindigkeit (Vector2), aber Sie nicht ein Geschwindigkeits Objekt instanziiert haben einzustellen.

Versuchen

private Vector2 velocity = new Vector2(); 
Verwandte Themen