Просмотр полной версии : Передвижение по ENTER_FRAME и загрузка процессора
mihael_p
31.05.2013, 13:06
Есть объект, который передвигается по сцене таким образом:
stage.addEventListener(Event.ENTER_FRAME, letMove);
private function letMove(e:Event):void
{
mc.y += 10 * speed;
}
if (mc.y > 650)
{
stage.removeEventListener(Event.ENTER_FRAME, letMove);
remAll();// Удаление объекта со сцены и т.д.
}
Все бы ничего когда один такой объект, а если их 15 - процессор начинает понемногу загибаться.
Была мысль решить это твином, но как быть, если по паузе нужно остановить эти объекты а потом запустить?
Посоветуйте, пожалуйста, как решить эту проблемку?
Final Hope
31.05.2013, 13:39
А что за объекты такие?
mihael_p
31.05.2013, 14:29
А что за объекты такие?
Ничего сверхъестественного - обычные картинки.
Final Hope
31.05.2013, 15:06
Вот, например, на сцене 150 картинок. У меня фпс в районе 10. Если предполагается, что картинки будут просто перемещаться без масштабирования и поворота, то этим картинкам можно включить кеширование. И тогда фпс возрастет до максимального. По крайней мере у меня работает. :)
import flash.events.Event;
import flash.display.MovieClip;
import flash.text.TextField;
import flash.events.MouseEvent;
import flash.display.Sprite;
var fpsTextField:TextField = new TextField();
fpsTextField.background = true;
fpsTextField.backgroundColor = 0xffffff;
this.addChild(fpsTextField);
var cashImages:Boolean = false;
var oldTime:Number = getTimer();
var curTime:Number = getTimer();
var images:Vector.<MovieClip> = new <MovieClip>[];
var image:MovieClip;
var imageContainer:Sprite = new Sprite();
this.addChildAt(imageContainer, 0);
for (var i:int = 0; i < 150; i++)
{
image = new mc();
image.x = Math.random() * 550;
image.y = Math.random() * 400;
imageContainer.addChild(image);
images.push(image);
}
stage.addEventListener(MouseEvent.CLICK, clickHandler);
stage.addEventListener(Event.ENTER_FRAME, enterFrameHandler);
//-------------------------------------------------
// Event handlers
//-------------------------------------------------
function clickHandler(event:MouseEvent):void
{
//Кликаем по сцене и включаем или выключаем кеширование.
cashImages = !cashImages;
for each (image in images)
{
image.cacheAsBitmap = cashImages;
}
}
function enterFrameHandler(event:Event):void
{
curTime = getTimer();
var imagesLength:int = images.length;
for (var i:int = 0; i < imagesLength; i++)
{
image = images[i];
image.x += Math.sin(curTime / 1000);
image.y += Math.cos(curTime / 1000);
}
fpsTextField.text = cashImages.toString() + " | " + (1000 / (curTime - oldTime)).toString().substr(0, 5);
oldTime = curTime;
}
test.swf
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.