var bg =backM;
var camera:Sprite=new Sprite(); //가상 카메라var cVel:int = 10; //1회 이동 거리var left=false,right=false;
var rightEnd = stage.stageWidth;//화면 우측끝
var downEnd = stage.stageHeight;//화면 하단끝
function init(){
camera.x = rightEnd/2; //카메라는 화면 중앙bg.x = rightEnd/2 - camera.x;
stage.addEventListener(Event.ENTER_FRAME,loop);
stage.addEventListener(KeyboardEvent.KEY_DOWN,keyOn);
stage.addEventListener(KeyboardEvent.KEY_UP,keyUps);
}
function keyOn(e:KeyboardEvent){
switch(e.keyCode){
case 37: left=true; break;//왼쪽 화살표
case 39: right=true; break;//오른쪽 화살표
default: break;
}
}
function keyUps(e:KeyboardEvent){
switch(e.keyCode){
case 37: left=false; break;//왼쪽 화살표
case 39: right=false; break;//오른쪽 화살표
default: break;
}
}
function loop(e:Event){
if(left){
camera.x -= cVel;//카메라 위치가 화면을 벗어날 경우 처리if(camera.x < rightEnd/2) camera.x = rightEnd/2;
}
if(right){
camera.x += cVel;if(camera.x > bg.width-rightEnd/2){ camera.x = bg.width-rightEnd/2;}
}
bg.x = rightEnd/2 - camera.x;
}
init();
2-1a: 배경 다중 스크롤 시키기.
키보드 좌우 키를 누를 때마다 근경, 중경, 원경인 배경 3개가 각각 다른 속도로 좌우로
이동. 배경의 넓이에 따라 이동 속도가 달라진다. 넓이가 넓을 수록 빨리 이동하고 좁을 수록 천천히 이동한다.
소스(스테이지상에 미리 'backM', 'back2M', 'back3M'이란
이름의 각각 넓이가 다른 배경 무비클립 3개를 놓아두었다):
var bg:MovieClip=backM;
var bg2:MovieClip=back2M;
var bg3:MovieClip=back3M;var camera:Sprite=new Sprite();
var cVel:int = 10; //1회 이동 거리var left=false,right=false;
var rightEnd = stage.stageWidth;
var downEnd = stage.stageHeight;
function init(){
camera.x = rightEnd/2;bg.x = rightEnd/2 - camera.x;bg2.x = rightEnd/2 - camera.x;bg3.x = rightEnd/2 - camera.x;
stage.addEventListener(Event.ENTER_FRAME,loop);
stage.addEventListener(KeyboardEvent.KEY_DOWN,keyOn);
stage.addEventListener(KeyboardEvent.KEY_UP,keyUps);
}
function keyOn(e:KeyboardEvent){
switch(e.keyCode){
case 37: left=true; break;//왼쪽 화살표
case 39: right=true; break;//오른쪽 화살표
default: break;
}
}
function keyUps(e:KeyboardEvent){
switch(e.keyCode){
case 37: left=false; break;//왼쪽 화살표
case 39: right=false; break;//오른쪽 화살표
default: break;
}
}
function loop(e:Event){
if(left){
camera.x -= cVel;
if(camera.x < rightEnd/2) camera.x = rightEnd/2;
}
if(right){
camera.x += cVel;
if(camera.x > bg.width-rightEnd/2) camera.x = bg.width-rightEnd/2;
}
bg.x = rightEnd/2 - camera.x;bg2.x = (bg2.width-rightEnd)/(bg.width-rightEnd) * bg.x;bg3.x = (bg3.width-rightEnd)/(bg.width-rightEnd) * bg.x;
}
init();
2-2: 캐릭터 움직임에 따른 배경 스크롤.
키보드 좌우 키를 누를 때마다 캐릭터가 움직이고 캐릭터의 움직임에 따라 근경, 중경,
원경인 배경 3개가 각각 다른 속도로 좌우로 이동.
소스(스테이지상에 미리 'backM', 'back2M', 'back3M'이란
이름의 각각 넓이가 다른 배경 무비클립 3개와 남자 무비클립 'manMo'를 놓아두었다):
var man:MovieClip=manMo; //플레이어
var bg:MovieClip=backM; //근경
var bg2:MovieClip=back2M; //중경
var bg3:MovieClip=back3M; //원경
var camera:Sprite=new Sprite(); //카메라
var cVel:int = 10; //1회 이동 거리
var left=false,right=false;
var rightEnd = stage.stageWidth;
var downEnd = stage.stageHeight;
function init(){
//man.fx: 필드상 플레이어 위치, man.x: 화면상 플레이어 위치man.fx = man.x; //플레이어 초기위치camera.x = rightEnd/2; //카메라 초기위치bg.x = rightEnd/2 - camera.x; //배경들 초기위치bg2.x = rightEnd/2 - camera.x;bg3.x = rightEnd/2 - camera.x;
stage.addEventListener(Event.ENTER_FRAME,loop);
stage.addEventListener(KeyboardEvent.KEY_DOWN,keyOn);
stage.addEventListener(KeyboardEvent.KEY_UP,keyUps);
}
function keyOn(e:KeyboardEvent){
switch(e.keyCode){
case 37: left=true; break;//왼쪽 화살표
case 39: right=true; break;//오른쪽 화살표
default: break;
}
}
function keyUps(e:KeyboardEvent){
switch(e.keyCode){
case 37: left=false; break;//왼쪽 화살표
case 39: right=false; break;//오른쪽 화살표
default: break;
}
}
function loop(e:Event){
if(left){
man.fx -= cVel; man.nextFrame();//남자 걷는 애니 작동if(man.fx < 0) man.fx = 0; //화면 밖으로 나갈시 처리
}
if(right){
man.fx += cVel; man.nextFrame();if(man.fx > bg.width) man.fx = bg.width;
}
camera.x = man.fx; //카메라는 일단 캐릭터 필드상 위치로//카메라가 화면 벗어나지 못하게 처리if(camera.x < rightEnd/2) camera.x = rightEnd/2;if(camera.x > bg.width-rightEnd/2) camera.x = bg.width-rightEnd/2;
//캐릭터의 화면상 위치 정하기man.x = man.fx - camera.x + rightEnd/2;bg.x = rightEnd/2 - camera.x; //배경들 위치 정하기bg2.x = (bg2.width-rightEnd)/(bg.width-rightEnd) * bg.x;bg3.x = (bg3.width-rightEnd)/(bg.width-rightEnd) * bg.x;
}
init();
2-2a: 캐릭터가 가장자리 접근시 배경 스크롤
키보드 좌우 키를 누를 때마다 캐릭터가 움직이고 캐릭터의 움직임에 따라 근경, 중경,
원경인 배경 3개가 각각 다른 속도로 좌우로 이동까지는 동일.
다른 점은 캐릭터가 중심에서 정해진 거리까지 가장자리로 이동해야 배경이 스크롤 되기 시작한다는 점.(스크린 상의
하늘색 수직선 2개가 좌우 가장자리 경계점)
코드에서도 달라진 점은 거의 없다.
소스(스테이지상에 미리 'backM', 'back2M', 'back3M'이란
이름의 각각 넓이가 다른 배경 무비클립 3개와 남자 무비클립 'manMo'를 놓아두었다):
var man:MovieClip=manMo; //플레이어
var bg:MovieClip=backM; //근경
var bg2:MovieClip=back2M; //중경
var bg3:MovieClip=back3M; //원경
var camera:Sprite=new Sprite(); //카메라
var cVel:int = 10; //1회 이동 거리
var scrollDif=100; //화면중앙에서 스크롤 시작점까지 폭
var up=false,down=false,left=false,right=false;
var rightEnd = stage.stageWidth;
var downEnd = stage.stageHeight;
function init(){
//man.fx: 필드상 플레이어 위치, man.x: 화면상 플레이어 위치
man.fx = man.x; //플레이어 초기위치
camera.x = rightEnd/2; //카메라 초기위치
bg.x = rightEnd/2 - camera.x; //배경들 초기위치
bg2.x = rightEnd/2 - camera.x;
bg3.x = rightEnd/2 - camera.x;
stage.addEventListener(Event.ENTER_FRAME,loop);
stage.addEventListener(KeyboardEvent.KEY_DOWN,keyOn);
stage.addEventListener(KeyboardEvent.KEY_UP,keyUps);
}
function keyOn(e:KeyboardEvent){
switch(e.keyCode){
case 37: left=true; break;//왼쪽 화살표
case 39: right=true; break;//오른쪽 화살표
default: break;
}
}
function keyUps(e:KeyboardEvent){
switch(e.keyCode){
case 37: left=false; break;//왼쪽 화살표
case 39: right=false; break;//오른쪽 화살표
default: break;
}
}
function loop(e:Event){
if(left){
man.fx -= cVel;
man.nextFrame();
if(man.fx < 0) man.fx = 0;
}else if(right){
man.fx += cVel;
man.nextFrame();
if(man.fx > bg.width) man.fx = bg.width;
//키에서 손을 떼도 남자의 걷는 애니 계속되는 것 방지용}else{ man.stop();}if(camera.x < man.fx - scrollDif){ camera.x = man.fx - scrollDif;}if(camera.x > man.fx + scrollDif){ camera.x = man.fx + scrollDif;}
//카메라가 화면 벗어나지 못하게 처리
if(camera.x < rightEnd/2) camera.x = rightEnd/2;
if(camera.x > bg.width-rightEnd/2) camera.x = bg.width-rightEnd/2;
//캐릭터의 화면상 위치 정하기
//마지막 -man.width/2는 무비클립속 그림이 중앙에 위치하면
//제거되어야 한다.
man.x = man.fx - camera.x + rightEnd/2 - man.width/2;
bg.x = rightEnd/2 - camera.x; //배경들 위치 정하기
bg2.x = (bg2.width-rightEnd)/(bg.width-rightEnd) * bg.x;
bg3.x = (bg3.width-rightEnd)/(bg.width-rightEnd) * bg.x;
}
init();