Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > разработка игр, графический дизайн и моделирование > Gamedev - cоздание игр: Unity, OpenGL, DirectX
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.08.2009, 19:50   #31
Shadow_1329
Форумчанин
 
Аватар для Shadow_1329
 
Регистрация: 23.02.2009
Сообщений: 237
По умолчанию

Я перерисовываю всю карту, целиком по новой Я понял что вы имеете ввиду. Но как мне это сделать?
Shadow_1329 вне форума Ответить с цитированием
Старый 13.08.2009, 20:05   #32
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

ну смотри...ты же знаешь где находится твой персонаж и в каком месте его надо рисовать?
вот и перерисовывай только персонажа и то что под ним(над ним тоже придется)
то есть не весь ландшафт...а только клетки на которые накладывается персонаж...
это менее ресурсоемко
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 13.08.2009, 20:20   #33
Shadow_1329
Форумчанин
 
Аватар для Shadow_1329
 
Регистрация: 23.02.2009
Сообщений: 237
По умолчанию

Хм... Это почти вообще не занимает ресурсов. Как сделать под ним я понял. Но над ним.... Это уже потяжелее... Подумаю над этим... Придется проверять близ-лежащие клетки, но это ограничивает унивирсальность игры и высоту обьектов, что уже хуже.
Shadow_1329 вне форума Ответить с цитированием
Старый 13.08.2009, 20:21   #34
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

Shadow_1329, ну-ка уточни, что у тебя выполняется.
Вот твой перс начал двигаться с одной клетки карты в другую, ...значит собрать поверхность карты нужно заново только тогда когда перс встанет на следующую клетку, и притом один раз, до следующей. Все это время, пока идет смещение персонажа в начале отрисовки карты ты должен переносить в буфер прежний собранный кусок, поскольку один большой отрисуется быстрее чем множество мелких тайлов. Ты просто смещаешь на пиксели эту подложку под ногами, а объекты рисуешь каждый раз заново. Теперь как ты переносишь подложку в буфер? ...канвой? ...решение не идеальное, есть код на ассемблере, если нужно опять напишу сюда.
Почему нужно рисовать все заново?, ...потому, что в игре, где много объектов со своей анимацией отрисовка по частям сжирает больше ресурсов чем кадра с нуля.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Старый 13.08.2009, 20:31   #35
Shadow_1329
Форумчанин
 
Аватар для Shadow_1329
 
Регистрация: 23.02.2009
Сообщений: 237
По умолчанию

Он у меня не из клетки в клетки двигается а свободно. Просто отрисовка идет опираясь на клетки + смещение внутри клеток. Прорисока вначале была на канве. Заменил на BitBlt. Особой разницы не почуял. Вернулся к канве. При необходимости могу все вернуть обратно на BitBlt.
Shadow_1329 вне форума Ответить с цитированием
Старый 13.08.2009, 20:56   #36
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

Не не не, не имеет никакого значения мышью или клавиатурой. Твой персонаж располагает координатами в пространстве, относительно массива карты - это грубые смещения на 1 клетку, именно в эти моменты нужно готовить новую подложку, ...а "свободное" движение пока нажата клавиша - это пиксельные смещения, в это время идет переброс заготовленного фрагмента. Понятно?

Пожалуйста код покажи, попробуем всем скопом разобраться.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Старый 13.08.2009, 20:58   #37
Shadow_1329
Форумчанин
 
Аватар для Shadow_1329
 
Регистрация: 23.02.2009
Сообщений: 237
По умолчанию

Подумаю над этим до завтра... Не сразу все переварить=)

Начет кода - коменты добавлю=) И его приведу в человеческий вид=)

Последний раз редактировалось Shadow_1329; 13.08.2009 в 21:00.
Shadow_1329 вне форума Ответить с цитированием
Старый 14.08.2009, 06:49   #38
Shadow_1329
Форумчанин
 
Аватар для Shadow_1329
 
Регистрация: 23.02.2009
Сообщений: 237
По умолчанию

Вод вобщем код(кусок кода передвижения и кусок прорисоки)
Код:
//прорисовка(обновление уровня)
procedure UpDatelevel();
begin
for MMH:=MapH downto 1 do//начинаем цикл для высоты карты, от низа к верху
for MMW:=1 to MapW do//цикл по ширине
begin
if map[MMW,MMH] = 1 then FullMap.Canvas.Draw(MMW*100-100,MMH*100-100,Grass);//двумерный масив мап - это масссив подстилки всех обьектов тоетсть земли, травы, песка и т.д. Фуллмап - это битмап карты.
end;

