'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(); |