1.flash에서 원을 하나 그리고 SnowClip라는 이름의 무비클립을 만든다.(Export to Actionscript 박스 체크!) 그리고 SWC로 export한다.(저장 위치는 flex내 현재 작업하고 있는 해당 project안의 libs 폴더)
2.Snow.as class를 작성한다.
3. Document class인 SnowTest.as를 작성한다.
눈내리는 효과
컴퓨터 bit :전기가 충전 / 방전 1,0
2bit ::00/01/10/11
8bit ::00110010 ---->1byte 0~256가지의 정보를 저장할 수 있다.
int::-20억~20억---->4byte
number는 8byte
public var vx:Number=1; ------------>8byte
public var vy:Number=1; ------------>8byte
public var ground:Number=400; ----->8byte
총 24byte
주로 변수들이 메모리를 차지한다.
그러므로 공유용인지 개별용인지를 구분하여 공유용인 것은 static으로 바꿔주어 메모리 할당량을 줄여준다.
실험을 해보면 static을 쓸때와 그렇지 않을 때 퍼포먼스의 차이가 많이 나게 되는 것을 알 수 있다.
Package:timo.effect SuperClass:Sprite
package timo.effect
{
import flash.display.Sprite;
import flash.events.Event;
public class Snow extends Sprite
{
private var clip: SnowClip = new SnowClip();
// 속도 변수 :: 외부에서 설정할 수 있도록... public으로 설정
//모든 눈의 속도는 다르므로 개별적으로 가져야한다.
public var vx: Number = 1; // 개별
public var vy: Number = 1; // 개별
// 공유변수는 static 변수로 설정 --> 클래스 변수
//모든 눈이 도달하는 ground위치는 같으므로 ground 변수는 공유해도 된다.
//public var ground: Number = 400; // 공유변수 !!!!! Snow.ground (아래의 static 변수와 비교하며 실험해본다.)
public static var ground: Number = 400; // 공유변수 !!!!! Snow.ground
//메서드는 따로 저장이 되므로 그냥 두고 변수 부분을 최대한 줄여보자!!!!!!!
//공유변수는 static 변수로 설정 ====>클래스 변수
// static 함수 ---> 사용의 편의성 Math.random()
// static 변수 ---> 공유의 목적...!!
public function Snow()
{
super();
this.setLayout();
this.addEvent();
}
private function setLayout(): void
{
this.addChild( clip );
}
private function addEvent(): void
{
}
// 이 함수가 호출되면, 매 프레임마다 움직이기 시작...!!
public function startMove(): void
{
this.addEventListener( Event.ENTER_FRAME, onEnter );
}
private function onEnter( e: Event ): void
{
this.x = this.x + this.vx;
this.y = this.y + this.vy;
// 땅으로 떨어지고나면, 매 프레임마다 할 일 제거하고, 자신은 parent로부터 삭제
// removeChild할 경우, (하고있는 일을 멈추지 않고 잠깐 강의실을 나가있어라! 와 같은 뜻임)
//(removeChild의 경우는 계속 Event.ENTER_FRAME은 여전히 작동중이므로 Event도 지워준다.)
// 1. 애니메이션이 있으면 stop()시키고,
// 2. EnterFrame 이벤트 삭제하기
if( this.y > Snow.ground ){
this.removeEventListener( Event.ENTER_FRAME, onEnter );
parent.removeChild( this );
}
}
} // class
} // package
SuperClass:Sprite
package
{
import flash.display.Sprite;
import flash.events.Event;
import timo.effect.Snow;
[SWF( width="550", height="400", frameRate="36", backgroundColor="0x000000")]
public class SnowTest extends Sprite
{
public function SnowTest()
{
super();
this.addEventListener( Event.ENTER_FRAME, onEnter );
}
private function onEnter( e: Event ): void
{
// 1. 눈 만들기
var snow: Snow = new Snow();
// 2. 초기 위치및 크기 설정
snow.width = snow.height = 2 + 10 * Math.random(); // 2 ~ 12
snow.x = 550 * Math.random(); // 0 ~ 550
snow.y = -20;
snow.vx = -2 + 4 * Math.random(); // -2 ~ 2
snow.vy = 2 + 4 * Math.random(); // 2 ~ 6
// 3. 화면에 붙이기
this.addChild( snow );
// 4. snow 이동시키기
snow.startMove();
}
} // class
} // package