PDA

Просмотр полной версии : hitTest "перегружает" систему


Evgan
26.10.2011, 12:21
Здравствуйте

Сделал небольшую простенькую игру, где подводная лодка уклоняется от бомб

Проверка на столкновения производится по средством hitTest (у лодки сделал штук 20 объектов, распределенных по её контуру которые и реагирую на событие).

Вроде как все работает, все взрывается когда надо и где надо. Но вот проблема, при многочисленных рестартах игры (без перегрузки flash плеера), игра начинает заметно подтормаживать (грузит систему). Перепроверил кон несколько раз - нигде периодические функции лишний раз не запускаются. А вот при отключении проверки на hitTest эта проблема исчезла. Именно отключение строчки с if (цикл перебора всех hit объектов оставлял).

Может как то надобно чистить что то связанное с hitTest?

goodguy
26.10.2011, 12:28
Но вот проблема, при многочисленных рестартах игры (без перегрузки flash плеера), игра начинает заметно подтормаживать
Может как то надобно чистить что то связанное с hitTest?
Естественно надо чистить весь хлам. И не связанный с конкретно хиттестом, а вообще, удалять все созданные объекты. Здесь они явно остаются висеть в памяти и проссчитываться после каждого рестарта

Evgan
26.10.2011, 12:36
ну я удаляю их
вот касательно hitTesta что делать то?

mooncar
26.10.2011, 13:11
Сам по себе метод MovieClip.hitTest ничего такого после себя не оставляет, будучи вызванным.
Важно то, как именно вы производите проверку на hitTest.
Если через обработчик onEnterFrame, то нужно удалять его при рестарте.
Примерно так:
delete someMc.onEnterFrame ;
Если через setInterval, то интервал нужно очищать.
Примерно так:
clearInterval(checkHitTest);

Evgan
26.10.2011, 13:21
все интервалы удалю
странно это всё+(
Значит hitTest ничего после себя не оставляет...
Буду искать дальше причину

mooncar
26.10.2011, 13:28
Возможно, какие-то объекты не удаляются.
Попробуйте в цикле перебора объектов для проверке выполнять трейс, что именно перебирается и делать рестарты. Что-то может обнаружится.

goodguy
26.10.2011, 13:39
странно это всё+(
Абсолютно ничего странного
ну я удаляю их
Как именно?