2016-03-15 2 views
1

У меня есть Java-игра, в которой я хочу сделать форму стрельбы, которая порождает три пули под разными углами. Примером выстрела может быть примерно следующее:Выполнение пули в java-игре

* * 
    * 
ship 

Где * представляют собой пули. У меня есть реализация, которая порождает одну пулю перед кораблем с определенной скоростью. Как можно было бы создать еще две пули, такие как очень плохая диаграмма выше.

Вот как я на самом деле создать пулю Infront корабля:

public void mkCannonball(){ 

    Vector2D shipPos = new Vector2D(direction); 
    shipPos.normalise().mult(this.radius +2).add(position); 
    Vector2D bulletTrajectory = new Vector2D(direction); 
    bulletTrajectory.normalise().mult(Constants.BULLET_SPEED).add(velocity); 
    cannonball = new Cannonball(new Vector2D(shipPos), new Vector2D(bulletTrajectory)); 
    SoundManager.fire(); 
} 
+0

Просто используйте 'direction' и вращайте его по любому углу, который вам нужен, затем создайте еще один« Cannonball ». Вы также можете вызвать 'mkCannonball' 3 раза и передать угол в качестве параметра, но вы, вероятно, не захотите повторять все вычисления 3 раза, а также воспроизводить звук 3 раза. – Thomas

+1

Btw, я бы предположил, что метки пули и скорости здесь неверны, поскольку они применяются к библиотекам с этими именами. – Thomas

ответ

1

я бы, вероятно, сделать что-то вдоль этих линий ...

public void mkCannonball(){ 

    Vector2D shipPos = new Vector2D(direction); 
    shipPos.normalise().mult(this.radius +2).add(position); 

    Vector2D leftBulletTrajectory = new Vector2D(direction - 1); 
    Vector2D rightBulletTrajectory = new Vector2D(direction + 1); 

    leftBulletTrajectory.normalise().mult(Constants.BULLET_SPEED).add(velocity); 
    rightBulletTrajectory.normalise().mult(Constants.BULLET_SPEED).add(velocity); 

    leftCannonball = new Cannonball(new Vector2D(shipPos), new Vector2D(leftBulletTrajectory)); 
    rightCannonball = new Cannonball(new Vector2D(shipPos), new Vector2D(rightBulletTrajectory)); 

    SoundManager.fire(); 
} 

В основном только создание двух траекторий (левая и справа) с измененными направлениями. Затем создайте два пушечных ядра, используя эти траектории.

Я думаю, что трюк будет определять, как изменить направление вектора на пару градусов для левой и правой. В приведенном выше коде я использовал только + и - 1.

+0

Это отличное решение! Хотя я заметил, что, когда пули появляются в определенном направлении корабля, они появляются в корабле и сталкиваются с ним. В любом случае эта реализация действительно работает! – Volken

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