DizzyAge по-русски

Русскоязычный форум для любителей игр на движке DizzyAge
Текущее время: 19 фев 2020, 07:20

Часовой пояс: UTC + 4 часа




Начать новую тему Ответить на тему  [ Сообщений: 37 ]  На страницу Пред.  1, 2, 3, 4
Автор Сообщение
 Заголовок сообщения: Re: Купаем Диззи
СообщениеДобавлено: 25 июн 2017, 21:54 
Не в сети

Зарегистрирован: 29 янв 2016, 22:41
Сообщения: 356
trz писал(а):
Verm-V, ты обращал внимание как ведут себя пузыри? Я особо и не замечал ранее, ибо водных процедур не было в проектах на модифицированном движке, а буквально только начал более подробно разбирать их механику и тестировать и сразу обратил внимание на небольшой нюанс при переходе с экрана на экран. Не могу сказать, что это прям бросается в глаза, но тем не менее уже бросается :mrgreen:

А какой ньюанс? Если брать пузыри которые в waterplay_techdemo, то там оригинальная(старая) процедура для пузырей. Там они непокадровые и выглядят дергано. Но при переходе с экрана на экран ничего особого не увидел.
Вообще я потихоньку пытаюсь AIUpdateBubbles() переделать, чтобы все было плавнее и сейчас это выглядит примерно вот так:
Изображение


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Купаем Диззи
СообщениеДобавлено: 26 июн 2017, 00:05 
Не в сети

Зарегистрирован: 17 окт 2012, 18:18
Сообщения: 3895
Старые или часть исчезают при пересечении границы комнаты, и начинают появляться новые.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Купаем Диззи
СообщениеДобавлено: 15 июл 2017, 04:55 
Не в сети

Зарегистрирован: 29 янв 2016, 22:41
Сообщения: 356
trz писал(а):
Старые или часть исчезают при пересечении границы комнаты, и начинают появляться новые.

Да, поэкспериментировав всячески увидел. При переходе границ некоторых (не всех) комнат, все пузыри которые есть на экране пропадают. Причем происходит это обычно при переходе в одну сторону, а в обратную такого нет. Еще заметил, что в некоторых комнатах, когда диззи стоит под водой на какой-нибудь поверхности, то все пузыри исчезают почти сразу после появления. Пока не разобрался почему так - буду копать.
Еще заметил, что иногда предметы двигающиеся по AIUpdateTrain через несколько комнат, исчезают и появляются, только при переходе в другую комнату (хотя похоже продолжают двигаться в невидимом состоянии) - тоже загадка пока почему.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Купаем Диззи
СообщениеДобавлено: 17 июл 2017, 19:24 
Не в сети

Зарегистрирован: 29 янв 2016, 22:41
Сообщения: 356
Ага. Нашел в чем проблема с пузырями. Там просто не учитывалось, что игра может находится в режиме скроллинга, и координаты пузырей рассчитывались как для центральной комнаты (даже если пузырь был в соседней) и если в текущей комнаты не было материала воды на этом месте, то пузырь исчезал.
Чтобы поправить это дело, нужно в начале функции AIUpdateBubbles() добавить две строки:
Код:
roomx = GameGet(G_ROOMX);
roomy = GameGet(G_ROOMY);
и заменить строчку:
Код:
if( MaterialRead(x%roomw+ofs,y%roomh+ofs,1,1)!=(1<<MAT_WATER) )
на такую:
Код:
if( MaterialRead(x-(roomw*roomx)+ofs,y-(roomh*roomy)+ofs,1,1)!=(1<<MAT_WATER) )
Теперь координаты пузырей будут рассчитываться из рассчета матрицы 3х3 комнат и не должны неожиданно пропадать.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Купаем Диззи
СообщениеДобавлено: 20 июл 2017, 23:57 
Не в сети

Зарегистрирован: 17 окт 2012, 18:18
Сообщения: 3895
Verm-V писал(а):
Чтобы поправить это дело, нужно

Спасибо за решение. Был занят, только руки дошли попробовать и проверить (не подумай, что не доверяю :mrgreen: ) - все прекрасно работает.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Купаем Диззи
СообщениеДобавлено: 01 авг 2017, 01:19 
Не в сети

Зарегистрирован: 17 окт 2012, 18:18
Сообщения: 3895
Verm-V писал(а):
Еще заметил, что иногда предметы двигающиеся по AIUpdateTrain через несколько комнат, исчезают и появляются, только при переходе в другую комнату (хотя похоже продолжают двигаться в невидимом состоянии) - тоже загадка пока почему.

Эээ.. копал свое нечто подобное, вспомнил про твое :) В DizzyAGE практически не проверял, но по коду пробежался, так что в теории...

(DizGame.cpp/Update())

При пересечении границы комнаты срабатывает SetRoom( rx, ry );
Код:
      // room tranzit
      if( rx!=Get(G_ROOMX) ||   ry!=Get(G_ROOMY) )
      {
         g_script.CallHandler(HANDLER_ROOMCLOSE);
         SetRoom( rx, ry );
         g_script.CallHandler(HANDLER_ROOMOPEN);
      }


SetRoom обновляет координаты комнаты, карту материалов и заносит ObjGather() текущие динамические объекты в m_obj

Если глянуть там же чуть ниже в Draw()
Код:
      // objects present
      R9_SetClipping( rect );
      for( i=0; i<m_objcount; i++ )
      {
         tBrush* obj = g_map.m_obj.Get( m_obj[i] );
         if( obj->Get(BRUSH_LAYER)!=layer ) continue;
         if( obj->Get(BRUSH_DISABLE)!=0 ) continue;
         if((obj->Get(BRUSH_DRAW) & 1)==0 ) continue;
         ObjDraw(obj);
      }

то объект, который с каких-то делов будет пролетать над Диззи, принудительно не запихнуть в текущий список
Цитата:
ObjPresent ( int idx ); // add object to present list if not in it already

попросту не будет отрисовываться на текущем экране.

Да в общем ты и сам можешь пробежаться и проверить, если я чего упустил (DizGame.h и DizGame.cpp)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Купаем Диззи
СообщениеДобавлено: 01 авг 2017, 20:19 
Не в сети

Зарегистрирован: 29 янв 2016, 22:41
Сообщения: 356
О, спасибо. Я совсем забыл про команду ObjPresent. При том что однажды уже была похожая проблема и я ее применял. :)
Вставил сейчас в AiUpdateTrain и вроде глюка больше нет.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 37 ]  На страницу Пред.  1, 2, 3, 4

Часовой пояс: UTC + 4 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения

Найти:
Перейти:  

cron
Powered by Forumenko © 2006–2014
Русская поддержка phpBB