for MMH:=1 to MapH do// тотже цикл тока от верха к низу по высоте
for MMW:=1 to MapW do//по ширине(по горизонтали)
begin
if mapobj[MMW,MMH] = 1 then FullMap.Canvas.Draw(MMW*100-230,MMH*100-350,Tree);//здесь уже идет массив обьектов. 1 - это дерево
if mapobj[MMW,MMH] = 2 then//2 - самый первый работающий NPC в игре
begin
Pc[2].Ux:=MMW;//присваиваем значение координаты клетки в которой стоит непись по Х
Pc[2].Uy:=MMH;//по Y
FullMap.Canvas.Draw(Pc[2].Ux+Pc[3].SPX,Pc[2].Uy+Pc[2].SPY,PC[2].Anim[1]);//собственно прорисовываем непися в клетке со смещением(еще не доделанно с анимацией)
end;
if mapobj[MMW,MMH] = 3 then//собственно перс
begin
Pc[1].Ux:=MMW;
Pc[1].Uy:=MMH;
FullMap.Canvas.Draw(Pc[1].Ux*100+Pc[1].SPX,Pc[1].Uy*100+Pc[1].SPY,PC[1].Anim[1]);
end;
end;
end;

//и передвижение в одну сторону(другие похожи)
if PC[plco].ChRight=true then//передвижение в право
begin
PC[plco].ChUp:=false;//все остальные передвижения пока обрубаются
PC[plco].ChDown:=false;
PC[plco].ChLeft:=false;
If (PC[plco].SPX <= 100) or (PC[plco].SPX >= 0) then//если смещение на пиксели меньше чем максимальный размер тайла или больше тогда
    Begin
      Pc[plco].SPX:=Pc[plco].SPX+PC[plco].Speed;//из смещение вычитаем скорость перса
    end;
if Pc[plco].SPX>=100 then// если вылез за грани тайла то
begin
Pc[plco].Spx:=0;//смещениею присваиваем значение 0 тоесть ставим перса в начало
Pc[plco].Ux:=Pc[plco].Ux+1;//к смещению на клетки прибавляем 1 так как движение вправо
Mapobj[Pc[plco].Ux,Pc[plco].Uy]:=3;//в массиве клетке где находится перс присваиваем значиние 3 тоесть его значение
Mapobj[Pc[plco].Ux-1,Pc[plco].Uy]:=0;// а в той которой был 0, тоесть пустоту
end;                        
PC[plco].Speed:=PC[plco].MaxSpeed;//в игре у меня две  переменной скорости - одня временная(Speed) а другая навык(MaxSpeed) первая изменяется при препятствиях и ставится в ноль. А вторрая восстанавливает при ходьбе первую и таким образом скорость зависит от навыков
Updatelevel;//обновление уровня
end;
Shadow_1329 вне форума Ответить с цитированием
Старый 14.08.2009, 11:08   #39
Вадим Буренков
Участник клуба
 
Аватар для Вадим Буренков
 
Регистрация: 06.03.2009
Сообщений: 1,346
По умолчанию

Цитата:
Вод вобщем код
Мой мозг это не переварит...
Вадим Буренков вне форума Ответить с цитированием
Старый 14.08.2009, 11:43   #40
Wicort
Форумчанин
 
Аватар для Wicort
 
Регистрация: 04.08.2009
Сообщений: 684
По умолчанию

ну, как я понял, в каждый момент, когда вызывается UpDatelevel() у тебя перерисовывается вся карта. Перерисовывай только то, что видно на экране, раз карта со скроллингом. Это уже + к производительности. Но об этом уже говорили
Далее: раз ты перерисовываешь карту в массиве, то как она перерисовывается? сверху вниз, слева направо? Если да, то сначала рисуй подложку (траву), потом персонажа, а уже потом объекты на карте. Тогда если персонаж будет находиться за объектом, то изображение этого объекта будет поверх персонажа. По крайней мере мне так кажется, но может быть я и ошибаюсь
Еслия Вам помог, не поленитесь нажать на весы и оставить отзыв. Это не займет много времени, но даст понять, что я старался не зря =)
Мой ник зарегистрирован, а твой?

Последний раз редактировалось Wicort; 14.08.2009 в 11:59.
Wicort вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как можно самому сделать так, чтобы программы грузились с диска, до загрузки ОС? Лукманов Александр Софт 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