뭔가 표준 for
루프보다는 for each(Object in Array)
을 사용하고 있습니다.
private function blowemup(e:Event):void
{
var newPosition:Number;
var i:ArrWordsObjectClass; // <-- don't know what the class for this is, just replace
for each(i in arrWordObjects)
{
newPosition = updatePosition(i.bitmap);
i.bitmap.x += newPosition;
i.bitmap.y += getRandomNumber();
}
}
for each
루프
는
arrWordObjects[i]
마다 반복 무엇 해결하려고 노력 할 것입니다 경우 일반적으로 많은 시간이 저장됩니다 의미 입력됩니다.
또한 메모 : 하나의 ENTER_FRAME 구동 함수를 사용하고 응용 프로그램에서 각 프레임을 처리하려는 모든 항목을 반복하면서 개체에 대해 수백 개의 수신기를 적용하는 것보다 훨씬 효율적입니다.
나는 보통과 같이, 내 개체를 저장 ENTER_FRAME과 배열을 포함하는 핸들러 클래스를 만듭니다
이
package
{
import flash.events.Event;
import flash.display.Sprite;
public class Handler extends Sprite
{
// vars
public var elements:Array = [];
/**
* Constructor
*/
public function Handler()
{
addEventListener(Event.ENTER_FRAME, _handle);
}
/**
* Called on each dispatch of Event.ENTER_FRAME
*/
private function _handle(e:Event):void
{
var i:Element;
for each(i in elements)
{
i.step();
}
}
}
}
그럼 내가 처리하는 모든 객체에 대한 기본 클래스를 만듭니다 step()
를 포함 함수가 호출됩니다.
package
{
import flash.display.DisplayObject;
public class Element extends Object
{
// vars
public var skin:DisplayObject;
/**
* Called on each dispatch of Event.ENTER_FRAME at Handler
*/
public function step():void
{
// override me
}
}
}
이제 당신의 객체 요소를 확장 :
package
{
import flash.display.Sprite;
public class MyThing extends Element
{
/**
* Constructor
*/
public function MyThing()
{
skin = new Sprite();
skin.graphics.beginFill(0);
skin.graphics.drawCircle(0,0,40);
skin.graphics.endFill();
}
/**
* Override step
*/
override public function step():void
{
skin.x += 4;
}
}
}
을 그리고! :
var handler:Handler = new Handler();
var m:MyThing;
var i:uint = 0;
for(i; i<10; i++)
{
m = new MyThing();
m.y = Math.random()*stage.stageHeight;
handler.elements.push(m);
addChild(m.skin);
}
안녕 마티, 고마워 - 딘에게 내 위의 코멘트를 참조하십시오. 각 (Object in Array)로 전환했습니다. 한 가지 질문 - 객체로 객체를 가져온 경우 클래스로 변환하면 중요합니까? 어디에서 var i : ArrWordsObjectClass를 얻었습니까? 다음 코드에서는 ArrWordsObjectClass {}를 사용했습니다. 그보다 더 좋다고 생각할만한 이유가 있습니까? var i : Object; \t \t \t (각 i arrWordObjects) – David
유형을 더 엄격하게 만들 때 각 루프의 속도가 증가합니다. 예를 들어, Array의 MovieClips로 구성된 Object를 사용하면 각 반복마다 루프가 작동해야합니다. 그렇지만이 항목은 객체이지만 실제로는 ** MovieClip ** -> Sprite -> DisplayObjectContainer -> InteractiveObject입니다. -> DisplayObject -> EventDispatcher -> ** ** 객체 **. 최대한 많이 상속 사슬을 사용하여 유형을 정의하면 훨씬 효율적입니다. – Marty
상속 체인을 '위로'한다는 것은 실제로 MovieClip으로 '올라간다'는 것을 의미합니다. 이것은 항상 나를 뒤에서 공격했습니다. 나는 할아버지로부터 상속을 받는다. 내 할아버지는 내 가계도에서 나 위에있다. 그러나 나는 빗 나간다. :) 'class ArrWordsObjectClass {}'와 같은 임의의 클래스 유형을 지정하면 Sprite와 같은 내장 클래스를 직접 참조하는 것과 같은 효율성을 얻을 수 있습니까? – David