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)