2014-02-20 2 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(); 
    } 

Спрайт появляется почти для одного кадра, а затем исчезает. Я предполагаю, что это связано с тем, что все это не в методе render(), но я не уверен, как перенести его в этот метод.Спрайт появляется для рамки, затем исчезает {LibGDX}

ответ

2

Я предполагаю, что вы звоните chooseLane() с create(), show() или resume() метод. Это означает, что вы когда-нибудь создадите машину, выберите полосу для этой новой машины и затем нарисуйте ее один раз на экране.

После этого 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

Спасибо, я получил Sprite, чтобы остаться на экране, но теперь мой таймер сломана>> Я настроил 'долго lastSpawn; '+ an' if (TimeUtils.nanoTime() - lastSpawn> 1000000000) { \t \t \t chooseLane(); \t \t} 'с' lastSpawn = TimeUtils.nanoTime(); 'в методе spawnCar. Таймер работал отлично, прежде чем я изменил ситуацию, не могу понять, что заставляет его перестать считать прошлое сейчас = P – CodingNub

+0

Метод рендеринга как параметр, называемый delta, который является временем, прошедшим с момента визуализации последнего кадра. Я предполагаю, что вы хотите обновлять игру каждую секунду? создайте переменную, называемую passDelta, и продолжайте добавлять к ней значение delta, пока не будет передано значение Delta> 1, обновите игру и сбросьте значениеДельта. – danielz

Смежные вопросы