2017-02-09 3 views
2

В настоящее время я создаю шутер от первого лица от 3D с java LWJGL. Я хочу повернуть и перенести пулю в определенную точку мира. Мне удалось заставить пулю включить ось Y, но не X и Z. Как я могу заставить пулю включить оси Z и X, а затем перейти к точке?Как сделать движение пули в точку в трехмерном пространстве

Вот моя пуля Класс:

package entities; 

import org.lwjgl.util.vector.Vector3f; 

import models.TexturedModel; 
import renderEngine.DisplayManager; 
import toolbox.MousePicker; 

public class Bullet extends Entity{ 

private static Vector3f currentRay = new Vector3f(); 
private static final float RAY_RANGE = 600; 
public static boolean reset = true; 
public Bullet(TexturedModel model, Vector3f position, float rotX, float rotY, float rotZ, float scale) { 
    super(model, position, rotX, rotY, rotZ, scale); 

} 
public void move(Bullet b){ 
    float distance = 2 * DisplayManager.getFrameTimeSeconds(); 
    currentRay = MousePicker.calculateMouseRay(); 
    Vector3f endPoint = MousePicker.getPointOnRay(currentRay, 10000); 
    //I want my Bullet to move towards the Vector3f endPoint 

    float zDistance = endPoint.z - this.getPosition().z; 
    float xDistance = endPoint.x - this.getPosition().x; 
    double angleToTurn = Math.toDegrees(Math.atan2(xDistance,  zDistance)); 
    this.setRotY((float)angleToTurn); 
    float dx = (float) (distance * Math.sin(Math.toRadians(super.getRotY()))); 
    float dz = (float) (distance * Math.cos(Math.toRadians(super.getRotY()))); 

    super.increasePosition(dx, 0, dz); 


} 
    } 
+0

Вы уверены, что вы хотите получить 3 углы, чтобы повернуть? Возможно, вы можете установить скорость мгновенно: targetPosition.sub (bulletPossition) .normalize(). ScalarMult (bullet.maxSpeed) И добавив эту мгновенную скорость в позицию в каждом цикле обновления (Извините, если методы не совсем то же, что и Vector3f, для меня это было какое-то время :)). – Pignic

+0

Что такое targetPostion? – Disser

+0

Извините, это именно то, что вы назвали endPoint – Pignic

ответ

0

То, что вы хотите сделать, это получить скорость требуется, чтобы сделать вашу пулю ближе к цели (здесь мышь) endPoint.

Итак, сначала вы получите вектор между двумя endPoint.sub(position);

Тогда вы normalize() его, чтобы получить направление.

Вы, scale(), с вашей желаемой скоростью, чтобы получить мгновенную скорость.

и вы super.increasePosition(speed.x, speed.y, speed.z);, чтобы заставить его двигаться к цели

+1

Большое спасибо! Он, наконец, работал после двух месяцев разочарования! – Disser

+0

Отлично, можете ли вы закрыть сообщение, подтвердив свой ответ? ;) – Pignic

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