Archive for the ‘MouseKeyboard’ Category.

마우스, 키보드의 인터렉션 최적화 2/2

저번에 이어서 키보드도 다뤄보겠습니다.

키보드

키보드 이벤트는 이해하기 어려운 이벤트입니다. 왜냐면 키보드 자체가 어렵습니다. 일단 쉬운 사실부터 짚어보죠.

  1. 키보드 이벤트도 AVM2가 받아서 InteractiveObject 에게 dispatch합니다.
  2. 마우스와는 달리 keyboardEnabled 이 없습니다.

위의 사실로부터 마우스와 다른 방법으로 이벤트가 전파된다는 사실을 알 수 있습니다. 실험을 통해 확인한 구조는 다음과 같습니다.

  1. AVM2는 일단 모든 키보드이벤트를 stage에게 dispatch합니다.
  2. stage는 focus속성에 지정된 객체에게 키보드이벤트를 다시 dispatch합니다.

즉 swf전체에서 언제나 키보드 이벤트를 수신하는 객체는 두 개 밖에 없다는 것입니다. stage는 언제나 받고 focus에 객체가 지정되면 그 녀석도 받죠. 따라서 키보드를 통제하는데 있어 기본은 stage의 키보드 이벤트를 컨트롤하는 것이고 두 번째는 포커스를 받고 있는 객체의 키보드 이벤트를 컨트롤하는 것입니다.

Continue reading ‘마우스, 키보드의 인터렉션 최적화 2/2’ »

마우스, 키보드의 인터렉션 최적화 1/2

얼마 전 용호님이 뭔가 물어보셨습니다. 그 때 깨달았던 점이 OS수준의 이벤트를 수신할 수 없는 플래시에서는 입력관련 최적화도 상당히 중요하고 또한 이에 대한 토론이 별로 되어있지 않다는 점이었습니다.

저야 게임을 많이 만들다 보니 플래시 내에서 키보드, 마우스에 대한 최적화를 항상 고민하는 편입니다. 그에 관해 간략히 몇 가지 포인트만 살펴보고 나중에 입출력 클래스를 공개하도록 하죠.

마우스

마우스 이벤트에 대해서는 아주 깊이 이해할 필요가 있습니다(사실 플레이어가 일으키는 이벤트는 개별적으로 다 깊이 이해할 필요가 있습니다)

  1. 마우스의 액션은 플래시플레이어가 수신하여 swf 바이트코드에게 직접 dispatch해준다.
  2. 이 때 dispatch할 대상에 대한 자동적이 조건이 있다.
  3. 먼저 interactiveObject 인 녀석들 중
  4. Stage나 그 하위 트리 중 어딘가에 등록되어 있어야 하며,
  5. mouseEnabled 속성이 true여야 한다.

Continue reading ‘마우스, 키보드의 인터렉션 최적화 1/2’ »