tutorial games java libgdx

java - games - libgdx ubuntu



¿Cómo puedo hacer un seguimiento del tiempo transcurrido en la API de terceros de Java "LibGDX"? (4)

Estoy haciendo un juego en el que el jugador ("Bob") se mueve verticalmente y recoge monedas continuamente. Si el jugador no consigue recoger ninguna moneda durante 5 segundos, "Bob" comienza a caer. A medida que el tiempo continúe descendiendo, caerá más rápido.

Mi pregunta es esta: ¿cómo se hace un seguimiento del tiempo transcurrido en una aplicación LibGDX (Java)?

El código de muestra sigue.

public void update (float deltaTime) { `velocity.add(accel.x * deltaTime,accel.y*deltaTime);` position.add(velocity.x * deltaTime, velocity.y * deltaTime); bounds.x = position.x - bounds.width / 2; bounds.y = position.y - bounds.height / 2; if (velocity.y > 0 && state == BOB_COLLECT_COINE) { if (state== BOB_STATE_JUMP) { state = BOB_STATE_Increase; stateTime = 0; } else { if(state != BOB_STATE_JUMP) { state = BOB_STATE_JUMP;//BOB_STATE_JUMP stateTime = 0; } } } if (velocity.y < 0 && state != BOB_COLLECT_COINE) { if (state != BOB_STATE_FALL) { state = BOB_STATE_FALL; stateTime = 0; } } if (position.x < 0) position.x = World.WORLD_WIDTH; if (position.x > World.WORLD_WIDTH) position.x = 0; stateTime += deltaTime; } public void hitSquirrel () { velocity.set(0, 0); state = BOB_COLLECT_COINE;s stateTime = 0; } public void collectCoine() { state = BOB_COLLECT_COINE; velocity.y = BOB_JUMP_VELOCITY *1.5f; stateTime = 0; }

y llama al método de recopilación en clase mundial en upate Bob como:

private void updateBob(float deltaTime, float accelX) { diff = collidetime-System.currentTimeMillis(); if (bob.state != Bob.BOB_COLLECT_COINE && diff>2000) //bob.position.y <= 0.5f) { bob.hitSquirrel(); }


has intentado usar Gdx.graphics.getElapsedTime()
(no estoy seguro con el nombre exacto de la función)

El método como en la versión 0.9.7 es ''Gdx.graphics.getDeltaTime ()'' por lo que la sugerencia anterior está absolutamente en el lugar.


lo hice así

float time=0; public void update(deltaTime){ time += deltaTime; if(time >= 5){ //Do whatever u want to do after 5 seconds time = 0; //i reset the time to 0 } }


sus

float time = 0; //in update/render time += Gdx.app.getGraphics().getDeltaTime(); if(time >=5) { //do your stuff here Gdx.app.log("timer ", "after 5 sec :>"); time = 0; //reset }


Al ver que esta respuesta tiene muchos puntos de vista, debo señalar un problema con la respuesta aceptada y proporcionar una solución alternativa.

Su ''temporizador'' se desplazará lentamente cuanto más tarde ejecute el programa debido al redondeo causado por la siguiente línea de código:

time = 0;

La razón es si la condición if comprueba si el valor de tiempo es mayor o igual a 5 (muy probablemente será mayor debido a errores de redondeo y el tiempo entre fotogramas puede variar). Una solución más robusta es no "reiniciar" el tiempo, sino restar el tiempo que esperó:

private static final float WAIT_TIME = 5f; float time = 0; public void update(float deltaTime) { time += deltaTime; if (time >= WAIT_TIME) { // TODO: Perform your action here // Reset timer (not set to 0) time -= WAIT_TIME; } }

Es muy probable que no note este sutil problema durante las pruebas rápidas, pero al ejecutar una aplicación por un par de minutos puede comenzar a notarlo si está mirando cuidadosamente el momento de los eventos.