교컴로고초기화면으로 header_kyocom
교컴메뉴
교컴소개 이용안내 소셜교컴 나눔마당 배움마당 자료마당 교과마당 초등마당 특수마당 글로벌교컴 온라인프로젝트학습 교컴 UCC
회원 로그인
정보기억 정보기억에 체크할 경우 다음접속시 아이디와 패스워드를 입력하지 않으셔도 됩니다.
그러나, 개인PC가 아닐 경우 타인이 로그인할 수 있습니다.
PC를 여러사람이 사용하는 공공장소에서는 체크하지 마세요.
소셜네트워크 서비스를 통해서 로그인하시면 별도의 로그인 절차없이 회원서비스를 이용하실 수 있습니다.
교컴 키우기 자발적 후원


:::: 교컴가족 로그인(0)

  • 주간 검색어
  • 현재 검색어
  1. 1
  2. 민주주의와 교육
  3. 윤리학과 교육
  4. 생활기록부 예시문
  5. 자유 역리 1
  6. 쇼팽
  7. 읽기
  8. 이론 활동 1
  9. 중1 과세특
  10. 6학년 사회
기간 : ~
  1. 독서 논술
  2. 수학
  3. 수학여행
기간 : 현재기준

교컴 포토갤러리

플래시수업

교플강4(무비클립과 화면상에서 움직임 이해) - 벽돌깨기를 위하여

김정식 | 2005.06.12 19:40 | 조회 3911 | 공감 0 | 비공감 0
 

주제 : 플래시로 구현해보는 운동과 벽돌깨기



☐ 주제설정의 취지 및 목적

아무리 좋은 프로그램이라 할지라도 화면상에 원하는 형태로 표현할 수 없다면 좋은 프로그램이라고 할 수 없다. 필자는 새로운 프로그램을 접할 때 마다 구구단문제와 벽돌깨기를 꼭 만들어 본다. 이 2가지 프로그램을 쉽게 만들어 낼 수 있는 프로그램이라면 사용하기에 있어서 편리한 프로그램이라고 볼 수 있다. 이런 관점에서 본다면 벽돌깨기는 반드시 만들어 보아야 할 프로그램 중에 하나이다. 우리는 벽돌깨기를 만들어 봄으로써 화면상 원하는 위치에 물체를 표현해내는 방법과, 모니터상에서의 좌표체계, 또 플래시를 이용한 그래픽처리 방법에 대해서 배우게 될 것이다. 아울러 화면상의 물체를 제어하는 방법과, 충돌처리방법 그리고 마우스나 키보드를 이용한 움직임 처리방법에 대한 것들도 배우게 될 것이다. 화면상에서 어떤 물체를 원하는 좌표에 위치시킬 수 있고, 제어할 수 있다면 못 만들 것이 무엇이 있겠는가. 이제 우리의 생각을 컴퓨터 화면상에 만들어 보자.


☐ 학습목표

○. 속력에 따른 물체의 움직임을 표현할 수 있다.

○. 변수를 이용하여 운동의 방향을 바꿀 수 있다.

○. 마우스를 따라다니는 운동을 만들 수 있다. .

○. 무비클립간의 충돌을 이해하고, 충돌후 반응을 처리할 수 있다.

 

  학습 활동

1. 속력에 따른 물체의 움직임을 표현할 수 있다.


가. 실제좌표와 컴퓨터에서 나타내는 좌표를 이해할 수 있다.


우리가 실제로 수학시간에 사용하는 좌표는 데카르트 좌표계를 사용한다. 데카르트 좌표계는 양의 y축 방향이 위쪽이라는 점을 주목해야 한다. 불행히도, 모니터 상에서는 데카르트 좌표계를 사용하지 않는다. 컴퓨터 화면상에서 사용하는 좌표계를 정확히 이해하는 것이 무엇보다 중요하다 하겠다. 컴퓨터 화면상에서는 양의 y축 방향이 아래로 내려가게 된다.


  y축                                                   x축 

    \"\"               \"\"    

                       x축          y축 


<활동> 화면좌표계에 아래의 좌표를 ● 로 표시해 보자.

\"\" 

- 좌표 A (10,15) , B (5,7) , C(14,18), D(8,13), E(19,3)

<토의> 화면의 오른쪽으로 이동해 가면 어떤 좌표갑이 증가하는가?  (    )

        화면의 아래쪽으로 이동해 갈수록 어떤 좌표값이 증가하는가?(    )



우리가 일반적으로 사용하는 모니터의 해상도는 바로 화면좌표계를 말하는 것이다. 예를 들면 모니터 해상도가 800×600 이라 함은 x좌표가 최대 800 y좌표가 최대 600 이라는 말이다. 앞으로 화면좌표와 해상도의 의미를 생각하면서 다음 작업을 진행해 보자.


