![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#31 |
Форумчанин
Регистрация: 23.02.2009
Сообщений: 237
|
![]()
Я перерисовываю всю карту, целиком по новой
![]() |
![]() |
![]() |
![]() |
#32 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
![]()
ну смотри...ты же знаешь где находится твой персонаж и в каком месте его надо рисовать?
вот и перерисовывай только персонажа и то что под ним(над ним тоже придется) то есть не весь ландшафт...а только клетки на которые накладывается персонаж... это менее ресурсоемко Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
![]() |
![]() |
![]() |
#33 |
Форумчанин
Регистрация: 23.02.2009
Сообщений: 237
|
![]()
Хм... Это почти вообще не занимает ресурсов. Как сделать под ним я понял. Но над ним.... Это уже потяжелее... Подумаю над этим... Придется проверять близ-лежащие клетки, но это ограничивает унивирсальность игры и высоту обьектов, что уже хуже.
|
![]() |
![]() |
![]() |
#34 |
Инженер ИС
Старожил
Регистрация: 13.12.2006
Сообщений: 2,671
|
![]()
Shadow_1329, ну-ка уточни, что у тебя выполняется.
Вот твой перс начал двигаться с одной клетки карты в другую, ...значит собрать поверхность карты нужно заново только тогда когда перс встанет на следующую клетку, и притом один раз, до следующей. Все это время, пока идет смещение персонажа в начале отрисовки карты ты должен переносить в буфер прежний собранный кусок, поскольку один большой отрисуется быстрее чем множество мелких тайлов. Ты просто смещаешь на пиксели эту подложку под ногами, а объекты рисуешь каждый раз заново. Теперь как ты переносишь подложку в буфер? ...канвой? ...решение не идеальное, есть код на ассемблере, если нужно опять напишу сюда. Почему нужно рисовать все заново?, ...потому, что в игре, где много объектов со своей анимацией отрисовка по частям сжирает больше ресурсов чем кадра с нуля.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
|
![]() |
![]() |
![]() |
#35 |
Форумчанин
Регистрация: 23.02.2009
Сообщений: 237
|
![]()
Он у меня не из клетки в клетки двигается а свободно. Просто отрисовка идет опираясь на клетки + смещение внутри клеток. Прорисока вначале была на канве. Заменил на BitBlt. Особой разницы не почуял. Вернулся к канве. При необходимости могу все вернуть обратно на BitBlt.
|
![]() |
![]() |
![]() |
#36 |
Инженер ИС
Старожил
Регистрация: 13.12.2006
Сообщений: 2,671
|
![]()
Не не не, не имеет никакого значения мышью или клавиатурой. Твой персонаж располагает координатами в пространстве, относительно массива карты - это грубые смещения на 1 клетку, именно в эти моменты нужно готовить новую подложку, ...а "свободное" движение пока нажата клавиша - это пиксельные смещения, в это время идет переброс заготовленного фрагмента. Понятно?
Пожалуйста код покажи, попробуем всем скопом разобраться.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
|
![]() |
![]() |
![]() |
#37 |
Форумчанин
Регистрация: 23.02.2009
Сообщений: 237
|
![]()
Подумаю над этим до завтра... Не сразу все переварить=)
Начет кода - коменты добавлю=) И его приведу в человеческий вид=) Последний раз редактировалось Shadow_1329; 13.08.2009 в 21:00. |
![]() |
![]() |
![]() |
#38 |
Форумчанин
Регистрация: 23.02.2009
Сообщений: 237
|
![]()
Вод вобщем код(кусок кода передвижения и кусок прорисоки)
Код:
|
![]() |
![]() |
![]() |
#39 | |
Участник клуба
Регистрация: 06.03.2009
Сообщений: 1,346
|
![]() Цитата:
![]() |
|
![]() |
![]() |
![]() |
#40 |
Форумчанин
Регистрация: 04.08.2009
Сообщений: 684
|
![]()
ну, как я понял, в каждый момент, когда вызывается UpDatelevel() у тебя перерисовывается вся карта. Перерисовывай только то, что видно на экране, раз карта со скроллингом. Это уже + к производительности. Но об этом уже говорили
![]() Далее: раз ты перерисовываешь карту в массиве, то как она перерисовывается? сверху вниз, слева направо? Если да, то сначала рисуй подложку (траву), потом персонажа, а уже потом объекты на карте. Тогда если персонаж будет находиться за объектом, то изображение этого объекта будет поверх персонажа. По крайней мере мне так кажется, но может быть я и ошибаюсь ![]()
Еслия Вам помог, не поленитесь нажать на весы и оставить отзыв. Это не займет много времени, но даст понять, что я старался не зря =)
Мой ник зарегистрирован, а твой? Последний раз редактировалось Wicort; 14.08.2009 в 11:59. |
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Как можно самому сделать так, чтобы программы грузились с диска, до загрузки ОС? | Лукманов Александр | Софт | 1 | 18.04.2009 12:14 |
оптимизировать для максимальной скорости выполнения программы, т.е. заменить ее кодом на ассемблере | gusluk | Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM | 6 | 10.12.2008 04:21 |
Увеличение и уменьшение картинок | zzzzz | Мультимедиа в Delphi | 2 | 30.08.2008 20:53 |
запуск программы после загрузки Windows | matus | Windows | 3 | 25.04.2008 11:16 |
отслеживание загрузки программы | ГОСЕАН | Общие вопросы Delphi | 4 | 13.12.2007 18:04 |