拖放,拖放被他的孩子挡住了,如何避免?

问题描述 投票:0回答:1

会尽力变得更加简洁和清晰。

制作游戏时,虽然我确实使用拖放功能,但我想将其放在“面板”上,然后将其添加到同一面板中的列表中。嗯,它实际上已经起作用了。但不太好。

问题来了,我只能把它扔到那个“小组”没有他的孩子的地方。所以在该面板上的空白处。我希望它出现在整个列表中,无论是否为空。

因此尝试在

children_has_point()
运行时执行
can_drop_data()
进行检查,但似乎问题的全部根源是因为如果可拖动对象位于子对象上方,则
can_drop_data()
不会触发。 因此尝试尝试使用父级的
mouse_filter
进行操作,它似乎也不会影响
can_drop_data()

那么我该怎么做才能修复/使其按照我想要的方式工作?

(顺便说一句,我知道解决方案之一是在整个列表面板的顶部创建一个 Rect2 或类似的东西,让

can_drop_data()
知道它可以放在整个列表上,但这似乎做起来更麻烦,试图看看它们是否不是更好的解决方案?)

我希望这不是太混乱和不清楚的问题,可能不是,但我尽力了。最后一行问题也会被删除。

drag-and-drop parent-child godot gdscript
1个回答
0
投票

顺便说一句,我知道解决方案之一是在整个列表面板的顶部创建一个 Rect2 或类似的东西,让 can_drop_data() 知道它可以放在整个列表上

拥有一个

Control
(例如
Panel
)并不一定会很麻烦,特别是:您不必按需创建它,而是可以始终将其保留在那里,并将其置于顶部或推送它到底部。


我认为问题在于孩子们正在接受鼠标输入。在这种情况下,将

mouse_filter
设置为
MOUSE_FILTER_PASS
(因此,如果它们不处理它传播到父级的输入)或
MOUSE_FILTER_IGNORE
(因此它们不接受任何鼠标输入)就足够了。

但是,如果始终使用该设置会导致其他问题,则必须考虑在运行时更改它们。我建议将运行时需要修改的

Control
添加到节点组中,以使代码更简单。

© www.soinside.com 2019 - 2024. All rights reserved.