2011-01-12 2 views
1

Так что, по сути, я пытаюсь получить объект (игрок), чтобы выстрелить из него в прямой линии а затем просто продолжайте, поэтому, если «пистолет» заострен под углом 35 градусов (при этом 0 градусов находится справа от экрана, добавляя до 360 оборотов против часовой стрелки), тогда пуля будет двигаться с постоянной скоростью (скажем, 5) под этим углом от начала координат.Перемещение объекта из точки A в точку B по прямой линии с постоянной скоростью

Поскольку я делал свое движение, у меня была функция, называемая обновлением, которая обрабатывала бы весь чертеж, а что нет, а затем, когда дело касалось движения, оно просто добавило бы вертикальную скорость и горизонтальную скорость к уже существующим x и y, и это было слишком сложно, чтобы попытаться обойти его, чтобы он добавлял подходящую горизонтальную и вертикальную скорость для перемещения под этим углом с постоянной скоростью, поэтому любая помощь будет оценена. -Heath

ответ

1

Возможно, вы можете сделать свой метод update() для измерения времени с момента последнего вызова и обновить местоположение пули на основе этого?
Это сделало бы пулю двигаться с постоянной скоростью. (Учитывая, что FPS достаточно большой)

EDIT2:

public class Bullet { 
    // speed is in units/second 
    // angle is in radians 
    double x; 
    double y; 
    double sv; 
    double sh; 
    public Bullet(double x, double y, double angle, double speed) { 
    this.x = x; 
    this.y = y; 
    sv = Math.sin(angle)*speed; 
    sh = Math.cos(angle)*speed; 
    last_updated = System.currentTimeMillis(); 
    } 

    long last_updated; 

    public void update() { 
    long time_elapsed = System.currentTimeMillis() - last_updated; 
    last_updated = System.currentTimeMillis(); 
    this.x += this.hs*(this.time_elapsed/1000) 
    this.y += this.vs*(this.time_elapsed/1000) 
    } 
} 

Может быть, вы должны играть с углом, чтобы сделать его пригодным для вашей системы координат. (что-то вроде отрицания угла, добавления/вычитания Pi и т. д.)

Надеюсь, это поможет.

+0

Я мог бы попробовать это, но я все равно не буду его правильно перемещать – Foxx

+0

Не могли бы вы отправить код для этого метода? Где-то вроде pastebin.com. Затем мы сможем рассмотреть и предложить что-то. – Rogach

+0

его довольно создание: bullet (x, y, vs, hs)/update: update() {this.x + = vs; this.y + = hs;} – Foxx

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