2012-05-17 4 views
0

ImageLayer에서 Pointer.Listener 및 Mouse.Listener를 사용했으며 작동했습니다. 그러나 Pointer.Listener를 GroupLayer에 사용하면 클릭 또는 터치를 수신하지 않습니다. 어떻게해야합니까?playn의 GroupLayer에 리스너를 추가하는 방법은 무엇입니까?

다음 코드를 사용하고 있습니다.

+0

Listener를 GroupLayer에 연결할 수없는 경우 포인터 대신 Listener를 설정 한 다음 포인터 이벤트 위치와 GroupLayer 간의 충돌 조건에서 이벤트를 트리거하는 방법도 있습니다. 개념의 예는 다음에서 찾을 수 있습니다 : [PlaynDev.java] (http://code.google.com/p/klenwell/source/browse/trunk/projects/java/playndev/playndev/core/src/main/java /com/googlecode/klenwell/playndev/core/PlaynDev.java#55) – klenwell

답변

5

GroupLayer 자체는 절대로 마우스 클릭으로 "누르지"않습니다. GroupLayer의 자식 중 하나가 적중 될 수 있지만 그룹 계층에 등록 된 청취자는 자식 자체에서만 트리거됩니다.

: 여러 자녀를 포함하는 GroupLayer가 있고 이벤트가 그 아이들 중 하나를 클릭하는 GroupLayer의 청취자에게 발송하려면

, 당신은 GroupLayer에 사용자 정의 히트 테스터를 사용해야합니다

myGroupLayer.setHitTester(new Layer.HitTester() { 
    public Layer hitTest(Layer l, Point p) { 
    Layer hitLayer = myGroupLayer.hitTestDefault(p); 
    return (hitLayer != null) ? myGroupLayer : null; 
    } 
}); 

이렇게하면 GroupLayer가 모든 하위 테스트를 치게되고 해당 하위 노드가 모두 맞으면 그 자체 인을 적중 레이어로 반환합니다. 그런 다음 그룹 레이어에 등록 된 리스너는 그룹 레이어 자체가 클릭 된 것처럼 실행됩니다.

+0

'setHitTester'가 작동하지 않아 로그를 추가했고 마우스 커서를 가리킬 때마다 loggin'hitlayer = null'을 유지했습니다. 'Point p'를 디버그하고 올바른 좌표를 보여줍니다). –

+1

좋아요. 디버깅을 한 후 아이 레이어를 인터랙티브로 설정해야한다는 것을 알았습니다. –

관련 문제