【讨论】关于优化--如何返回被点击的“本身”?
godot吧
全部回复
仅看楼主
level 11
冰蓝圣雪 楼主
这一贴也是求助,也是讨论。
我想获取多个按钮中被点击的那一个------这个已实现,现在我在思考怎么更优化这个实现。
2021年01月27日 03点01分 1
level 11
冰蓝圣雪 楼主
我知道给节点建一个gdscript,那么在 gdscript 中写下 self 就等于获取了“节点本身”。
现在看假设下面这样的节点关系:
Main
----|__node0
-----------|__Label0
-----------|__OtherButton
-----------|__Button00
-----------|__Button01
-----------|__Button02
-----------|__Button03
----|__node1
-----------|__Label1
-----------|__OtherButton
-----------|__Button10
-----------|__Button11
-----------|__Button12
-----------|__Button13
-----------|__Button14
2021年01月27日 04点01分 2
level 11
冰蓝圣雪 楼主
还有更多带Button子节点的节点,就不一一列出。
我希望按下名字中带 Button 前缀按钮中的一个,就能返回它的路径,让其它方法来调用这个被按下的对象。
目前是用的把这些按钮设为同一个 ButtonGroup 的方案,每次调用时就 get_pressed_button() 一下。
这里有个我不了解的机制:Godot 在 get_pressed_button() 时,是去遍历这个 ButtonGroup、看看哪个被按下了? 还是按钮被按下时,就保存下指向它的指针,不需要遍历啦?
2021年01月27日 04点01分 3
level 11
冰蓝圣雪 楼主
假设有非常多的同类对象,我不想每一个都配一个 gdscript 来调用 self(这个方案弃用)
又:每次 get_pressed_button() 时都去遍历一个超多对象的 ButtonGroup 感觉需要优化
我想 Godot 在接收到点击了哪个对象时,内部应该就是知道这个对象在节点树的位置,有没有办法不用 设置ButtonGroup 的方案、也不一个按钮一个按钮地去写 gdscript(也包括写一个按钮然后克隆出多个按钮)这种方案,
【还有没有类似使用 self 这样更简捷的方式就获取到被点击的对象呢?】
2021年01月27日 04点01分 4
level 7
给不同的按钮的信号相同的响应方法,并传入节点路径作为参数如何
2021年01月27日 08点01分 5
谢谢你提供的思路!我的问题中心就在这个“传入节点路径”上,想着怎样优化。
2021年01月27日 11点01分
level 11
f
你可以用信号来解决这个问题
前吧里有人做答题游戏,要求也是响应多个按钮事件,把所有node节点添加到同一个节点下,把其中遍历部分改为
for i in get_children():
for j in i.get_children():
j.connect("button_down",self,函数,[i,j])
这样就可以把所有按钮绑定到指定函数上,并在调用函数时传入两个参数,i是对应的node节点,j是按钮自身
2021年01月27日 11点01分 6
这个方案还是不能避免要去遍历多个对象! 不过这个信号的写法要向你学习!学习!
2021年01月27日 12点01分
吧务
level 14
[啊]我个人觉得这个方面好像没有优化的空间。而且如果只是点击一个按钮,感觉性能消耗并不会产生太大的影响(因为点一次按钮,假设掉帧0.1秒,玩家也感觉不出来。除非这是什么敏捷类游戏,让玩家快速的不停切换按钮,才会感觉到明显的卡顿)
因为如果要在多个对象中找到其中一个对象,必然要经历一次遍历。“零遍历”是做不到的,就算要通过信号来触发,也得像6楼说的一样先遍历一次来连接信号
我觉得如果要优化的话,只能从换个思路上去优化,那就是:场景中不应该存在那么多对象[滑稽]因为大量的对象本身就是反优化的
2021年01月27日 16点01分 7
[滑稽]
2021年01月27日 16点01分
1