2012-02-25 85 views
4

我正在制作一个游戏,玩家(“Bob”)垂直移动并持续收集硬币。如果玩家没有设法收集任何硬币5秒,“鲍勃”开始下降。随着时间的推移,他会更快地倒下。我如何跟踪Java第三方API“L​​ibGDX”中的流逝时间?

我的问题是这样的:如何跟踪LibGDX(Java)应用程序中的流逝时间?

示例代码如下。

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

,并呼吁在世界级的collectmethod在upate作为鲍勃 -

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

回答

6

看到这个答案如何有大把的意见,我要指出的问题与接受的答案,并提供了一个替代的解决方案。

你的“定时器”将慢慢漂的时间越长你运行,因为由下面的代码行钝化而引起的程序:

time = 0; 

的原因是,如果条件检查,如果时间值大于或等于到5(很可能由于四舍五入误差和帧之间的时间差异而变得更大)。一个更强大的解决方案是不是“重置”的时间,但减去你的等待时间:

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

你很可能在快速测试没有注意到这个微妙的问题,但运行的应用程序的一对夫妇的如果您仔细查看事件的时间,您可能会开始注意到它的分钟数。

+0

你是对的我没想过 – Tiarsoft 2013-08-04 00:59:37

4

你试图使用Gdx.graphics.getElapsedTime()
(不准确的函数名确定)

的方法在build 0.9.7中是'Gdx.graphics.getDeltaTime()',所以上面的建议绝对是现场。

+3

该方法不存在 – YaW 2012-07-03 15:25:22

+2

如答案所述,使用'Gdx.graphics.getDeltaTime();'。 – aaronsnoswell 2013-02-04 02:37:13

6

我做到了这样的

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 

    } 
} 
1

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 
}