PDA

Просмотр полной версии : объект утопает в поле :)


zloymedved
27.02.2011, 17:16
Привет, народы!
Есть такой код:
private function checkFloor():Boolean
{
var checker = false;
if (_hero.y < 0)
{
_hero.y = 0;
_vspeed *= _bounce;
}
if (_hero.y + _hero.height > App.SCR_H)
{
_hero.y = App.SCR_H - _hero.height;
_vspeed *= _bounce;
}

var len = _plats.length;
for (var i:int = 0; i < len; i++)
{
if(App.inrange(_hero.x, _plats[i].x - _hero.width + 1, _plats[i].x + _plats[i].width,false))
{
if(_vspeed > 500)
_msdepth = 3;
else
_msdepth = 1;

for (var j:int = 0; j < _msdepth; j++)
{
if( App.inrange(_plats[i].y - (_hero.y + _hero.height + (_vspeed * _middelta * j)),-15,0))
{
if (_vspeed > 0)
{
checker = true;
if( _hero.y + _hero.height < _plats[i].y)
_hero.y = _plats[i].y - _hero.height;
}
}
else if ( App.inrange((_hero.y + (_vspeed * _middelta * j)) - _plats[i].y,-15,0 ))
{
if (_vspeed < 0)
{
checker = true;
if( _hero.y < _plats[i].y + _plats[i].height )
_hero.y = _plats[i].y + _plats[i].height
}
}
}
}
}

return checker;
}


Коротко о функции: происходит проверка заезда объекта (тоесть _hero) за платформы, содержащиеся в массиве _plats (в текущем положении _hero и нескольких следующих положения при текущей скорости объекта).

Если создаю платформу статическую, то все вроде бы не плохо, _hero реагирует и останавливается.
Если же платформы скроллятся справа налево (справа за кадром создаются, слева уничтожаются), то объект все равно реагирует, но, стоя на них, потихоньку заезжает внутрь.

Напрашивается вопрос: чзх? почему так происходит?
И еще, может кто-нибудь поделится ссылкой на уроки по организации именно такого платформера, со скролящимся фоном? или хотябы просто платформера, чтобы грамотно и оптимизированно считались столкновения с уровнем?