java - 在 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());
}
解决方案
在真正的开发者传统中,我找到了答案。
我的可挑选节点都分组在单独的分组节点下。这让我可以在分组节点上添加一个事件侦听器,如下所示:
groupNode.addInputEventListener(new PBasicInputEventHandler() {
public void mouseReleased(final PInputEvent event) {
PNode node = event.getPickedNode();
if (node != null) {
onNodeSelected(node); // your logic here
}
}
});
这样做的好处在于,该事件包含在该组节点下分组的拾取节点。完美的!此外,您不必禁用平移/缩放处理程序。
唯一的缺点是这不会为您提供节点周围的选择装饰器。赢不了所有人!
推荐阅读
- javascript - Graphql的返回查询为空时如何在Nuxtjs中进行重定向
- python - 无法正确实现 wiki 搜索。按查询搜索结果不起作用
- python - Python War纸牌游戏运行正常但无限
- git - 为什么 git pack 协议只协商包文件协商期间要发送的提交?
- linux - 如何在后台运行 Webpack 服务命令?
- javascript - 标识符“i”已被声明为问题
- apache-spark - LoadIncrementalHFiles:分组 HFiles 时发生拆分
- json - 来自带有嵌套键的 Json 字符串的 Spark 数据帧
- xml - XPath 错误试图确定是否有至少一个不为空的子节点(具有字符串值)
- javascript - recoil 无法处理异步选择器的错误