Starling에서는 MouseEvent가 아닌 TouchEvent를 사용합니다.


기존의 MouseEvent가 아니기 때문에 처음에 활용하기 낯설었지만 사용하다보니까


모바일에 최적화되어 있는 방식이라서 큰 어려움은 없었습니다.




하지만 한 가지 단점이


UI는 Stage에서 작업으로 하고 (기존의 Display List 영역)


Game은 Stage3D에서 구현하다 보니 발생하는 문제가 있더군요.


Display List에서 UI를 띄워서 클릭을 하는데


뒤에 있는 Stage3D 영역에서도 클릭이 발생을 하더군요.


그냥 단순하게 잡을 수 있을 줄 알았는데


의외로 쉽지 않았습니다.


그 이유는 다음과 같습니다.


 - 마냥 Display List 에서 stage에 마우스 이벤트 걸어놓고 stopPropogation() 해버리면 UI 에서 사용하는 마우스 이벤트들도 영향을 받는다.

 - TouchProcessor 클래스를 수정하기에는 리스크가 너무 크다.


그래서 수작업으로 다음과 같이 처리했습니다.


UI를 총괄하는 클래스가 있습니다.


보통은 Document Class가 되겠죠.


여기서 mouseDown과 mouseUp 두 이벤트를 처리해줍니다.


public function Game()
{
     addEventListener( MouseEvent.MOUSE_DOWN, downListener );
}

private function downListener( $e: MouseEvent ): void
{
     Starling.touchable = false;
     
     stage.addEventListener( MouseEvent.MOUSE_UP, upListener );
}

private function upListener( $e: MouseEvent ): void
{
     Starling.touchable = true;
     
     stage.removeEventListener( MouseEvent.MOUSE_UP, upListener );
}


즉, 마우스를 눌렀다 떼는 동안에는 Starling영역에서는 반응하지 않도록 하게 했습니다.


Starling에는 touchable 이라는 속성이 없습니다.


추가해줍시다. (open source의 장점 아니겠습니까? ㅋ)


public class Starling extends EventDispatcher
{
    /** The version of the Starling framework. */
    public static const VERSION:String = "1.2";
         
     static public var touchable: Boolean = true;
....


그리고 아래 onTouch 라는 메소드에 코드를 추가해줍니다.


private function onTouch(event:Event):void
{
    if (!mStarted) return;
     
     if( touchable == false )
          return;
    
    .....
}


이렇게 수정하면


UI 부분에서 발생하는 클릭 이벤트에는 Starling에서 반응하지 않습니다.


또 이 방식의 장점은


mouseEnabled나 mouseChildren의 속성 또한 구분하여 동작한다는 겁니다.


여러가지 방법을 시도했지만 이 방법이 가장 만족스러운 결과를 보여주네요^^




For the better.




Source Sans Pro 라는 폰트를 개발용 폰트로 어도비가 내놨습니다.


다운로드http://sourceforge.net/projects/sourcesans.adobe/files/SourceSansPro_FontsOnly-1.036.zip/download


아래는 적용된 코딩창입니다.






맥에서는 폰트가 워낙 최악이라 바꿔서 쓰는데


윈도에서는 맑은 고딕이 저에겐 진리네요 -_-)b


"애플은 맑은 고딕 폰트를 쓸 수 있게 폰트 하드웨어 렌더링을 지원하라~ 지원하라~"

Starling은 Stage 3D 기반의 2D 엔진입니다.


요즘 Flash가 다시 각광을 받고 있는데


(Flare3D로 만들어진 Farmville 2, Starling으로 개발된 AngryBirds)


사실 시작하기가 쉽지 않은게 현실입니다.


Starling으로 멋진 게임을 만들 수 있다고 모든 Flash 개발자가 그렇게 될 수 있는건 아닙니다.




1. Starling은 렌더링 도구일 뿐입니다.


가장 중요한 말입니다.


Starling이나 Away3D가 나왔다고해서 멋진 게임이 하늘에서 뚝 떨어지는게 아닙니다.


게임 로직도, 서버 통신도, 복잡한 연산도 대신해주지 않습니다.


그저 렌더링 도구일 뿐입니다.


실제로 게임을 구현하는 수많은 기술과 경험이 있어야 Starling이 도움이 되는 것이지


Starling이 게임을 대신 만들어주는 것은 아닙니다.


우선 Game 개발 경험을 쌓는 것이 우선입니다.


요즘 애니팡이 대세던데 애니팡 게임을 한번 모작해보는 것 부터 시작하면 좋을듯 싶네요.




