在游戏的“背包系统”中经常会需要物品的拖动,Godot内置了拖动相关函数。
bool _can_drop_data(at_position: Vector2, data: Variant) 是否允许拖动/接收(目标)
void _drop_data(at_position: Vector2, data: Variant) 拖动传递来的数据(目标)
Variant _get_drag_data(at_position: Vector2) 拖动对象数据(源)
看起来只有Control类型下的节点类型有完全的几个函数。而Node2D下只有_get_drag_data函数。
源对象上挂的脚本
extends TextureRect
# at_position 拖动时点击的区域
func _get_drag_data(at_position: Vector2) -> Variant:
# 拖动发送给目标的数据,类型随意
# 例如这里的数组数据1,可以用于表示源的类型.在目标中可以判断是否接受
var data = [self,1]
var prev = TextureRect.new()
prev.texture = texture
set_drag_preview(prev) # 拖动时的样子
return data
目标对象上挂的脚本
extends TextureRect
func _can_drop_data(at_position: Vector2, data: Variant) -> bool:
return data[1]==1
func _drop_data(at_position: Vector2, data: Variant) -> void:
var move_obj = data[0]
move_obj.position = position + Vector2(5,5)
#var obj = data.get_parent()
#obj.remove_child(move_obj)
#obj.add_child(move_obj)