我已经将Pointer.Listener和Mouse.Listener与ImageLayer一起使用了,并且可以正常工作。但是,当我对GroupLayer使用Pointer.Listener时,它不会监听单击或触摸。我怎样才能做到这一点?

我正在使用以下代码。

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) { }
});

最佳答案

单击鼠标本身不会使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对其所有子项进行命中测试,如果任何子项被命中,它将返回自身作为命中层。然后,将运行在组层上注册的侦听器,就像单击组层本身一样。

关于java - 如何在playn中将监听器添加到GroupLayer?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10632787/

10-10 20:19