首页 > 解决方案 > 在 Piccolo2d 中禁用选定对象的拖动?

问题描述

我知道 Piccolo2d 是一个老项目,但我有几个问题。

1)是否可以禁用拖动选定的对象?对于这个特定的用例,我只想选择一个对象,而不是移动或删除它。我知道我可以使用以下方法禁用删除:

    this.selector.setDeleteKeyActive(false);

但我没有看到禁用拖动的选项。是在事件处理程序中覆盖拖动功能的唯一选择吗?

2) 有没有办法让选择处理程序与平移/缩放处理程序同时处于活动状态?当您想要支持对象拾取时,禁用平移/缩放似乎有点过时。还是我必须创建自己的处理程序?

我目前的代码是:

...
this.pluginContext.getCanvas().setPanEventHandler(null);
this.selector = new PSelectionEventHandler(this.mapLayer.getNode(), this.mapLayer.getNode()) {
};
this.selector.setDeleteKeyActive(false);
this.pluginContext.getCanvas().addInputEventListener(this.selector);

PNotificationCenter.defaultCenter().addListener(this, "nodeSelected",
        PSelectionEventHandler.SELECTION_CHANGED_NOTIFICATION, this.selector);
...


public void nodeSelected(final PNotification notification) {
    logger.debug("Selection - " + this.selector.getSelection().toString());
}

标签: java

解决方案


在真正的开发者传统中,我找到了答案。

我的可挑选节点都分组在单独的分组节点下。这让我可以在分组节点上添加一个事件侦听器,如下所示:

    groupNode.addInputEventListener(new PBasicInputEventHandler() {

        public void mouseReleased(final PInputEvent event) {

            PNode node = event.getPickedNode();
            if (node != null) {
                onNodeSelected(node); // your logic here
            }
        }
    });

这样做的好处在于,该事件包含在该组节点下分组的拾取节点。完美的!此外,您不必禁用平移/缩放处理程序。

唯一的缺点是这不会为您提供节点周围的选择装饰器。赢不了所有人!


推荐阅读