나. 공 무비클립을 만들어 움직이는 방법을 알 수 있다.

  (무비클립 속성의 이해)

이제 우리는 화면상에 공하나를 만들어 원하는 위치로 움직이게 할 것이다. 화면상에 나타나는 공을 움직이게 하기 위해서는 우리는 무비클립이라는 것을 사용할 것이다.

비클립이란 화면 첫메인의 움직임이 멈춘 상태에서도 독자적으로 움직임을 가지는 심볼을 말하며 또한 독자적인 Instance Name을 가질 수 있다.. 흔히, 액션 스크립트의 객체로 \"무비 속의 또다른 무비\"의 역할을 하기도 한다. 우선 무비클립을 한개 만들어 보자. 화면상에 원을 하나 그리고 [F8]키를 눌러 무비클립으로 만든다. 무비클립 심벌의 이름을 ‘공’이라고 하자.

\"\"  

완성된 무비클립을 제어하기 위해서는 Instance Name을 부여해야 한다. 프레임스크립트에서 공을 제어하기 위해서는 반드시 무비클립 객체에 이름을 주어야 한다. 무비클립을 선택했을때 나타나는 아래 Properties 창에 Instance Name을 부여해 보자. 여기에서는 ‘ball’ 이라고 Instance Name을 부여하기로 하자.

  ->  \"\"  \"\"

Properties(속성)창을 좀더 자세히 살펴볼 필요가 있다. 아마 여러분은 ‘공’이라는 이름을 주었는데 \'ball\'이라는 이름을 왜 또 주어야 하는지 궁금해 할 것이다. 처음에 준 ‘공’이라는 이름은 무비클립심벌의 이름이고, 두 번째 Instance Name 에 부여한 \'ball\'이라는 이름은 실제 우리가 제어할 객체의 이름이라고 생각하면 된다. 이렇게 생각해 보자. 우리가 영화를 만들기 위해 ‘안성기’라는 영화 배우를 섭외해서 거지왕자를 찍는다고 가정해 보자. 우리는 ‘안성기’라는 영화배우를 1인 2역으로 사용할 예정이다. 안성기는 우리영화에서 왕자로 출연할 것이고, 또한 거지로도 출연할 것이다. 그렇다면 우리가 영화대본에서 ‘안성기 지금 오른쪽으로 이동한다’라고 표현한다면 과연 왕자와 거지중 누가 이동해야 하겠는가. ‘안성기’ 라는 이름은 배우의 본명일뿐 실제 무대상에 출연한 배역의 이름이 될 수는 없다. 따라서 영화대본에서는 안성기라는 이름이 아닌 왕자, 또는 거지 라는 이름으로 불리워 져야 할 것이다. 플래시에서도 마찬가지이다. 첫번째. 무비클립이라는 심벌을 만들면서 준 이름은 ‘공’이라는 배우를 만든것과 같고, 두 번째 화면상에 위치한 ‘공’에게 준 \'ball\'이라는 이름은 실제 배역의 이름이라고 할 수 있다. 따라서 우리가 화면상에 나타나 있는 공을 움직이기 위해서는 어떤이름에게 명령을 주어야 하겠는가? 그렇다 \'ball\'이라는 이름에 명령을 주면 될 것이다.

위에서 설명한 것처럼 ‘공’ 이라는 심벌에서 필요하다면 ball 이라는 객체뿐만 아니라 여러개의 객체를 만들어 사용할 수도 있다는 것도 알아두자. 그밖에도 Properties 창에는 무비클립 객체의 넓이, 높이, 그리고 위치(x,y) 가 나타나 있음을 알 수 있다.


<활동> Properties 창에 X 와 Y의 값을 입력하면서 ball 무비클립의 위치가 어떻게 변화되는지 살펴보자.

\"\"  


X의 값만을 0부터 500 까지 증가시켜 보면서 관찰해 보자.

Y의 값만을 0부터 400 까지 증가시켜 보면서 관찰해 보자.

W와 H의 값을 변화시켜 보자

화면상에 있는 ball 무비클립을 마우스로 선택해서 이동시킨후 properties 창의 X와 Y 값이 어떻게 변하는지 관찰해 보자.



다. 현재 무비클립의 위치를 추적할 수 있다.

그럼 ball 무비클립을 화면상에서 액션스크립트를 이용해서 움직여 보자.

메인프레임에 아래와 같은 액션스크립트를 적어보자.

ball._x = 100;   //ball 이라는 이름을 가진 무비클립의 x 좌표를 100이 되게

값을 바꾸어 가면서 화면상에 나타나는 공의 위치를 관찰해 보자.

