Flash CS4+ActionScript 3.0으로 네모(웃는 얼굴의 사각형) 키보드로 상하좌우 이동 조종하기, 네모가 벽과 충돌시 표정과 색이 변하게 처리.

actionScript 3.0 팁들:
화면상의 무비클립들 이름으로 배열에 추가하기: 무비클립 안의 무비클립들을 이름+연속 숫자를 이용해 한꺼번에 처리할 수 있다.

15/3/25 수

'screenM'이란 이름의 무비클립을 화면에 띄우고 이 무비클립 안에 'nemoM1'이란 이름의 주인공 무비클립, 'block1~7'까지의 블록 무비클립을 7개를 넣어두다.
var nemo = screenM.nemoM1;
var speed = 6;
var left, right, up, down:Boolean=false;
var wallArr:Array=new Array;
var i;
var hit=false;
var hitNum=0;
var blockNum=8; //화면상 장애 사각블록의 총 수

function init(){ //초기화
     left=right=up=down=false;
     //screenM 무비클립 화면상의 블록들 배열에 담기
     for(i=0; i < blockNum; i++){
          var block = screenM["block"+i];
          block.hit = 0; //블록 충돌 변수 초기화
          wallArr.push(block);
     }
    
     stage.addEventListener(Event.ENTER_FRAME,loop);
     stage.addEventListener(KeyboardEvent.KEY_DOWN,keyDowns);
     stage.addEventListener(KeyboardEvent.KEY_UP,keyUps);
}
function loop(e:Event){ //매 프레임 실행
     keyProcess(); //키보드 처리
     hitNum = 0; //총 충돌 수 초기화
     for(i=0; i < wallArr.length; i++){
          checkHit(nemo, wallArr[i]); //충돌처리
          hitNum += wallArr[i].hit; //각 박스와 충돌한 수 합산
     }
     //충돌한 수가 1개 이상이면 네모 그래픽 바꾸기
     if(hitNum > 0){nemo.gotoAndStop(2);}else{nemo.gotoAndStop(1);}
}

function checkHit(aBox, bBox){ //두 박스 충돌체크
     boxSet4corner(aBox);//박스의 상하좌우값 구하기
     boxSet4corner(bBox);
     if((aBox.right > bBox.left)&&(aBox.left < bBox.right)){
          if((aBox.down > bBox.top)&&(aBox.top < bBox.down)){
               hit = true;
          }else{ hit=false; }
     }else{ hit=false; }
     if(hit){bBox.hit = 1;}else{bBox.hit=0;} //각 박스별 충돌체크용
}
function boxSet4corner(mov){//박스의 상하좌우값 구하기
     mov.left = mov.x;
     mov.right = mov.x + mov.width;
     mov.top = mov.y;
     mov.down = mov.y + mov.height;
}

function keyProcess(){ //키보드 처리
     if(left){ nemo.x -= speed; }
     if(right){ nemo.x += speed; }
     if(up){ nemo.y -= speed; }
     if(down){ nemo.y += speed; }
}
function keyDowns(e:KeyboardEvent){ //키보드 눌릴때
     switch(e.keyCode){
          case(37): left = true; break; //left
          case(39): right = true; break; //right
          case(38): up = true; break; //up
          case(40): down = true; break; //down
          default: break;
     }
}
function keyUps(e:KeyboardEvent){ //키보드 뗄 때
     switch(e.keyCode){
          case(37): left = false; break; //left
          case(39): right = false; break; //right
          case(38): up = false; break; //up
          case(40): down = false; break; //down
          default: break;
     }
}

init();