2012-05-17 69 views
0

我用ImageLayer使用了Pointer.Listener和Mouse.Listener,它工作。但是,當我將Pointer.Listener用於GroupLayer時,它不會監聽點擊或觸摸。我怎樣才能做到這一點?如何將偵聽器添加到playn中的GroupLayer?

我正在使用以下代碼。

myGroupLayer.addListener(new Pointer.Listener() { 
    @Override 
    public void onPointerEnd(Event event) { 
    System.out.println("click registered"); 
    myMethodToRun(); 
    } 
    @Override 
    public void onPointerDrag(Event event) { } 
    @Override 
    public void onPointerStart(Event event) { } 
}); 
+0

如果您無法將偵聽程序附加到GroupLayer,則另一種方法是在指針上設置偵聽程序,然後在指針事件位置和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'不適用於我,我添加了一個日誌,並且在我指向我的鼠標光標的地方保存了logline'hitlayer = null'(我也是調試'Point p'並顯示正確的座標)。 –

+1

好吧,我只是做了一些調試,看到兒童圖層應設置爲交互式.. –

相關問題