2. CPU/GPU, Texture, Vertex, Rendering, Pooling, Atlas


Starling은 좋은 렌더링 툴입니다.


그러나 만능은 아닙니다.


기존의 플래시 만들던 방식대로 Sprite 막 발라대면서 만들면


100% 실패합니다.


(저는 0.1 FPS 도 봤더랬죠. 10초에 렌더링 한번? ㅋ)


Starling은 GPU를 효율적으로 다루기 위한 툴입니다


때문에 많은 제반지식이 필요한데


저도 아직 한참 공부할게 많아서 걱정입니다.


텍스쳐가 뭔지, 어디에 쓰이는건지


Draw Call은 뭐고 줄이려면 어떻게 해야되는지


Vertex는 뭐고 Quad는 뭐고 BitmapData가 어떻게 Texture로 되는지


객체를 재사용하는건 알겠는데 Texture를 재사용하려면 어떻게 해야되는지


Atlas가 먼지 등등


알아야할게 많습니다.


이 모든것들은 Starling이랑은 별개입니다.


말 그대로 "지식"인거죠. 


공부합시다!!




3. 모바일은 모바일이다.


2, 3년전부터 유행하던 말이 있죠.


One-source, Multi-use


기억해두십시오. 개발자가 편한만큼 사용자는 불편해집니다.


개발자가 편하기 위해서 같은 코드가 웹, iOS, Android 모두 훌륭하게 돌아갈거라 생각하면 오산입니다.


웹과 Android와 iOS 개발 환경이 모두 다릅니다.


코드도 분기되야되는 부분이 매우 많습니다.


플랫폼에 맞게 커스터마이징되야되는 부분과 영향받지 않고 동작할 게임 부분을 잘 분리시켜두는것이 좋습니다.


컴파일 환경은 말할것도 없구요.


특히 iOS의 경우에는 swf를 로드해서 쓸 수 없기 때문에


해결책 없이 폰트나 UI등 로드해서 사용하는 게임들은 아예 돌아가지도 않게됩니다.


반드시 Native 개발을 먼저 공부하세요!




4. Game 개발은 어렵다.


모든 최신 기술은 게임에서 먼저 사용된다는 말이 있죠.


요즘 유행하는 Big Data도 와우를 필두로 게임쪽에서 먼저 사용됐었죠 (이부분은 사견입니다.)


엄청난 양의 유저 데이터를 수집, 기록하고 유저가 원하는 정보를 추리고 비교하면서 전달시켜줍니다.


보안은 말할 것도 없거니와


최신 하드웨어도 항상 게임이 그 선봉에 있었습니다.


Kakao Talk 도 애니팡, 아이러브커피를 필두로 플랫폼이 폭발을 했죠.


그렇기 때문에 제대로된 게임을 개발하려면


많은 기본 지식과 최신 기술, 트렌드를 알고 있어야합니다.


페이스북도 모르면서 소셜 게임을 개발할 수는 없습니다.


터치하면 날라가는 미사일도


저절로 날아가는게 아닙니다.


직접 구현해봐야하고 최신 기술도 적용해봐야합니다.




마지막으로 저 자신에게도 뼈아픈 말이 될 수 있는데


현재 실력있는 플래시 개발자들의 대부분은 디자이너 출신입니다.


그 나머지 반도 전산이나 개발이 전공인 사람들은 많지 않습니다.


그렇기 때문에 기본적이로 Flash 관련자들의 프로그래밍에 대한 깊이는 많이 부족합니다.


저도 개발하고 6년이 지나서야 디자인 패턴이 뭔지 알게 되었고


HTTP가 80포트라는 걸 알게되었습니다.


Enumerate를 안지도 몇년 안됐고


포인터도 알게 된지 몇년 안됐습니다.


가르쳐주는 사람도 없었거니와 알고 있는 사람 자체가 별로 없었습니다.


Flash 개발자들이 C나 Java개발자들에게 무시 당해온게 하루 이틀이 아니죠


하지만 100% 억울하다고 할 건 아니라고 봅니다.


그들이 프로그래밍에 대한 기초지식은 확실히 많이 알고 있고


그 기초지식들은 무시할 수 없습니다.


공부합시다.


자료구조도 공부하고 모르는게 있으면 스마트폰으로 게임하지말고 검색해봅시다.


모르는 단어 나오면 찾아보고


모르는 기술이 있으면 구글링해서 찾아보고


pdf가 검색되더라도 사진만이라도 훑어봅시다.


스스로 더 나은 개발자가 되는게 진리입니다.




for the Better.

+ Recent posts