JamesListener

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

Просмотр 2 сообщений - с 1 по 2 (из 2 всего)
  • Автор
    Сообщения
  • в ответ на: Будующие уроки #4093
    +2

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

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

    Репутация:3

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

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

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

     

    1

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

    в ответ на: Будующие уроки #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 в отдельные файлы, обязательно потом вынесу. Лень пока.

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