우선 프로젝트를 생성시킵니다.
위에서 언급한 3가지 요소를 생성합니다. 총알을 발사시키는 부분은 프레임 액션으로 두기로 하고 나머지 두 가지 요소인 대마왕과 총알을 클래스로 만들어 보겠습니다.

그림 2. 프로젝트 구성요소
게임을 해본 사람이라면 누구나 마지막 보스를 기억할 것입니다. 화면을 가득 채우는 덩치와 불규칙한 움직임 그리고 마구 퍼붓는 총알들의 공격들.. 바로 이 장면을 간단히 만들어 보도록 하겠습니다.
대략 이 정도로 생각을 갖고 하나씩 만들어 보도록 하겠습니다. 먼저 AS v2.0으로 제작해보겠습니다.

그림 3. 저작 화면
////////////////////////////////////////////////////////////////////////////////
// 총알 데이터
////////////////////////////////////////////////////////////////////////////////
bulletData = new Array();
bulletData.push({x:20, y:0, xmov:1.5, ymov:4});
bulletData.push({x:-20, y:0, xmov:-1.5, ymov:4});
bulletData.push({x:30, y:0, xmov:2, ymov:3.5});
bulletData.push({x:-30, y:0, xmov:-2, ymov:3.5});
bulletData.push({x:10, y:0, xmov:0, ymov:4.5});
bulletData.push({x:-10, y:0, xmov:0, ymov:4.5});
// 총알속도 전체 상승
speedRat = 2;
// 총알 영역 무비클립 생성
this.createEmptyMovieClip("bulletArea", 1000);
////////////////////////////////////////////////////////////////////////////////
// 총알 발사
////////////////////////////////////////////////////////////////////////////////
function shot() {
for (var prop in bulletData) {
var depth = bulletArea.getNextHighestDepth();
var m = bulletArea.attachMovie("Bullet", "bullet"+depth, depth);
m._x = devil._x+bulletData[prop].x;
m._y = devil._y+bulletData[prop].y+30;
m.setMove(bulletData[prop].xmov*speedRat, bulletData[prop].ymov*speedRat);
}
}
// 1.5초마다 발사
setInterval(shot, 1500);
프레임 액션에는 6개의 총알에 대한 위치와 방향을 배열로 선언하고, setInterval에 등록된 shot() 함수를 통해 1.5초마다 bulletArea 라는 무비클립을 만들어 6개의 총알을 생성시킵니다.
대마왕(Devil)은 스테이지위에 존재하지만 총알(Bullet)은 존재하지 않습니다. 때문에 attachMovie 메서드로 생성시켜야 합니다. 반환된 객체를 지역변수 m으로 받아 위치를 초기화 하고 위치를 초기화하는 setMove 메서드를 실행합니다. setMove가 실행되면 총알은 각자 정해진 방향으로 움직이고 Stage 를 벗어나면 스스로 removeMovieClip 메서드로 사라집니다. 자세한 부분은 Bullet 클래스에서 보겠습니다.
////////////////////////////////////////////////////////////////////////////////
// Devil 클래스
////////////////////////////////////////////////////////////////////////////////
class Devil extends MovieClip {
var endPosX:Number;
var endPosY:Number;
// 생성자 함수
function Devil() {
init();
move();
}
// 움직임 처리
function move() {
this.onEnterFrame = function() {
var xdis = endPosX-this._x;
var ydis = endPosY-this._y;
var dis = Math.sqrt(xdis*xdis+ydis*ydis);
var xmov = xdis*0.05;
var ymov = ydis*0.05;
this._x += xmov;
this._y += ymov;
if (dis<5) {
init();
}
};
}
// 위치 지정
function init() {
endPosX = random(160)+40;
endPosY = random(100)+40;
}
}
그림 4. Devil 무비클립 클래스 지정 화면
대마왕(Devil) 클래스를 만들어 보았습니다. 사실 너무 간단해서 클래스로 만들지 않아도 됩니다. 무비클립을 만들고 그 내부에 onEnterFrame()을 두어 처리하는 것이 간단할 것입니다.
////////////////////////////////////////////////////////////////////////////////
// Bullet 클래스
////////////////////////////////////////////////////////////////////////////////
class Bullet extends MovieClip
{
var xmov:Number;
var ymov:Number;
// 생성자 함수
function Bullet ()
{
}
// 움직임 처리
function setMove (x:Number, y:Number)
{
xmov = x;
ymov = y;
this.onEnterFrame = function ()
{
_x += xmov;
_y += ymov;
// 화면에서 벗어날 경우 제거함
if(_x<0 || _x>Stage.width || _y<0 || _y>Stage.height)
{
this.removeMovieClip();
}
};
}
}
그림 5. Bullet 무비클립 클래스 지정화면

그림 6. AS v2.0로 만든 결과 보기