2010년 3월 12일 금요일

Point 클래쓰 - offset

3. offset( dx:Number, dy:Number ) : Void

 

   -> point가 매개변수로 입력된 값만큼 이동한다.

 

-

-

-

- Cir클래스에서 100개의 무비클립을 생성 후 이벤트로 호출한다. 1초당 해당 프레임 수 만큼.

   여기서 무비클립의 위치를 스테이지의 정중앙으로 위치해주고 화면에 표시될 수 있도록 addChild해줌.

   첫 무비클립에서부터, 정중앙에서 3만큼 떨어지고 Math.radom()*Math.PI*2 각도에 위치한 pt를

   Point 객체로 생성. 그리고 pt2라는 Point객체를 만들어 e.target(=Cir에서 생성한 무비클립)의 x, y좌표를

   초기화하여 생성후 처음 pt의 위치를 방금 생성한 pt2에 offset시킴(=재정렬).

   그리고 마지막으로 실제 무비클립의 위치를 offset한 pt2의 x, y의 좌표로 대입해줌.

 

 

 

원래는 저런 소스였지만, cpu 점유율이 높다는 스터디 선생님의 지적을 받고 수정해주셨다!!

실제 flash가 전체 중에서 25~30%을 차지하던 것이 20~25%로! 내가 봤을 때 차이는 아주 미미하였으나,

1%를 줄이기 위해 몇 일 밤을 샐 날이 곧 올꺼라는.... 그럴 스멜....ㅋㅋ

 

 

[code as3]
package classes.view
{
import flash.display.Sprite;
import flash.display.MovieClip;
import flash.events.Event;
import flash.geom.Point;

public class Main extends Sprite
{
    public function Main()
    {
        super();

        config();

        addEventListener( Event.ENTER_FRAME, loop );
    }

    private function config() : void
    {
        for( var i:int = 0; i < 100; i++ )
        {
            var temp:MovieClip = new Cir();

            temp.x = stage.stageWidth / 2;
            temp.y = stage.stageHeight / 2;
   
            addChild( temp );
        }
    }

    private function loop( e:Event ) : void
    {
        for(var i:int = 0; i < 100; i++)
        {
            var pt:Point = Point.polar( 3, Math.random() * Math.PI*2 );

            var pt2:Point = new Point( getChildAt(i).x, getChildAt(i).y );

            pt2.offset( pt.x, pt.y );

            getChildAt(i).x = pt2.x;
            getChildAt(i).y = pt2.y;
        }
    }
}
}
[/code]

댓글 없음:

댓글 쓰기