DizzyAge по-русски http://dizzyage.flybb.ru/ |
|
Купаем Диззи http://dizzyage.flybb.ru/topic225.html |
Страница 4 из 4 |
Автор: | trz [ 26 июн 2017, 00:05 ] |
Заголовок сообщения: | Re: Купаем Диззи |
Старые или часть исчезают при пересечении границы комнаты, и начинают появляться новые. |
Автор: | Verm-V [ 15 июл 2017, 04:55 ] |
Заголовок сообщения: | Re: Купаем Диззи |
trz писал(а): Старые или часть исчезают при пересечении границы комнаты, и начинают появляться новые. Да, поэкспериментировав всячески увидел. При переходе границ некоторых (не всех) комнат, все пузыри которые есть на экране пропадают. Причем происходит это обычно при переходе в одну сторону, а в обратную такого нет. Еще заметил, что в некоторых комнатах, когда диззи стоит под водой на какой-нибудь поверхности, то все пузыри исчезают почти сразу после появления. Пока не разобрался почему так - буду копать. Еще заметил, что иногда предметы двигающиеся по AIUpdateTrain через несколько комнат, исчезают и появляются, только при переходе в другую комнату (хотя похоже продолжают двигаться в невидимом состоянии) - тоже загадка пока почему. |
Автор: | Verm-V [ 17 июл 2017, 19:24 ] |
Заголовок сообщения: | Re: Купаем Диззи |
Ага. Нашел в чем проблема с пузырями. Там просто не учитывалось, что игра может находится в режиме скроллинга, и координаты пузырей рассчитывались как для центральной комнаты (даже если пузырь был в соседней) и если в текущей комнаты не было материала воды на этом месте, то пузырь исчезал. Чтобы поправить это дело, нужно в начале функции 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 комнат и не должны неожиданно пропадать.
|
Автор: | trz [ 20 июл 2017, 23:57 ] |
Заголовок сообщения: | Re: Купаем Диззи |
Verm-V писал(а): Чтобы поправить это дело, нужно Спасибо за решение. Был занят, только руки дошли попробовать и проверить (не подумай, что не доверяю ) - все прекрасно работает. |
Автор: | trz [ 01 авг 2017, 01:19 ] |
Заголовок сообщения: | Re: Купаем Диззи |
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) |
Автор: | Verm-V [ 01 авг 2017, 20:19 ] |
Заголовок сообщения: | Re: Купаем Диззи |
О, спасибо. Я совсем забыл про команду ObjPresent. При том что однажды уже была похожая проблема и я ее применял. Вставил сейчас в AiUpdateTrain и вроде глюка больше нет. |
Страница 4 из 4 | Часовой пояс: UTC + 4 часа |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |