Будующие уроки

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

Просмотр 7 сообщений - с 16 по 22 (из 22 всего)
  • Автор
    Сообщения
  • #4055
    Павел Букреев
    Павел Букреев
    Хранитель
    Сообщений:584

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

    Репутация:103

    К сожалению пока выход новых уроков не планируется.. много работы.. может кто то в вики разделе или на форуме напишет – будет здорово. По ИИ много информации в интернете, просто при желании можно перенести на C++

    #4058

    Max
    Участник
    Сообщений:8

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

    Репутация:0

    А насчет карты тогда еще можешь подсказать – как сделать вид сверху или вид сзади? или это уже будет объемная – 3д?

    #4062
    Павел Букреев
    Павел Букреев
    Хранитель
    Сообщений:584

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

    Репутация:103

    Тему создавай в другом разделе.. вид сзади был в игре на сега, например в zero tolerance. попробуй погугли на англ. как она делалась )

    #4063

    Max
    Участник
    Сообщений:8

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

    Репутация:0

    Да я в другом разделе писал эту тему, но никто не ответил, к сожалению) спасибо за инфу

    #4082
    +1

    JamesListener
    Участник
    Сообщений:2

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

    Репутация:3

    Здравствуйте. Как я понимаю, системы анимации так и не дождемся, да?
    Можно кратенько обсудить этот вопрос здесь? Не нужно объяснять научно-популярно, я сам преподаю в универе Системы ИИ, основы openGL и ООП, можно сухо и по делу, так и вам и мне лучше будет.

    С SFML столкнулся буквально недавно, студенты курсачи на нём принесли. Как теперь понимаю, по урокам с вашего сайта писали)))

    Я вот думал над системой анимации, и пришёл к некоторой форме, но она мне всё равно не очень нравится.

    Суть в следующем – у каждого DrawableObject (абстрактный класс, от которого наследуются остальные) есть список/массив объектов класса Animation, а также указатель/номер на текущую анимацию.

    Класс Animation содержит в себе указатель на объект-владелец, указатель на текстуру, тип (int type) и подтип (int subtype), время смены кадров (timespan), время показа (showtime), количество кадров и массив IntRect, хранящий позиции кадров в текстуре.

    Типы у меня задефайнены как ANIM_TYPE_IDLE – 10000, ANIM_TYPE_WALK – 20000, ANIM_TYPE_FALL – 30000 и т.д. Подтипы задефайнены как ANIM_SUBTYPE_LEFT – 100, ANIM_SUBTYPE_RIGHT – 200 и т.д.

    В итоге для каждого DrawableObject будет выдан массив анимаций, из которого можно будет выбирать нужную анимацию по сумме типа и подтипа, а если есть несколько разных анимаций одного типа и подтипа, то добавлять порядковые числа от 0 до 99.

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

    При выборе анимации у объекта класса Animation вызывается метод startAnimation, который через указатель на владельца берёт его спрайт и подставляет координаты текстуры первого кадра.

    Также у анимации есть метод Update, который обновляет showtime для вычисления текущего кадра и подстановки его, опять-таки, в спрайт владельца.

    Ну ещё добавил мелочёвки на вроде статичной анимации (т.е. не меняющихся кадров, как для блоков) – убирает лишние проверки и перерисовки; а также возможность задать одиночное проигрывание анимации с “заморозкой” на последнем/первом кадре.

    Вроде всё, что нужно реализовано, а всё равно не нравится.

    Откомментируйте, пожалуйста.

    Даю кусок кода с классами:

    Да, да, надо вынести Animation в отдельные файлы, обязательно потом вынесу. Лень пока.

    #4090
    +2
    Heisenberg
    Heisenberg
    Участник
    Сообщений:317

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

    Репутация:143

    А что делать, если кадры проигрываемой анимации разного размера (например атака с ударом длинного меча).
    Ваш класс сильно похож на мой (Увы исходников не осталось), но я поясню его суть.
    Он считывал анимацию с определённого ряда до определённого места, и был рассчитан на много-вариационную анимацию на одном холсте.
    Его минус в том, что он был удобен в использовании только в случае если каждый кадр одного размера.

    Его конструктор принимал аргументы:

    Кадров в секунду
    С какого ряда начать
    Какой ряд считать последним
    Кадров в ряду
    Кадров в последнем ряду
    Vector2f Шир_Выс кадра на текстуре, у вас я так понимаю используете IntRect
    Имя анимации (Move, Stand, Attack1, Attack2 и т.п.)

    #4093
    +2

    JamesListener
    Участник
    Сообщений:2

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

    Репутация:3

    Ну, у меня как раз-таки учитывается вариант с разным размером кадров – ведь в каждой анимации у меня хранится массив IntRect, который не только позицию кадра внутри текстуры задаёт, но и её размеры. Плюс к тому же, кадры могут быть расположены где угодно в текстуре, не обязательно в одном ряду.

    Однако, я сейчас понял, что физический центр объекта неправильный будет… Т.к. отрисовка всегда от левого верхнего угла будет…
    Значит, нужно добавить координаты центра объекта внутри каждого кадра, чтобы корректировать отрисовку кадра. Что ж, это не сложно.

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

     

    1

    Ещё есть какие-нибудь замечания или комментарии?

Просмотр 7 сообщений - с 16 по 22 (из 22 всего)

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