무비클립에 명령을 주는 방법은 먼저 이름을 부르고, 속성을 지정한 다음 값을 주면 된다.

무비클립이름.속성=값

자 그럼 ball 무비클립을 왼쪽에서 오른쪽으로 이동하도록 만들어 보자. 오른쪽으로 위치가 이동하려면 x좌표의 값을 계속해서 증가하게 만들면 될 것이다.

for (i=1; i<=500; i++) {

        ball._x = i;

}

자 위와 같이 명령을 준다면 어떤 결과가 나타나겠는가? ball 무비클립의 x 위치가 1서부터 500까지 증가하니까 ball 무비클립이 왼쪽에서 오른쪽으로 이동하지 않겠는가? 하지만 실행시켜 보면 이동하는 모습이 나타나지 않고, ball 의 x 위치가 500 에 가있는 것만을 보게 될 것이다. 도대체 무엇이 잘못 되었단 말인가? 명령 자체는 잘못된 것은 없다. 프로그램 특성상 빠른 계산을 위해서 계산중간과정은 화면성에 보여주지 않고, 결과만을 화면상에 보여주기 때문에 위아같이 명령을 준다면 우리는 마지막 ball 의 위치만 보게 되는 것이다. 그렇다면 중간에 이동하는 모습을 보려면 어떻게 해야 할까? 한번 계산하고 계산한 결과를 화면상에 보여주고, 또 다음 계산을 하고 계산한 결과를 화면상에 보여주고, 이런식으로 계속해서 보여 주게 한다면 우리는 ball 이 이동해 가는 모습을 볼 수 있게 될 것이다.

플래시에서는 화면상의 이동모습을 보기 위해서 onEnterFrame 이라는 액션을 사용한다. 자 우선 아래와 같이 액션스크립트를 적고 실행 시켜 보자.

onEnterFrame = function () {

        ball._x = ball._x+1;

}

자 이제는 화면상에서 ball 이 이동하는 모습이 보이는가? onEnterFrame 이라는 액션이 가지는 의미는 계속 같은 프레임을 반복실행하면서 프레임을 반복실행할 때 마다 onEnterFrame 안에 들어 있는 명령어를 실행하고, 화면상에 표시하라는 의미로 생각하면 된다. 이것도 이해가 안되면 일단은 무조건 외워 두자.


위처럼 액션스크립트를 코딩해주면 계속해서 오른쪽으로 이동하다가 화면을 벗어나는 것을 볼 수 있다. 그렇다면 어느 일정한 지점에서 다시 맨 왼쪽으로 돌아와 다시 오른쪽으로 움직이게 하려면 어떻게 해야할까? 아래 스크립트처럼 조거문이 하나 더 추가되야 할 것이다.

ball._x=0;

onEnterFrame = function () {

        ball._x = ball._x+1;

       //조건문을 만족하면 ball 의 위치를 맨 왼쪽으로 옮김

        if(ball._x>500){

            ball._x=0;

        }    

}

즉 ball 의 x 좌표가 500보다 커지면 그순간에 baal 의 x 좌표를 0으로 만들어 주면 다시 왼쪽으로 돌아와 오른쪽으로 움직이기 시작할 것이다.


실행을 멈추게 하려면 어떻게 해야 할까?

ball._x=0;

onEnterFrame = function () {

        ball._x = ball._x+1;

       //조건문을 만족하면 onEnterFrame 문의 반복실행을 없앰

        if (ball._x>500) {

                delete onEnterFrame;

        }

}


<토의>

2개의 공이 동시에 움직이게 하려면 어떻게 해야 할까

delete onEnterFrame; 문을 사용 않하고 공의 움직임을 멈추게 할 수 있을까

 



라. 간단한 경주게임을 만들어 볼 수 있다.

공2개를 등장시켜서 결승선까지 누가 빨리 가는지 경주를 하는 게임을 만들어 보자.

1)고려해야 할 사항에 대해 토의해 보고 변수명을 정해보자.

2번프레임에서 경주 실행, 1 번프레임 시작화면 및 정지화면

공1의 인스턴스명 (ball1)

공2의 인스턴스명 (ball2)

결승선 위치      (x좌표가 500)

누가 더 빨리 들어왔는지 판단 기준

            (1등이 들어오면 프레임을 이동시켜 전체가 멈추게)

시작 버튼 인스턴스명(start_ok)

컴퓨터가 임의로 속도 차이나도록 구상 (Math.random()문 사용)

2) 화면구성

\"\" 

3) 액션스크립트

   1번프레임 액션

stop();  // 1번프레임에서 정지

//시작 버튼을 누르면 ball1과 ball2의 위치를 왼쪽끝으로 옮기고

// 2번프레임으로 이동

