Возможно, swf зависает, потому что когда вы перемещаете мышь, вы запускаете события MOUSE_MOVE
и т. П. Для каждого отдельного фрагмента ролика на экране.
Обычно вы можете оптимизировать рендеринг Flash, поднявшись на несколько шагов вышена MovieClip
дереве наследования и создании собственного графического класса оттуда.У MovieClip
есть много классных наворотов, таких как временные шкалы, слои и встроенное управление мышью.К сожалению, все они занимают память и процессорное время, и довольно часто вам не понадобятся все эти функции.К счастью, вы можете выбрать нужные вам функции и избавиться от большого количества лишнего жира, который есть у MovieClip
.Дерево наследования MovieClip
построено таким образом, что каждая из этих функций довольно кратко инкапсулирована в одном родительском классе.
Например, в вашем приложении вы говорите, что ваши MovieClip
содержат простую форму, следующую запростой путь движения.Я также предполагаю, что они не собираются взаимодействовать с мышью или клавиатурой.Из-за этого мы можем подняться на дерево наследования MovieClip
довольно далеко.Поскольку вы перемещаете только фигуру, а не анимируете ее части, вы можете заменить анимацию временной шкалы анимацией движения (я бы порекомендовал взглянуть на TweenLite от Greensock).Здесь вы можете написать свой собственный класс, который подклассы Sprite
(вместо MovieClip
), и, вероятно, получить приличное увеличение частоты кадров.
Если вы хотите оптимизировать дальше, вы можете пойти дальше.Вам также, вероятно, не нужны слои, так как вы используете простую форму.Следовательно, вы можете пойти дальше, чем DisplayObjectContainer
.Поскольку вам не нужна интерактивность, InteractiveObject
также может пойти.Итак, вы обрезали много жира, и теперь вы на DisplayObject
.Поскольку с DisplayObject
s может быть сложно работать, вы можете перейти на один шаг вниз к дереву, либо к Shape
, либо к Bitmap
, в зависимости от сложности вашей фигуры.
Еще раз,когда вы решаете, сколько вам нужно, из встроенных в классы графики Actionscript, вам, возможно, придется создать свой собственный оттуда.Поскольку вы добавляете пользовательские функции в свой экранный объект, вам нужно будет создать свой собственный класс, который наследует либо Sprite
, Shape
, либо Bitmap
, и добавить эти функции туда.
ИЧтобы ответить на ваш вопрос о том, почему 100 MC медленны, имейте в виду, что Flash работает на виртуальной машине, и этот уровень абстракции является большой проблемой ресурсов.