2014-02-20 80 views
0
public void chooseLane() { 
    lane = MathUtils.random(1, 3); 
    System.out.println(lane); 
    spawnCar(); 
} 

public void spawnCar() { 
    if(lane == 1){ 
     batch.begin(); 
     batch.draw(carsb, carP1X, carP1Y); 
     batch.end(); 
    } 
    if(lane == 2){ 
     batch.begin(); 
     batch.draw(carsb, carP2X, carP2Y); 
     batch.end(); 
    } 
    if(lane == 3){ 
     batch.begin(); 
     batch.draw(carsb, carP3X, carP3Y); 
     batch.end(); 
    } 

Sprite出現幾乎一幀然後消失。我猜這與所有不在render()方法中有關,但我不確定如何將此轉換爲該方法。Sprite出現一幀然後消失{LibGDX}

回答

2

我假定你從create(),show()resume()方法調用chooseLane()。這意味着你會產生一輛車,爲新車選擇一條車道,然後在屏幕上畫一次。

之後,LibGDX將移動到無限循環並繼續保持呼叫render()方法。可能你遵循了一些教程,並在你的渲染方法中得到了類似Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);的東西。然後這將清除你的屏幕,並刪除你的汽車。之後,它不會再被繪製。

你或許應該改變你的代碼如下所示:

public void chooseLane() { 
    lane = MathUtils.random(1, 3); 
    System.out.println(lane); 
} 

public void drawCar() { 
    batch.begin(); 
    if(lane == 1){ 
     batch.draw(carsb, carP1X, carP1Y); 
    } 
    if(lane == 2){ 
     batch.draw(carsb, carP2X, carP2Y); 
    } 
    if(lane == 3){ 
     batch.draw(carsb, carP3X, carP3Y); 
    } 
    batch.end(); 
} 

public void create()/show()/resume() { // choose whatever fits your case here 
    chooseLane(); 
} 

public void render(float deltaTime) { 
    Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT); 
    drawCar(); 
} 
+0

謝謝,我已經得到了雪碧留在屏幕上,但現在我的定時器壞>>我已經設置了'長lastSpawn;'+ an'if(TimeUtils.nanoTime() - lastSpawn> 1000000000){ \t \t chooseLane(); \t \t}'帶'lastSpawn = TimeUtils.nanoTime();在spawnCar方法中使用' '。計時器在我改變之前完全運行,似乎無法計算出什麼導致它停止計數過去一次= P – CodingNub

+0

作爲參數的渲染方法稱爲delta,它是自上一幀被渲染後經過的時間。我假設你想每秒更新遊戲?創建一個名爲passedDelta的變量並不斷添加delta值直到passedDelta> 1,更新遊戲並重置passedDelta。 – danielz

相關問題