2.12. 유틸리티(Utilities)

starling.utils 패키지에는 간과해서는 안되는 몇 가지 유용한 작은 도우미가 들어 있습니다.

2.12.1. 컬러(Colors)

기존의 Flash 및 Starling에서 색상은 16진수 형식으로 지정됩니다. 몇 가지 예가 있습니다:


1
2
3
4
5
6
// 형식:         0xRRGGBB
var red:Number   = 0xff0000;
var green:Number = 0x00ff00; // 또는 0xff00
var blue:Number  = 0x0000ff; // 또는 0xff
var white:Number = 0xffffff;
var black:Number = 0x000000; // 또는 simply 0

Color 클래스는 명명된 색상 값 목록을 포함합니다. 또한 이 도구를 사용하여 색상의 구성 요소에 쉽게 액세스 할 수 있습니다:


1
2
3
4
5
6
7
8
9
var purple:uint = Color.PURPLE; (1)
var lime:uint   = Color.LIME;
var yellow:uint = Color.YELLOW;

var color:uint = Color.rgb(64, 128, 192); (2)

var red:int   = Color.getRed(color);   // ->  64 (3)
var green:int = Color.getGreen(color); // -> 128
var blue:int  = Color.getBlue(color);  // -> 192

(1) 몇 가지 공통 색상이 미리 정의되어 있습니다.

(2) 이 방법으로 다른 색상을 만들 수 있습니다. 이 방법으로 RGB 값을 전달하면 됩니다 (범위 0 – 255).

(3) 각 채널의 정수 값을 추출할 수도 있습니다.

2.12.2. 각도(Angles)

Starling은 모든 각도를 라디안 단위로 계산합니다 (플래시의 경우 각도가 다른 곳에서는 각도를 사용하고 다른 각도에서는 라디안을 사용함). 각도와 라디안을 변환하려면 다음과 같은 간단한 함수를 사용할 수 있습니다.


1
2
var degrees:Number = rad2deg(Math.PI); // -> 180
var radians:Number = deg2rad(180);     // -> PI

2.12.3. 문자열 유틸(StringUtil)

format 메서드를 사용하여 .Net / C # 형식의 문자열 형식을 지정할 수 있습니다.


1
2
StringUtil.format("{0} plus {1} equals {2}", 4, 3, "seven");
  // -> "4 plus 3 equals seven"

같은 클래스에는 문자열의 시작과 끝에서 공백을 제거하는 메서드가 포함되어 있습니다. 사용자 입력을 처리해야 할 때마다 빈번히 작업합니다.


1
StringUtil.trim("  hello world\n"); // -> "hello world"

2.12.4. 시스템 유틸(SystemUtil)

앱이나 게임이 현재 실행되는 환경에 대한 정보를 찾기에 유용합니다. SystemUtil에는 해당 작업을 돕는 몇 가지 메소드와 속성이 있습니다.


1
2
3
4
SystemUtil.isAIR; // AIR 또는 Flash?
SystemUtil.isDesktop; // desktop 또는 mobile?
SystemUtil.isApplicationActive; // 사용 중이거나 최소화 되었습니까?
SystemUtil.platform; // WIN, MAC, LNX, IOS, AND

2.12.5. 수학 유틸(MathUtil)

이 클래스는 주로 몇 가지 기하학적 문제를 해결하도록 설계되었지만 다음과 같은 매우 유용한 도우미 메서드도 포함되어 있습니다:


1
2
3
var min:Number = MathUtil.min(1, 10); (1)
var max:Number = MathUtil.max(1, 10); (2)
var inside:Number = MathUtil.clamp(-5, 1, 10); (3)

(1) 두 숫자 중 가장 작은 숫자를 구하십시오. 결과: 1

(2) 두 숫자 중 가장 큰 숫자를 구하십시오. 결과: 10

(3) 번호 (첫 번째 인수)를 특정 범위로 이동합니다. 결과: 1

과거에 AS3을 사용해 본 경험이 있다면, 비슷한 수학 클래스가 이미 기본 수학 클래스에서 제공되는데 왜 이러한 메소드를 작성했는지 궁금할 것입니다.

불행히도 예전 메소드에는 부작용이 있습니다: 예를 들어 Math.min을 호출할 때마다 임시 객체를 만들게 됩니다 (적어도 iOS용 앱을 컴파일하면 그렇습니다). 새로운 메소드는 그러한 부작용이 없으므로 항상 선호해야 합니다.

2.12.6. 풀링(Pooling)

이제 임시 객체에 대한 주제를 다루었으므로 Pool 클래스를 소개할 때가 되었습니다.

숙련된 AS3 개발자는 모든 객체 할당이 가격으로 제공된다는 사실을 알고 있습니다. 나중에 객체는 가비지 컬렉터에 의해 수집되어야 합니다. 이것은 완전히 씬(Scenes) 뒤에서 발생합니다. 당신은 이것을 알아 채지 못할 것입니다.

그러나 정리 프로세스가 너무 많은 시간이 걸리면 앱이 잠시 멈춥니다. 이러한 일이 자주 발생하면 사용자는 불편을 겪게됩니다.

이 문제를 피하기 위한 한 가지 방법은 개체를 재활용하고 반복적으로 사용하는 것입니다. 예를 들어 Point 및 Rectangle과 같은 클래스는 잠시 동안만 필요한 경우가 많습니다. 즉 만들고 데이터를 채우고 버립니다.

이제부터 Starling의 Pool 클래스가 이러한 객체를 처리하도록 합니다.


1
2
3
4
5
6
7
var point:Point = Pool.getPoint(); (1)
doSomethingWithPoint(point);
Pool.putPoint(point); (2)

var rect:Rectangle = Pool.getRectangle(); (1)
doSomethingWithRectangle(rect);
Pool.putRectangle(rect); (2)

(1) 풀에서 객체를 가져옵니다. 그것은 클래스에서 new를 호출하는 것을 대체합니다.

(2) 더 이상 필요가 없을 때 Pool에 다시 넣으십시오.

이 클래스는 Vector3D, Matrix 및 Matrix3D도 비슷한 스타일로 지원합니다.

항상 get과 put 호출이 균형을 이루는지 확인하십시오. 수영장에 너무 많은 물체를 집어 넣고 그것들을 꺼내지 않으면 시간이 지남에 따라 너무 많은 메모리를 사용하게 됩니다.

2.12.7. 더 나아가서 …​

starling.utilities 패키지에는 여기에 나열할 수 있는 것보다 더 많은 도우미가 들어 있습니다. 메소드 및 클래스의 전체 목록은 API 레퍼런스를 참조하십시오. 그것은 분명히 대가를 지불할 것입니다!