|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
11.11.2009, 23:04 | #1 |
Участник клуба
Регистрация: 29.01.2008
Сообщений: 1,039
|
Проблема с анимацией
Что-то я совсем не могу понять, как должна правильно работать анимация? К примеру. Есть проверка на вывод кадра:
Код:
P.S. Простую анимацию я знаю как делать, а вот если строится двумерная карта и на каждый объект своя анимация...вот это уже проблема(или мозг не варит уже...). Спасибо... |
11.11.2009, 23:20 | #2 |
Инженер ИС
Старожил
Регистрация: 13.12.2006
Сообщений: 2,671
|
Анимация, текстура анимации - это портянка, ...делается соединение всех кадров в один файл, с файлом идет описание как работать с анимацией, какого размера кадры, какое смещение относительно центра, сколько кадров.
В процессе загрузки в тип TGAnim, например, помещается вся текстура, записываются размеры кадров, записывается текущий, т.е. 0-й кадр. Когда нужно рисовать анимацию, обработчик смотрит количество кадров в записи типа. Если там числится 1, то выводит как есть по упрощенной процедуре, просто берет размеры и в нужных координатах лепит целиком кадр. Если число кадров больше 1, то обработчик пользуется трафаретом, т.е. вырезает кусок по формуле: от "номер текущего кадра * ширину кадра" до "номер текущего кадра * ширину кадра + ширина кадра" Если ширина кадра 45, то на 0-м кадре это будет размер от 0 до 45, на 1-м - от 45 до 90 и т.д. Замыкающее условие переводит кадр на 0-й, в случае перехода за макс. кадр (это значение в тип уже записано при загрузке). У тебя получится система универсальная, рисующая анимацию любого размера и количества кадров.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
|
11.11.2009, 23:36 | #3 |
Участник клуба
Регистрация: 29.01.2008
Сообщений: 1,039
|
Я знал, что так тоже можно сделать и даже делал, но что-то этот код оказался не совсем удобным в моём случае. Всё равно спасибо за информацию. У меня по-другому картинка на экран выводится и с анимацией по другому работаю. В общем, тему можно закрыть или удалить, потому как разбираться буду сам
|
12.11.2009, 15:35 | #4 |
Инженер ИС
Старожил
Регистрация: 13.12.2006
Сообщений: 2,671
|
Так понимаю, у тебя некоторый каталог с анимацией на каждый объект? ...или все в кучу, но по номерам? ...и чтобы не утруждать пользователя "склеиванием" анимации в один файл, достаточно кинуть кадры в каталог?
Такая система есть в VCL, TImageList называется, ...в роде банка текстур, и в DelphiX тоже пародия на это с поиском (какая нещадная трата ресурсов ЦП). Что за особый метод отрисовки, через что, секрет?
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
|
12.11.2009, 15:56 | #5 | ||
Участник клуба
Регистрация: 29.01.2008
Сообщений: 1,039
|
Цитата:
Цитата:
А что, разве каждые 33 мс разумней загружать картинку, "выдерать" картинку из файла анимации, выводить изображение на экран и освобождать память под картинку? Код:
К примеру, если делать проверку на элемент массива и потом выводить картинку на экран по результатам проверки...ну вот так: Код:
Код:
|
||
12.11.2009, 16:45 | #6 |
Участник клуба
Регистрация: 06.03.2009
Сообщений: 1,346
|
На самом деле все просто. Для начала нужно сделать единый тип (или класс) для анимации, например (пример для canvas из моих старых модулей):
Код:
Должны быть процедуры загрузки параметров: Код:
Код:
|
12.11.2009, 17:53 | #7 |
Инженер ИС
Старожил
Регистрация: 13.12.2006
Сообщений: 2,671
|
Да, да, да, ...без собственного типа на банк текстур не обойтись. Создаем массив этого типа, одномерный, в каждой ячейке будут полные данные для конкретной анимации и сборная текстура. Движок ориентируется на номер в банке, зная текущие кадры (а они оперативно там поправляются со счетом), он рисует участки, пусть канвой через CopyRect (есть методы быстрее). Ничего хитрого. При этом ничего чистить, готовить, не приходится.
Не обязательно помещать вырезанный кусок сначала в предварительный кадр, ...можно сразу положить на используемый задний фон, т.е. финальный кадр, этим устраняем лишние манипуляции с битматами. По поводу загрузки: тут рулит метод динамического пополнения банка текстур. При открытии карты происходит предварительный анализ, присутствующих в ней объектов, и подгружаются все текстуры анимации. Например, обработчик в цикле видит в точке X,Y код, ищет путь на диске, находит файлы, загружает в ячейку 0 (!), в списке объектов, в записи "anim" указывает индекс, в данном случае - 0, ...и так по порядку. Т.е. у нас код в карте отвечает за типы объектов, а банк текстур ведет свой счет от 0 и до количества текстур, поскольку, если объект на карте под номером 9 и их всего 3, то не стоит создавать банк на 9 ячеек. Думаю, понятно. В развернутом виде на карте не должно быть значений, например, типа Byte, оно ни о чем не говорит, нужен код деления по уровням, ...например, "Дерево" - "Клен" - "Клен 1", ...т.е. есть некий каталог деревьев, есть подкаталог особых деревьев, и в нем масса видов: большие, маленькие, кривые, ровные, зимние, летние, осенние, весенние, срубленные )))) ...и т.д. Стразу нужно продумать систему классифицирования и кодирования объектов на карте.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Последний раз редактировалось Beermonza; 12.11.2009 в 18:07. |
15.11.2009, 22:54 | #8 |
Участник клуба
Регистрация: 29.01.2008
Сообщений: 1,039
|
Так... Анимацию от части удалось сделать. Но вот что за ****мо происходит такое, кто мне может объяснить? Берём объект "Дерево". Ставим несколько экземпляров на карту, включаем анимацию - работает! Теперь ставим объект "Трава". Анимация "Дерево" работает, а "Трава" - нет! Сделаем наоборот. Берём объект "Трава". Ставим несколько экземпляров на карту, включаем анимацию - работает! Берём объект "Дерево". Анимация "Трава" работает, а "Дерево" нет! Что за *****? Или... Создадим несколько экземпляров объектов "Трава" и "Дерево" на карте. Сохраним. Выходим из программы. Заходим, загружаем сохранённую заранее карту - абсолютно все анимации работают! Что за чертовщина?
Спасибо всем откликнувшимся. P.S. Если нужен проект - выложу проект. Последний раз редактировалось Beermonza; 16.11.2009 в 16:15. |
15.11.2009, 23:02 | #9 |
Участник клуба
Регистрация: 06.03.2009
Сообщений: 1,346
|
Выложи проэкт, завтра посмотрю.
Последний раз редактировалось Вадим Буренков; 16.11.2009 в 17:07. |
15.11.2009, 23:13 | #10 |
Участник клуба
Регистрация: 29.01.2008
Сообщений: 1,039
|
Удалите сообщение, пожалуйста.
Последний раз редактировалось Манжосов Денис :); 16.11.2009 в 18:42. |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Delphi 7 проблема с Анимацией | Rus 47 | Помощь студентам | 1 | 26.05.2009 00:17 |
Помогите с анимацией проги! | Aboltus | Общие вопросы Delphi | 3 | 29.07.2008 23:21 |
Работа с анимацией в ACCESS | kuk132 | Microsoft Office Access | 1 | 17.07.2008 14:07 |
Задача с анимацией | KpeHDeJIb | Помощь студентам | 1 | 04.07.2008 20:23 |
Помогите с анимацией в Паскале | ЕвгениуS | Помощь студентам | 6 | 06.06.2008 15:10 |