2014-10-26 2 views
0

У меня есть тачпад, который я хочу использовать для перемещения камеры. Мой текущий код перемещает камеру, добавляя вектор vector.pirection, масштабированный на 1 до вектора положения. Кажется, я не могу использовать что-то меньшее, чем одно, потому что оно начинает странно крутиться, когда я это делаю. Я желаю использоватьПеремещение ПерспективыКамера с помощью сенсорной панели

touchpad.getKnobPercentX() 
touchpad.getKnobPercentY() 

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

private void setKnobAction() { 
    if (pad.getKnobPercentY() > 0f) { 
     camera.position.add(camera.direction.scl(1f)); 
     camera.update(); 
    } 
    if (pad.getKnobPercentY() < 0f) { 
     camera.position.sub(camera.direction.scl(1f)); 
     camera.update(); 
    } 
    if (pad.getKnobPercentX() > 0f) { 
     right = camera.direction.cpy().crs(Vector3.Y).nor(); 
     camera.position.add(right.scl(1)); 
     camera.update(); 
    } 
    if (pad.getKnobPercentX() < 0f) { 
     right = camera.direction.cpy().crs(Vector3.Y).nor(); 
     camera.position.sub(right.scl(1)); 
     camera.update(); 
    } 
} 

Этот метод получает вызов в моем методе render(), поэтому его вызывают несколько раз. Кроме того, если knobPercent находится в 0, он начнет вращаться странно.

ответ

1

Javadoc из Vector3.scl(float scalar) говорит:

Весы это вектор на скаляр

Это означает, что вы на самом деле масштаб camera.direction Vector.
Учитывая, что a direction Вектор обычно равен Vector3 с длиной 1, что дает процент от каждой оси, вы должны заметить проблему.
Увеличение масштаба приводит к более быстрому перемещению каждого кадра, а его масштабирование приводит к более медленному перемещению каждого кадра.
Например: Вы перемещаетесь по x-направлению, camera.direction is Vector3(1, 0, 0). Вы масштабируете его на 2.
Теперь это Vector3(2, 0, 0), и вы двигаетесь на 2 единицы в этом фрейме. Опять же, он масштабируется, а в следующем кадре Vector3 (4, 0, 0) вы перемещаетесь на 4 единицы в этом кадре. И так оно продолжается и продолжается.
То же самое относится к масштабированию ниже 1.

Еще хуже - масштабирование с нулевым значением, так как оно устанавливает длину camera.direction в ноль. Это означает, что у вас больше нет информации о направлении, что вызывает странное вращение.

Так что вы Шоул сделать:
магазина другого Vector3, скопируйте значение camera.direction к нему (в начале каждого кадра), масштабировать его в getKnobPercentY() (на самом деле вы должны масштабировать его getKnobPercentY() * delta * speed) и добавить к Положение.
Затем сбросьте этот вектор снова (копировать значения camera.direction к нему), и делать то же самое для й значений (OFC теперь с crs(Vector3.Y))

+0

ли я по-прежнему необходимо использовать новый вектор я создаю еще хотя он уже копирует вектор направления? – user1678551

+0

Я думаю, что с копией он должен работать, но 'cpy()' создает новый 'Vector3', было бы лучше сохранить 1' Vector3' и изменить его значения. – Springrbua

+0

Спасибо, я пытался понять это несколько недель. – user1678551

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