[ Starling Download : http://gamua.com/starling/ ]


Starling은 Full-source 로 제공됩니다.


그렇기 때문에 자신에게 맞춰서 소스를 수정하여 쓸 수 있습니다.


현재 Starling 기반의 IsoMetric 엔진이 제대로된게 없어서


저는 DisplayObject를 고쳐서 Iso Engine으로 사용하고 있습니다.


swc로 감싸져있다면 불가능한 일이겠죠.


확대/축소가 가능한 Iso엔진을 60fps 돌리는 날이 올줄이야 ㅠㅠ


하지만 개발하다보니까


Hit Area로 쓰기가 어렵더군요


반드시 Texture로 만들어서 Image로 붙여야 touch가 가능하기 때문에


터치만 반응하고 실제 렌더링은 되지 않는 객체를 만들어야 했습니다.


그래서 DisplayObject를 살펴보다 보니까 다음과 같은 부분을 찾았습니다.


/** @private */
internal function get hasVisibleArea():Boolean
{
return mAlpha != 0.0 && mVisible && mScaleX != 0.0 && mScaleY != 0.0;
}


아마도 렌더러가 이 객체를 렌더링할지 말지를 결정하는 메소드인거 같네요.


그래서 다음과 같이 property를 하나 더 추가해봤습니다.


public var hitArea: Boolean = false;

/** @private */
internal function get hasVisibleArea():Boolean
{
return mAlpha != 0.0 && mVisible && mScaleX != 0.0 && mScaleY != 0.0 && !hitArea;
}


hitArea라는 속성이 true 면 렌더링에서 제외시켜라 라는거죠.


이렇게하면 렌더링에서 스스로 제외될 수 있게 되었습니다.


게다가 실제 객체는 addChild가 되어 있기 때문에


Touch 이벤트에서는 그대로 영역이 계산되어 터치가 됩니다.


즉 눈에는 안보이는 Hit 전용 객체를 만들 수 있게 된거죠.


실제로 테스트해보면 draw call이 증가하지 않는것을 볼 수 있습니다.


-_-)b 굿~




for the Better.

저작자 표시 비영리 동일 조건 변경 허락
신고

+ Recent posts

티스토리 툴바