메뉴 바로가기 검색 및 카테고리 바로가기 본문 바로가기

한빛출판네트워크

한빛랩스 - 지식에 가능성을 머지하다 / 강의 콘텐츠 무료로 수강하시고 피드백을 남겨주세요. ▶︎

IT/모바일

ActionScript 3.0 : 어려울까요? 안 어려울까요? - (1)

한빛미디어

|

2008-01-09

|

by HANBIT

12,847

제공 : 한빛 네트워크
저자 : Colin Moock
역자 : 박주현
원문 : ActionScript 3.0: Is It Hard or Not?

가끔 몇몇 분들이 ActionScript 3.0에서는 객체지향 프로그래밍을 준수해야 하고, 변수를 사용하기 전에 항상 선언을 해야 하며, 패키지 혹은 클래스에 반드시 집어넣어서 만들어야 한다고 주장합니다. 사실 그 말은 틀렸습니다. ActionScript 3.0 에서는 ActionScript 2.0 나 ActionScript 1.0 에서와 같이 각timeline에 코드를 넣을 수 있습니다. 또한 코드들이 반드시 클래스 안에 붙어있어야 하지 않습니다. strict compilation 모드에서도 별다른 변수형 선언 없이 변수를 사용할 수 있습니다. 이 언어는 필요한대로 복잡한 구조 혹은 간단한 구조 중에서 사용자 입맛에 맞게 적절히 사용할 수 있게 디자인되었습니다. 함수와 변수만 사용하는 간단한 절차형언어형 또한 ActionScript 3.0에서도 각 프레임 단위로 삽입이 가능합니다.

배우기 어려워요!

놀랍게도 대학교수급의 강사 분들이 ActionScript 3.0 은 학생들에게 너무 어려워서 대신 ActionScript 1.0 이나 ActionScript 2.0 을 가르친다고 합니다. 이는 ActionScript 3.0 에서는 자바스타일의 OOP만 가능하고, ActionScript 1.0 에서는 간단한 timeline 스크립팅으로 가능하다고 생각하는 탓인 것 같습니다. 정말로 ActionScript 3.0 는 자바스타일 프로그래밍이 가능합니다만, Flash 4에서 쓰였던 간단한 스크립트들 모두 여전히 사용 가능합니다.

ActionScript 3.0과 ActionScript 1.0중 어느것이 정말로 어려운지를, 개발에 있어서 기본이 되는 몇몇 간단한 코드들을 비교하여 봅시다. 각 예제에서 전자가 ActionScript 1.0 버전의 코드이고, 후자가, ActionScript 3.0의 코드입니다.

ActionScript 1.0에서의 예제입니다. 이 소스는 swf 파일의 로딩을 기다리고, 로딩이 되면 다음프레임으로 넘어가게 합니다.
// 4프레임 코드
if (_framesloaded == _totalframes) {
  gotoAndPlay(6)
}

// 5프레임 코드
gotoAndPlay(4); 
같은 동작을하는 ActionScript 3.0소스입니다.
// 4프레임 코드
if (framesLoaded == totalFrames) {
  gotoAndPlay(6);
}

// 5프레임 코드
gotoAndPlay(4); 
‘_’를 없애고 각 단어의 첫 글자를 대문자로 바꾼 ActionScript 3.0의 “framesLoaded”와 “framesLoaded” 는 확실히 ActionScript 1.0에서의 그것보다 명료해서 배우기도 쉽습니다.

다음으로 프로그램으로 오브젝트를 움직이는 예제를 살펴보겠습니다. 다음의 ActionScript 1.0 코드는 지정한 무비클립을 수평으로 움직입니다. 이 무비클립은 Flash에서 “ball”로 명명하고 1프레임에 놓였다고 가정하겠습니다.
// 1프레임 코드
setInterval(moveBall, 20);

function moveBall () {
  ball._x += 10;
}
아래는 ActionScript 3.0코드입니다
// 1프레임 코드
setInterval(moveBall, 20);

function moveBall () {
  ball.x += 10;
}
마찬가지로 차이점은 ActionScript 1.0의 “_x”에서 언더바를 제거하여 ActionScript 3.0에서는 “x”를 사용한다는 것입니다. ActionScript 3.0에서도 무비클립 인스턴스는 여전히 각각의 인스턴스 이름을 통해 화면에서 움직이게 할 수 있습니다. 여전히 ActionScript 3.0에서 setInterval()함수도 동일하게 쓸 수 있습니다. 하지만 새로 추가된 Timer 클래스를 쓰면 더욱 향상된 재생, 정지 또는 반복기능을 사용할 수 있습니다.

이제 조금 더 복잡한 프로그래밍 모션 예제를 보겠습니다. 우선 ActionScript 1.0에서 살펴 보겠습니다. 이 코드는 무비클립을 원 주위를 한 바퀴 돌아가게 합니다. 역시 그전에 Flash에서 무비클립을 ‘ball’로 이름 짓고 1프레임에 배치 하였습니다.
var rpm = 30;
var radius = 150;
var centerX = 230;
var centerY = 200;
var theta = 0;
var degreesPerSecond = rpm * 360 / 60;
var  now = getTimer();

var intervalID = setInterval(moveClipAroundCircle, 20, ball);

function moveClipAroundCircle (theClip) {
  var then = now;
  now = getTimer();
  var elapsed = now - then;
  var numSeconds = elapsed / 1000;
  var degreeIncrement = degreesPerSecond * numSeconds;
  theta += degreeIncrement;
  theta %= 360;
  var radians = degreesToRadians(theta);
  theClip._x = centerX + Math.cos(radians) * radius;
  theClip._y = centerY - Math.sin(radians) * radius;
}

function degreesToRadians(degrees) {
  return (degrees/180) * Math.PI;
}
아래는 ActionScript 3.0 코드입니다.
// Code on frame 1
var rpm = 30;
var radius = 150;
var centerX = 230;
var centerY = 200;
var theta = 0;
var degreesPerSecond = rpm * 360 / 60;
var  now = getTimer();

var intervalID = setInterval(moveClipAroundCircle, 20, ball);

function moveClipAroundCircle (theClip) {
  var then = now;
  now = getTimer();
  var elapsed = now - then;
  var numSeconds = elapsed / 1000;
  var degreeIncrement = degreesPerSecond * numSeconds;
  theta += degreeIncrement;
  theta %= 360;
  var radians = degreesToRadians(theta);
  theClip.x = centerX + Math.cos(radians) * radius;
  theClip.y = centerY - Math.sin(radians) * radius;
}

function degreesToRadians(degrees) {
  return (degrees/180) * Math.PI;
}
역시 변수명에서 언더바가 빠진 게 두 코드의 차이입니다. 때문에 ActionScript 3.0 코드가 ActionScript 1.0 코드보다 깔끔합니다. 안 어렵습니다.
TAG :
댓글 입력
자료실

최근 본 상품0