슈팅게임 만들기
주요 기능
e.currentTarget
hitTestObject
addChild
import flash.display.MovieClip;
import flash.events.KeyboardEvent;
import flash.events.Event;
import flash.text.engine.EastAsianJustifier;
import flash.text.TextField;
var hero: MovieClip = hero_mc;
var bullet:MovieClip = bullet_mc; //총알선언
var rightPressed :Boolean = false;
var leftPressed :Boolean =false;
var spacePressed :Boolean = false;
var bDamage:Number = 50;
var mHp:Number = 500;
var bulletReady:Boolean = true; //총알발사 가능 상태 파악
var life:int = 5; //생명 5새
var score: int = 0; // 점수
//텍스트 생명표시
var txtLife : TextField = life_txt;
var txtScore : TextField = score_txt;
var txtMission:TextField = mission_txt;
txtLife.text= String(life);
txtScore.text = String(score);
var point1:MovieClip = hero_mc.point1_mc;
var point2:MovieClip = hero_mc.point2_mc;
var frameCount =0;
txtMission.addEventListener(Event.ENTER_FRAME, ontxtEvent);
function ontxtEvent(e:Event ) :void
{
frameCount = frameCount + 1;
if( frameCount >= 50 && frameCount <=100)
{
txtMission.text = String("Mission start");
}else{
txtMission.text ="" ;
}
if( life == 0 )
{
txtMission.textColor = 0xff0000;
txtMission.text = String(" Game Over " );
}
}
stage.addEventListener(KeyboardEvent.KEY_DOWN, onKDown);
stage.addEventListener(KeyboardEvent.KEY_UP, onKUp);
function onKDown( e: KeyboardEvent ) :void
{
if(e.keyCode == Keyboard.RIGHT) rightPressed = true;
if(e.keyCode == Keyboard.LEFT) leftPressed = true;
if(e.keyCode == Keyboard.SPACE) spacePressed = true;
}
function onKUp ( e: KeyboardEvent ) :void
{
if(e.keyCode == Keyboard.RIGHT) rightPressed = false;
if(e.keyCode == Keyboard.LEFT) leftPressed = false;
if(e.keyCode == Keyboard.SPACE) spacePressed = false;
}
//영웅이 매 프레임마다 변수에 따라 이동하기
hero.addEventListener(Event.ENTER_FRAME, onHeroEnter );
function onHeroEnter ( e: Event ): void
{
if(rightPressed == true )
{
hero.x = hero.x + 10;
}
//화면 밖으로 못나가게 하기 오른쪽
if(hero.x > stage.stageWidth - hero.width/2) hero.x = stage.stageWidth - hero.width/2;
if(leftPressed == true )
{
hero.x = hero.x - 10
}
//화면 밖으로 못나가게 하기 왼쪽
if(hero.x < hero.width/2 ) hero.x = hero.width/2;
}
/////////////////////////
//적 생성하기
////////////////////////
this.addEventListener(Event.ENTER_FRAME, onEnter);
function onEnter (e:Event ) : void
{
if(Math.random()<0.05)
{
generateEnemy();
}
currentBoss ++;
if(Math.random()<0.1 && currentBoss > bossInterval)
{
currentBoss = 0;
generateMiddleBoss();
mHp = 500;
}
}
var bossInterval: int = 200; //200프레임 이후에 등장
var currentBoss: int = 0;
function onEnemyEnter ( e: Event ) : void
{
// 1. 아래로 떨어지기
var enemy:Enemy= e.currentTarget as Enemy;
enemy.y = enemy.y + 10;
// 2. 총알과 충돌검사
if(enemy.hitTestObject(bullet)==true)
{
score= score + 10;
txtScore.text= String(score);
this.removeChild(enemy);
enemy.removeEventListener(Event.ENTER_FRAME, onEnemyEnter);
bulletReady = true;
bullet.x = 10000;
}
// 3. 주인공과 충돌검사하기!!
if( enemy.hitTestObject(hero))
{
if(this.contains(enemy)==true)
{
this.removeChild(enemy);
enemy.removeEventListener(Event.ENTER_FRAME, onEnemyEnter);
}
life = life -1;
txtLife.text = String(life);
if(life==0)
{
}
}
// 3. enemy가 메모리를 먹고 있으므로
// 화면밖으로 사라진 enemy죽이기
if(enemy.y>450)
{
this.removeChild(enemy);
enemy.removeEventListener(Event.ENTER_FRAME, onEnemyEnter);
}
}
function generateEnemy () :void
{
//enemy 생성 및 화면에 붙이기
var enemy: Enemy = new Enemy();
addChild(enemy);
enemy.x = 550 * Math.random();
enemy.y = -100;
//각 enemy들이 매 프레임마다 할일 정하기
enemy.addEventListener(Event.ENTER_FRAME, onEnemyEnter);
}
function generateMiddleBoss(): void
{
var m:MiddleBoss = new MiddleBoss();
addChild(m);
m.x = 600;
m.y = 50;
m.addEventListener(Event.ENTER_FRAME, onMiddleEnter);
}
function onMiddleEnter ( e:Event ) :void
{
// 1. 아래로내려오기
var m:MiddleBoss = e.currentTarget as MiddleBoss;
m.x = m.x -3;
// 2. 총알과 충돌검사
if(m.hitTestObject(bullet)==true)
{
score = score +10;
txtScore.text = String(score);
mHp = mHp - bDamage;
bulletReady = true;
bullet.y = 10000;
m.play();
if(mHp <= 0 )
{
score = score + 50;
txtScore.text = String(score);
this.removeChild(m);
m.removeEventListener( Event.ENTER_FRAME, onMiddleEnter);
m.gotoAndPlay(10);
}
}
if(m.x < -200)
{
m.removeEventListener( Event.ENTER_FRAME,onMiddleEnter);
this.removeChild(m);
}
}
/////////////////////총알코드
bullet.addEventListener(Event.ENTER_FRAME, onBulletEnter);
function onBulletEnter( e: Event ) : void
{
if( bulletReady == true && spacePressed == true )
{
bullet.x = hero.x;
bullet.y = hero.y;
bulletReady = false;
sound_mc.play();
}
//bulletReady 가 false인 경우 위로 올라가기
if(bulletReady ==false)
{
bullet.y = bullet.y -30;
}
if( bullet.y < - 50)
{
bulletReady = true;
}
}
'코딩공부 > Action Script 3.0' 카테고리의 다른 글
배열과 문자열 (0) | 2015.02.17 |
---|---|
for문과 응용 ( 대괄호 연산자 ) (0) | 2015.02.17 |
addChild 와 e.currentTarget 을이용한 눈내리는 애니메이션 구현 (0) | 2015.02.13 |
Event에 대해서 ( e.currentTarget 관련 예제 ) (0) | 2015.02.13 |
충돌 테스트 hitTestObject, hitTestPoint 예제 (0) | 2015.02.13 |