lexpartizan

Созданные ответы форума

Просмотр 10 сообщений - с 1 по 10 (из 10 всего)
  • Автор
    Сообщения
  • в ответ на: My Childhood Nightmares – Моя первая игра! #5094

    lexpartizan
    Участник
    Сообщений:10

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

    Репутация:3

    Очень ничего.


    lexpartizan
    Участник
    Сообщений:10

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

    Репутация:3

    Я подключал довольно давно, ничерта не помню.

    Но вроде всё так, как в этом видео. Важно не спутать имена библиотек для релиз и дебаг.


    lexpartizan
    Участник
    Сообщений:10

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

    Репутация:3

    Та же самая проблема. Если фризит (что легко воспроизвести нажав мышкой на заголовок окна игры), то ВСЕ объекты с гравитацией проваливаются сквозь пол. И сам игрок и враги, , которые шляются по карте и просчитывают столкновения с ней.

    Благо, на SFML я учусь, а писать игрушку не собираюсь, так что просто забил.

    Но проблема есть. Ошибок никаких не вылетает, просто игрок появляется под полом и падает вниз. Как и враги.


    lexpartizan
    Участник
    Сообщений:10

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

    Репутация:3

    Что-то весь код, который должен выводить анимацию, закомментирован.


    lexpartizan
    Участник
    Сообщений:10

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

    Репутация:3

    Ясно. Просто другое интересно. Связано или нет, понять сейчас не могу. Я слишком мало работал программировал вообще и с сфмл в частности

    Очевидно, что 5 и 25 в два раза меньше реальных размеров.

    НО вы ставили setorigin(w/2, h/2) то есть точка находится посередине спрайта. То есть x и y это середина спрайта и если считать от неё w или h, то они будут в два раза больше, поэтому ваш персонаж на первом скрине не мог подойти ближе, пока Вы не подобрали размеры где-то в половину спрайта вручную.

    В общем из-за сеториджин получается смещение между размерами спрайта и объекта, ибо у вас спрайт выводится в координаты xy с середины, а объект с левого верхнего угла. И спрайт относительно объекта смещён выше и левее.

    Мне так кажется. Так что надо теперь совместить прямоугольники в функции

    getRect() return FloatRect (x-w\2, y-h\2,w,h)

     


    lexpartizan
    Участник
    Сообщений:10

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

    Репутация:3

    Такой вопрос, размеры персонажа Вы задаёте в тайлед мэп эдиторе? А то не вижу где у игрока w h присваиваются.

    5 и 25 как-то маловато кажется, персонаж явно больше 32. Больше смахивает 10×50.

     


    lexpartizan
    Участник
    Сообщений:10

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

    Репутация:3

    На первом скриншоте, насколько я вижу, тайл странный. Нижний тайл наполовину состоит из стены, наполовину из пола. Или мне кажется?

    А, понял, посмотрел тайлы карты, там просто верхняя часть тайла только, а нижняя белая.

    На втором скриншоте с пересечением камня он должен получать урон, но не получает?

    если сам объект 32х32 пересекает камень, а если спрайт пересекает,

    Я думал, что для размеров объекта используется прямоугольник спрайта. Или персонаж тоже 32Х32?

    Сорри, на работе сейчас, не могу посмотреть код и запустить.


    lexpartizan
    Участник
    Сообщений:10

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

    Репутация:3

    Кстати, придумал как обойти эту проблему.

    Создай ДРУГОЙ прямоугольник, поменьше размером (widht и height). А его x,y постоянно приравнивай к x,y спрайта. Используй для расчёта столкновений именно его, а не оригинальный спрайт персонажа.

    Получится этакий bounding box.

    Решение не красивое, но может сработать.


    lexpartizan
    Участник
    Сообщений:10

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

    Репутация:3

    Имхо, размер клетки известен. Например, 32. Тебе надо смещаться либо по Х либо по Y на 32.Х

    х=х+32 если вниз, x=x-32 если вверх. у=у-32, если влево и y=y+32, если вправо.

    Но это мгновенное перемещение. А для постепенного вниз, например,

    for(int i =0;i<32;i++) x=x+1;


    lexpartizan
    Участник
    Сообщений:10

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

    Репутация:3

    Проблема со смещением в спрайте всё же в самом спрайте персонажа. И Tiled Map Editor эту проблему принципиально не решает.

    1. Коллизия (столкновение) определяется через пересечение прямоугольника (IntRect) спрайта персонажа с объектом в Tiled Map Editore. В Tiled Map Editore можно настроить довольно точно, так как там объекты не анимированные и вообще квадратные. С ним проблем нет.

    У персонажа же обычно прямоугольники для всех фаз анимации одинаковые. И, обычно, они с запасом для картинки персонажа. И если левый верхний край как-то подгоняют, то правый нижний выпирает далеко за собственно картинку.

    2. Как проверить так ли это? Легко. Залить каким-нибудь цветом тайлсет персонажа, чтобы он не был прозрачным в игре. Теперь ты увидишь персонажа в цветном квадрате его реального размера. И сможешь проверить, совпадает ли взаимодействие(коллизия) с его реальными размерами.

    3. Есть урок на ютубе по ищется по запросу “SFML платформер”, там для загрузки спрайтлиста персонажа используется sprite decomposer. И там можно подогнать прямоугольники более точно.

    Но возникает другая проблема. Так как координаты прямоугольника это левый верхний угол, то, например, приседающий персонаж на самом деле подтягивает ноги, а башка его остаётся на том же уровне. Так как сам размер прямоугольника уменьшается, а координаты ху всё те же.

    Красивого и рабочего решения я не знаю.

    Но виноват однозначно размер спрайта персонажа. Точнее его текущий прямоугольник. Залей цветом тайлсет персонажа и убедишься.

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