Как совместить пули с пистолетом?

У меня есть изображение моего плеера (2D сверху вниз). Игрок поворачивается лицом к камере и держит пистолет. Когда создаются пули, они создаются в координатах x и y игрока. Это работает, когда игрок смотрит в правильную сторону, но когда игрок поворачивается и стреляет, пули летят в правильном направлении, но не вылетают из пистолета. Как я могу это исправить?

public void fire() {
    angle = sprite.getRotation();
    System.out.println(angle);
    x = sprite.getX();
    y = sprite.getY();

    Bullet b = new Bullet(x, y, angle);
    Utils.world.addBullet(b);
}

person Shane    schedule 28.07.2012    source источник


Ответы (1)


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

Должно работать что-то вроде следующего: Примечание. Я не проверял это, и в нем могут быть опечатки

public void fire() {
    angle = sprite.getRotation();
    System.out.println(angle);
    x = sprite.getX();
    y = sprite.getY();

    double bulletX = x + (gunOffsetX * Math.cos(angle) - gunOffsetY * Math.sin(angle));
    double bulletY = y + (gunOffsetX * Math.sin(angle) + gunOffsetY * Math.cos(angle));

    Bullet b = new Bullet(bulletX , bulletY , angle);
    Utils.world.addBullet(b);
}

Источник: http://en.wikipedia.org/wiki/Rotation_(mathematics)

person Nick Eaket    schedule 28.07.2012
comment
Это не работает. Это почти то же самое, что и раньше, за исключением того, что теперь пули летят с разных позиций. Обратите внимание, что к игроку прикреплено не изображение оружия, а изображение игрока, держащего оружие. - person Shane; 28.07.2012
comment
Неважно! Я заставил его работать. Все, что мне нужно было сделать, это преобразовать угол в радианы, прежде чем использовать Math.cos(...) и Math.sin(...). - person Shane; 28.07.2012