start_btn.onRelease = function() {

        ball1._x = 0;

        ball2._x = 0;

        gotoAndPlay(2);

}


   2번프레임 액션

//계속반복실행

onEnterFrame = function () {

        //ball1과 ball2를 기본적으로 x좌표로 5씩 이동시키면서

        //random문을 이용하여 임의로 5이내의 값만큼 이동

        ball1._x = ball1._x+5+Math.floor(Math.random()*5);

        ball2._x = ball2._x+5+Math.floor(Math.random()*5);

        // 결승선위치까지 도달하면 반복실행을 중지하고 1번프레임으로 이동

        if (ball1._x>500 || ball2._x>500) {

                delete onEnterFrame;

                gotoAndStop(1);

        }

}

stop();

2번프레임 액션에서 주목해야 할 액션스크립트는

ball1._x = ball1._x+5+ Math.floor (Math.random()*5); 일 것이다.

즉 ball1 의 x 좌표는 원래의 좌표에서 5씩 계속해서 더해가면서 임의로 Math.floor(Math.random()*5) 만큼 즉 0 부터 4사이의 임의의 정수 만큼 더 움직이라는 것이다. 그렇기 때문에 난수값에 의해 어떤 ball 이 먼저 들어올지 알수가 없게 되는 것이다.


<응용> 공을 2개가 아닌 5개가 동시에 움직이게 하려면 어떻게 해보자

또 공대신 멋진 자동차나 비행기로 바꾸어서 경주를 시켜 보자.

좋아요! 싫어요!
twitter facebook me2day
448개(5/23페이지) rss
플래시수업
번호 제목 글쓴이 조회 날짜
공지 [활용] 수업 활용 감동 플래시 150편 [37+1] 함영기 163153 2003.08.21 18:57
367 답글 [플래시수업] RE:플래시학습자료제작-연습파일 첨부파일 [1] 김정식 3035 2005.08.18 11:11
366 답글 [플래시수업] RE:[문제만들기 옛날 빵없는 소스] 첨부파일 [1] 유춘모 2558 2005.08.17 20:48
365 [이미지자료] 백일홍이야기-플래시앨범 첨부파일 김은정 3136 2005.07.30 21:45
364 [플래시유틸] 플래시 앨범 - 동해 일출 첨부파일 함영기 3108 2005.07.29 09:04
363 [기타플래시] 플래시 배너 만들기 연습 첨부파일 함영기 3307 2005.06.28 19:42
362 [플래시유틸] [앨범] 나모 플래시 크리에이터로 만든 앨범2 함영기 2535 2005.06.28 19:30
361 [플래시유틸] [소개] 나모 플래시 크리에이터로 만든 앨범 함영기 2616 2005.06.28 16:28
360 [플래시수업] 플래시파일을 파워포인트에서 사용하려면? 정온정 3590 2005.06.13 20:59
359 답글 [플래시수업] RE:플래시파일을 파워포인트에서 사용하려면? 함영기 4084 2005.06.15 18:40
358 [플래시강좌] 교플강6(벽돌깨기 만들기 - 충돌이해)-벽돌깨기를 위하여 첨부파일 김정식 4247 2005.06.12 20:09
357 [플래시강좌] 교플강5(화면을 못 벗어나게, 그리고 마우스를 따라다니는 움직임) - 벽 첨부파일 김정식 4166 2005.06.12 20:03
>> [플래시강좌] 교플강4(무비클립과 화면상에서 움직임 이해) - 벽돌깨기를 위하여 사진 첨부파일 김정식 3912 2005.06.12 19:40
355 [플래시강좌] 교플강3(구구단 문제 출제 프로그램 만들기) 첨부파일 김정식 4689 2005.05.29 13:26
354 [플래시강좌] 교플강2(구구단 화면에표시하기,생각한 숫자 맞추기게임) 첨부파일 김정식 5017 2005.05.29 13:24
353 [플래시강좌] 교플강1(구구단 만들기를 위한 기초개념) 첨부파일 [1] 김정식 6659 2005.05.29 13:23
352 [플래시강좌] <b>[강의] 민서아빠의 교사를 위한 플래시 강의(교플강)&l 첨부파일 [5] 김정식 14834 2005.05.29 13:18
351 [기타플래시] 플래시로 만든 손접기 첨부파일 김정식 3413 2005.04.30 20:16
350 [플래시게임] [게임] 알쏭달쏭 게임 플래시 첨부파일 [1] 함영기 4742 2005.04.26 14:46
349 [플래시수업] [공통] 초중고 독도 플래시 학습자료 [1] 함영기 4638 2005.04.04 08:12
348 [플래시게임] 퀴즈부저2.0 - 소스 첨부파일 김정식 4727 2005.03.24 20:50