메인 스테이지에는 stick이라는 작은 막대기 클립이 있고, 액션으로
이 클립이 점점 복제되어 나무 모양으로 변하는 무비입니다.
****-------***--------***----------****-----------***
// stick 클립 자체에 적힌 코드
onClipEvent(enterFrame)
{
if (_root.numsticks < _root.maxsticks && dead != true)
{
음.. 사실.. 어느정도의 수준이신지. 몰라서..
아주 기본적인 부분부터 설명하려 합니다.
#####
Part1
#####
-------------------------------------------------------
onClipEvent(enterFrame)
{
내용
}
-------------------------------------------------------
플래시에서는 이벤트가 중요합니다.
이 이벤트가 무엇인지 우선 알아야 합니다.
아주 기본적인 부분이지만..
플래시를 전혀 모르시는 분이 계실지도 모르니..
설명드립니다.
위의 이벤트는 무비클립에 사용되는 이벤트입니다.
뜻은.. 플래시에 설정되어있는 프레임속도만큼.. 계속 실행하라는 말입니다.
프레임 속도가 뭐냐구요..^^
타임라인 아래에 보면.. 12.0 fps라고 있죠..
12.0 frame per second 라는 것인데..
1초당.. 12프레임을 이동하는 것이져...
다시 말하면
위의
onClipEvent(enterFrame)
{
내용
}
사이의 내용이 1/12초 마다.. 실행이 된다는 말입니다.
swf가 실행되고.. 끝날때까지요..
movieEvent는 이벤트를 호출한 트리거입니다. 이벤트가 발생하면 중괄호 안에서 그 다음의 명령문이 실행됩니다. movieEvent 매개 변수에는 다음과 같은 값이 지정될 수 있습니다.
load 액션은 무비 클립이 인스턴스화되는 대로 시작되고 타임라인에 나타납니다.
unload 무비 클립이 타임라인에서 제거된 후 첫 프레임에서 액션이 시작됩니다. Unload 무비 클립 이벤트와 연결된 액션은 영향을 받은 프레임에 첨부되기 전에 처리됩니다.
enterFrame 액션은 무비의 프레임 속도로 계속 트리거됩니다. enterFrame 클립 이벤트와 연결된 액션은 영향을 받은 프레임에 첨부된 프레임 액션 전에 처리됩니다.
mouseMove 액션은 마우스가 이동할 때마다 시작됩니다. _xmouse 및 _ymouse 속성을 사용하여 현재 마우스 위치를 파악합니다.
mouseDown 액션은 왼쪽 마우스 단추를 누르면 시작됩니다.
mouseUp 액션은 왼쪽 마우스 단추를 놓으면 시작됩니다.
keyDown 액션은 키를 누르면 시작됩니다. Key.getCode 메서드를 사용하여 마지막으로 누른 키에 관한 정보를 검색합니다.
keyUp 액션은 키를 놓을 때 시작됩니다. Key.getCode 메서드를 사용하여 마지막으로 누른 키에 관한 정보를 검색합니다.
data 액션은 loadVariables 또는 loadMovie 액션에서 데이터가 수신될 때 시작됩니다. loadVariables 액션으로 지정된 data 이벤트는 마지막 변수가 로드될 때 한 번만 발생합니다. loadMovie 액션으로 지정된 data 이벤트는 각 데이터 섹션이 검색될 때 반복적으로 발생합니다.
statement(s) mouseEvent가 발생할 때 실행할 명령어
[설명]
이벤트 핸들러; 무비 클립의 특정 인스턴스에 대해 정의된 액션을 트리거합니다.
[예제]
다음 명령문은 무비를 내보낼 때 외부 파일의 스크립트를 포함합니다. 포함된 스크립트의 액션은 첨부된 무비 클립이 로드될 때 실행됩니다.
onClipEvent(load) {
#include "myScript.as"
}
다음 예제에서는 keyDown 무비 이벤트와 함께 onClipEvent를 사용합니다. keyDown 무비 이벤트는 대개 Key 객체의 하나 이상의 메서드 및 속성과 함께 사용됩니다. 아래 스크립트는 Key.getCode 메서드를 사용하여 사용자가 누른 키를 알아냅니다. 누른 키가 Key.RIGHT 속성과 일치하면 무비는 다음 프레임으로 보내집니다. 누른 키가 Key.LEFT 속성과 일치하면 무비는 이전 프레임으로 보내집니다.
onClipEvent(keyDown) {
if (Key.getCode() == Key.RIGHT) {
_parent.nextFrame();
} else if (Key.getCode() == Key.LEFT){
_parent.prevFrame();
}
}
다음 예제에서는 mouseMove 무비 이벤트와 함께 onClipEvent를 사용합니다. _xmouse 및 _ymouse 속성은 마우스가 이동할 때마다 마우스의 위치를 추적합니다.
onClipEvent(mouseMove) {
stageX=_root.xmouse;
stageY=_root.ymouse;
}
==================================================================
위의 내용은 참고하세요!!
사실 굉장히 중요한 부분입니다.
아래 내용은 FlashMX버젼 형식인데요.. 같은 거라서..
잠깐.. 적습니다.
===============================================================
myMovieClip.onEnterFrame 설명
[구문]
myMovieClip.onEnterFrame
[설명]
이벤트 핸들러; 무비의 프레임 속도로 계속해서 호출됩니다. enterFrame 클립 이벤트와 관련된 액션은 영향을 받는 프레임에 연결된 프레임 액션보다 먼저 처리됩니다.
해당 이벤트가 호출될 때 실행할 함수를 정의해야 합니다.
[예제]
다음 예제에서는 trace를 출력 창으로 보내는 onEnterFrame 메서드에 대해 함수를 정의합니다.
myMovieClip.onEnterFrame = function () {
trace ("onEnterFrame called");
};
Frame1에 있는 액션
--------------------------
//메인 스테이지 1번 프레임
stick.destr = 90;
stick._rotation = 90;
numsticks = 0;
maxsticks = 200;
sticklen = 40;
da = 45;
--------------------------
이 부분은 일단.. 설정값으로 보시면 되구요..
이 설정값을 기초로..
EnterFrame내부의 액션이 계속 실행되는거죠.. 1/12초 간격으로
물론 if문내의 조건을 만족해야
if문 내의 내용이 적용되겠죠..
#####
Part3
#####
나뭇잎을 많이 복사하는거니까!!
if문내의 액션중에서도..
duplicateMovieClip (_root.stick, nm, _root.numsticks++);
부분이 제일 중요하겠네요..
depth 복제된 무비 클립의 고유 깊이 레벨입니다. 깊이 레벨이란 복제된 무비 클립이 쌓이는 순서를 말합니다. 깊이 레벨은 타임라인에서 레이어가 쌓이는 순서와 매우 비슷합니다. 이미 사용 중인 깊이에 다른 무비가 쌓이는 것을 막으려면 복제된 각 무비 클립에 고유의 깊이 레벨을 지정해야 합니다.
[설명]
액션; 무비가 재생되는 동안 무비 클립의 인스턴스를 만듭니다. 복제된 무비 클립의 재생 헤드는 원본(또는 “부모”) 무비 클립에서의 재생 헤드의 위치와 무관하게 항상 프레임 1에서 시작합니다. 부모 무비 클립의 변수는 복제된 무비 클립으로 복사되지 않습니다. 부모 무비 클립이 삭제되면 복제된 무비 클립도 함께 삭제됩니다. duplicateMovieClip을 사용하여 만든 무비 클립 인스턴스를 삭제하려면 removeMovieClip 액션 또는 메서드를 사용합니다.
[예제]
다음 명령문에서는 무비 클립 인스턴스 flower를 10번 복제합니다. 변수 i는 복제된 각 무비 클립의 새 인스턴스 이름과 고유 깊이를 만드는 데 사용됩니다.
on (release) {
amount = 10;
while (amount>0) {
duplicateMovieClip (_root.flower, "mc"+i, i);
setProperty ("mc"+i, _x, random(275));
setProperty ("mc"+i, _y, random(275));
setProperty ("mc"+i, _alpha, random(275));
setProperty ("mc"+i, _xscale, random(50));
setProperty ("mc"+i, _yscale, random(50));
i++;
amount--;
}
}
=================================================================
duplicateMovieClip 라는 것이 이런 내용입니다.
위의 설명 보시면..
duplicateMovieClip라는 거 이해 가실겁니다.
사실.. 플래시MX에서는 위의 방식 보다는
=================================================================
MovieClip.duplicateMovieClip
initObject 복제된 무비 클립을 채울 속성을 포함하는 객체입니다. 동적으로 만들어진 무비 클립에서 이 매개 변수를 사용하여 클립 매개 변수를 받을 수 있습니다. 객체가 아닌 initObject는 무시됩니다. initObject의 모든 속성은 새 인스턴스로 복사됩니다. initObject에 지정된 속성은 생성자 함수에서 사용이 가능합니다. 이 매개 변수는 선택 사항입니다.
[설명]
메서드; 무비가 재생되는 동안 지정된 무비 클립의 인스턴스를 만듭니다. duplicateMovieClip 메서드를 호출하면 복제된 무비 클립은 원본 무비 클립이 존재하는 프레임에 상관 없이 항상 프레임 1부터 재생됩니다.부모 무비 클립의 변수는 복제된 무비 클립으로 복사되지 않습니다. 부모 무비 클립 상에서 duplicateMovieMethod를 호출하는 경우 duplicateMovieClip 메서드를 사용하여 만들어진 무비 클립은 복제되지 않습니다. 부모 무비 클립이 삭제되면 복제된 무비 클립도 함께 삭제됩니다. duplicateMovieClip으로 추가된 무비 클립을 제거하려면 removeMovieClip 액션이나 메서드를 사용합니다.
===================================================================
위의 방식을 사용하게는 바람직합니다.
#####
Part4
#####
자 그 다름 내용으로는 Math라는 객체겠죠!!
여기까지 설명하면.. 위 소스의 골자는 다 거론 된 것 입니다.
메서드; 매개 변수 x에 지정된 숫자 또는 표현식의 내림 값을 반환합니다. 내림 값은 지정된 숫자나 표현식보다 작거나 같으면서 이 숫자에 가장 가까운 정수입니다.
[예제]
다음 코드에서는 값 12를 반환합니다.
Math.floor(12.5);
=======================================================
Math에 대한 설명은 여기까지 입니다.
이 골자들이.. 플래시 액션의 기본 구문들과 어떻게..
연결되구 구성되었는지를 보면되는 거죠...
사실.. 전혀 모르는 분이라고 생각하고..
작성하다보니..
쩜.. 길군요.. 그래도 열띰히.. ㅡㅡ;;
#####
Part4
#####
if (_root.numsticks < _root.maxsticks && dead != true){
...
}
if문내의 조건을 보면..
_root.numsticks < _root.maxsticks 과 dead != true을 모두 만족할때만..
if문내의 부분이 실행되겠죠...
dead != true 이라는건...
dead 가 true가 아니면...
이라는 거죠...
아시죠!!!
#####
Part5
#####
한줄 한줄.. 분석해볼까요!!
nm = "st"+_root.numsticks;
==1번째 줄 분석 시작 ==
nm이라고 하는 것은..
stick이라는 무비를 st1 , st2, st3....
이렇게 계속 복사시킬 무비의 이름입니다.
1Frame의
maxsticks = 200;
이니까.. 200개가 복사 될꺼구..
st1 부터.. st200까지 만들어지겠네염..
허걱.. 넘 친절하당...
군데.. 제가 짐 이렇게 하는게.. 광주내려가서 직접 갈켜 드리는 것보다는 빠르겠져...
== 1번째 줄 분석 끝 ==
== 2번째 줄 분석 시작 ==
이 부분은 위의 부분 참고 하세요!!
== 2번째 줄 분석 끝 ==
ra = _rotation*(Math.PI/180);
== 3번째 줄 분석 시작 ==
여기서..
_rotation가 좀 이상하다고 생각하실 수 있지만..
stick._rotation이라고 하면 이해가 가시죠..
앞에.. stick이 생략되어..
_rotation만 쓰느거죠..
좀 더 엄밀히 말하자면..
this가 생략된것으로..
this._rotation = stick._rotation
_x 와 _y 만 써진것두...
같은 맥락입니다.
== 3번째 줄 분석 끝 ==
len = (Math.random()*(_root.sticklen-10))+10;
== 4번째 줄 분석 시작 ==
Math.random()에서 정수로 된 임의의값이 나오겠죠..
거기다.. 뒤의 부분은 복사하고 있군요...
내용을 보니까..
sticklen이라는거.. 나무 줄기의 부분인것 같군요..
크면 클수록.. len도 커지겠군요...
== 4번째 줄 분석 끝 ==