2015-03-17 2 views
0

Это сводит меня с ума и не имеет абсолютно никакого смысла.Простая математическая функция Java не работает

private double currentTime, oldTime; 
float dt; 
float xMove = .125f; 
float yMove = .125f; 
float cameraPosX = 1.0f; 
float cameraPosY = 1.0f; 


private void CameraMenuAnimation(){ 
    cameraPosX += xMove * dt; 
    cameraPosY += yMove * dt; 
    GameCamera.setCameraPos(cameraPosX, cameraPosY); 
    System.out.println("xMove: " + xMove + " cameraDT: " + dt + " cameraPosX: "+ cameraPosX); 
} 

@Override 
public void update() { 
    currentTime = System.currentTimeMillis(); 
    dt = (float) (currentTime - oldTime); 
    oldTime = currentTime; 

    CameraMenuAnimation(); 
} 

В Println заявлении выше, он печатает

System.out (21557): XMove: 0,125 cameraDT: 20,0 cameraPosX: 1.7832686E11

печатается в цикле и cameraDT: изменяет значение для каждого цикла, как следует. cameraPosX никогда не изменяет значение, и значение слишком высокое. Как это может быть возможным? Это просто простая операция умножения и добавления в CameraMenuAnimation().

Также, если я жестко код, значение dt в нем работает.

private void CameraMenuAnimation(){ 
     cameraPosX += xMove * 20.0; 
     cameraPosY += yMove * 20.0; 
.../ 

Как это возможно?

+0

Возможно, это черепица, но слишком высокая слишком высокая скорость, и вы больше не видите ее. Попробуйте масштабировать движение вниз, например, используя 'dt/1000', чтобы узнать, поможет ли вам поймать движение. –

+0

Нет, потому что он обращается вспять, когда он достигает определенного значения. Я не показывал этот код. И, как я сказал выше, если я жестко кодирую значение в нем работает. – NJGUY

+0

Знаете ли вы, что означает 1.78E11? Это приемлемая камера POSX для вас? Как это получилось так высоко? –

ответ

2

Похоже, вы никогда не инициализируете oldTime. Это объясняет поведение, которое вы видите, что cameraPosX получает действительно большую ценность в первый раз, а затем едва изменяется.

1

Вы можете проверить присвойте значение этого

dt = (float) (currentTime - oldTime); 

я думаю, что это приводит к возникновению проблем.

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