"Прилипание" спрайта к спрайту

SFML и C++ Уроки \ Разработка игр Форумы SFML Graphics "Прилипание" спрайта к спрайту

В этой теме 2 ответа, 1 участник, последнее обновление Nikolay Nikolay 5 мес., 2 нед. назад.

Просмотр 3 сообщений - с 1 по 3 (из 3 всего)
  • Автор
    Сообщения
  • #5123
    Nikolay
    Nikolay
    Участник
    Сообщений:4

    Зарегистрирован:
    30.05.2019

    Репутация:1

    Здравствуйте. Не знаю, посещает ли кто-то еще форум, но вопрос есть вопрос, и я хочу его задать)

    Конкретно код не смогу вставить,т.к. вопрос достаточно глобальный.

    Суть на простом примере:

    Задумка: top down shooter

    Внешний вид: вид на персонажа идеально сверху, условно обозначим его кружком с небольшой стрелкой,которая указывает направление взора “солдата”.

    “Солдат” смотрит туда,где находится курсор,т.е. вращается через sprite.rotate();//ЭТО ВАЖНО

    Предполагается,что стреляет в том же направлении.

     

    Ближе к делу:

    У солдата есть оружие, из которого,по задумке,он и стреляет.

    Загвоздка в следующем: оружие находится не на одном векторе между “солдат”.sprite.getOrigin() и целью, а сбоку. Так вот,как реализовать спавн пуль из выбранной координаты,относительной самому спрайту оружия/солдата?

    для примера,если кто из читающих пользовался Construct 2 – там были т.н. Image point. Вот о них я говорю.

    #5124
    Nikolay
    Nikolay
    Участник
    Сообщений:4

    Зарегистрирован:
    30.05.2019

    Репутация:1

    Сразу оговорюсь, что из-за реализации поворотов getOrigin()+n отсекаем

    #5126
    +1
    Nikolay
    Nikolay
    Участник
    Сообщений:4

    Зарегистрирован:
    30.05.2019

    Репутация:1

    Итак,решение:

    sf::Vector2f newPoint = sprite.getTransform().transformPoint(pointToTransform);

    Небольшая инструкция по использованию:

    newPoint – условное название точки. При передаче позиции дочернему спрайту(например,оружию) указываем это название вектора. Например: gun.sprite.setPosition(newPoint);

     

    sprite.getTransform() – родительский спрайт(солдат).

    PointToTransform – точка на родительском спрайте. sprite.getOrigin() выступает в роли основы осей.

     

    Долго не мог найти ответ (неделю,где-то). Нашел на офиц форуме на 70+-10 странице:

    https://en.sfml-dev.org/forums/index.php?topic=17116.0

Просмотр 3 сообщений - с 1 по 3 (из 3 всего)

Для ответа в этой теме необходимо авторизоваться.