본문 바로가기

카운트다운-플래시

출처 네이버지식

1. 과연 글씨는 어디에 나오는가?
fla파일을 열면, 아무것도 보이지 않습니다. 그런데, ctrl+Enter을 눌러 테스트 무비를 실행하면 숫자가 나옵니다.
이게 어떻게 된 일일까요?
한번 확인해 봅시다!!
맨 아래 레이어의 2프레임에 회색 칠이 되어있죠? 이건 내용이 있다는 뜻입니다.
Dynamic Text 라는 레이어를 보면, 자물쇠 표시가 되어 있습니다. 이 표시를 눌러봅시다.
그리고, 문제의 2프레임을 보면 파란색으로 무언가 있습니다!!
이건 바로 동적 텍스트(dynamic text)라는 것입니다.
동적 텍스트는, 액션을 통하여 자신이 원하는 값을 집어넣을 수 있는 텍스트입니다. 따라서, 현재는 내용이 없지만, 액션을통해서 D-day까지 남은 시간을 표시하게 되는 것이죠.

2. 액션 설명
이제 액션을 한번 봅시다.
맨 위 레이어를 클릭 한 후, 액션창(F9가 단축키)을 열어봅시다. 그러면,
Stage.showMenu = false; 라는 액션이 있습니다.
이 액션은, 오른쪽을 클릭했을 때, 메뉴가 뜨지 않게 해줍니다(기본적으로 나타나는 '설정', 'flash player 정보' 는 나옵니다)
이 액션은 D-day를 나타내는 것과는 관련이 없으나, 매우 많이 쓰이므로 알아둡시다.
이제, 그 아래 레이어(두번째)의 1프레임을 클릭하고 액션창을 봅시다. 

d_day = new Date();
d_day.setFullYear(2007, 10, 15);
d_day.setHours(0, 0, 0, 0);
d_day_ms = d_day.getTime();
function add_0(input, decimal) {
 for (i=0; i<decimal; i++) {
  if (input<Math.pow(10, i) && i != 0) {
   input = "0"+input;
  }
 }
 return input;
}

이렇게 적혀있을 겁니다.
이 액션을 해석해 드리겠습니다.
첫 줄: d_day라는 변수를 만든다 (Date 오브젝트), 이 변수는 날짜 속성을 가진다.

둘째 줄~4째줄:D-day의 년도 등의 정보 입력 후, 1970년부터 설정한 정보(시간)까지 흐른 밀리초 단위 시간을
d_day_ms 라는 변수에 저장한다.
다섯째 줄~ 끝 줄: add_0이라는 함수를 만든다.
이 함수는, 값의 앞에 0을 붙여주는 함수입니다. 이제 플래시를 막 하신다면, 설명해도 이해가 잘 안가실 테니 일단 생략하겠습니다.
이제, 2프레임을 봅시다.

present = new Date();
present_ms = present.getTime();
difference = d_day_ms-present_ms;
d_days = Math.floor(difference/(24*60*60*1000));
d_days = add_0(d_days, 3);
difference -= d_days*24*60*60*1000;
d_hours = Math.floor(difference/(60*60*1000));
d_hours = add_0(d_hours, 2);
difference -= d_hours*60*60*1000;
d_minutes = Math.floor(difference/(60*1000));
d_minutes = add_0(d_minutes, 2);
difference -= d_minutes*60*1000;
d_seconds = Math.floor(difference/1000);
d_seconds = add_0(d_seconds, 2);
difference -= d_seconds*1000;
d_ms = difference;
d_ms = add_0(d_ms, 3);
counter = d_days+":"+d_hours+":"+d_minutes+":"+d_seconds+":"+d_ms;

이 내용은 간추려 말하자면, 여러 개의 변수를 만들고, 각각에 앞으로 남은 일,시간,분,초의 정보를 대입하는 것입니다.

자세히 말하면, difference라는 값은 D-day로부터 현재까지 사이의 간격을 밀리초(초/1000)로 나타낸 값을

24*60*60*1000으로 나눠서 몫을 일 수, 나머지를 다시 difference에 대입하고,

또 60*60*1000 으로 나눠서 몫을 시간 수, 나머지를 변수에 저장하고.... 이렇게 반복하는 것입니다.
24는 하루의 시간 수, 60 2개는 각각 1분, 1시간의 초, 분 수, 1000은 1초 안에 있는 밀리초의 수입니다.
이해 안가시면 덧글 ->->
그리고 마지막 줄: counter은 아까 처음에 살펴 본 동적 텍스트의 변수명입니다.
변수명이라고 제가 말한 것은, 그 텍스트가 가지고 있는 변수로서, 그 변수의 값은 곧 텍스트의 값이 됩니다.
따라서 counter = d_days+":"+d_hours+":"+d_minutes+":"+d_seconds+":"+d_ms; 라고 입력하는 것은,
counter라는 변수를 가진 텍스트에 d_days+":"+d_hours+":"+d_minutes+":"+d_seconds+":"+d_ms 를 입력하라는 것입니다.
d_days+":"+d_hours+":"+d_minutes+":"+d_seconds+":"+d_ms 여기서 d_days, d_hours ...는 각각 남은 일,시간,분,초,밀리초의 값이 대입되어 있는 변수입니다. 그리고, : 주변의 ""는, 변수가 아닌 문자열임을 뜻합니다.
마지막으로 3프레임의 액션창을 보면, 이번엔 비교적 간단하게, gotoAndPlay(_currentframe-1);
 이렇게 되어있습니다. 이 액션은, 현재의 프레임에서 한프레임 뒤로 가라는 뜻입니다.
_currentframe 은 현재의 프레임을 반환하는 것입니다.
따라서, 이 플래시를 켜면, 2,3프레임을 계속 왔다갔다하면서 시간을 표시하게 됩니다.
왜 굳이 왔다갔다 하게 하는지 궁금하지 않으세요?
그 이유는 바로, 프레임에 넣은 액션은, 프레임에 진입할 때만 실행이 되기 때문입니다.
따라서 만약 2프레임에서 멈춰버린다면, 2프레임에 진입하는 그 순간 남은 시간만 표시되게 됩니다.
그러면 안되겠죠?