Godot 3.2.4
接着上个文章 (【GDScript】设计物品的属性) 开始做
我们开始给物品添加拖拽功能,在 Goods 节点的脚本里开始添加如下代码
var drag_source # 用于记录上一个拖拽的节点(物品放下后给这个节点交换数据)
#------------------------------
# 节点带有的方法
#------------------------------
func get_drag_data(position: Vector2):
var drag_node = self.duplicate() # 复制一份当前的节点,用于拖拽显示
drag_node.use_top_left = true # 使图片居中,看起来自然
drag_node.drag_source = self
set_drag_preview(drag_node) # 设置鼠标拖拽的节点
return drag_node
func can_drop_data(position: Vector2, data) -> bool:
# 判断能否放在这个节点上
return data && data.get("goods_property") # 有 goods_property 属性才能放下
func drop_data(position: Vector2, data) -> void:
# 接收放下的节点数据
swap_goods(self, data.drag_source)
#------------------------------
# 自定义方法
#------------------------------
## 交换两个物品
## (其实两个物品的属性都做成了资源,剩下节点都一样
## 这样我们只用交换一下资源属性就等于物品给替换了)
func swap_goods(a, b):
var p_temp = a.goods_property
a.goods_property = b.goods_property
b.goods_property = p_temp
我给忘了,上个教程让勾选了,这次给 Goods 节点的 use_top_left
取消勾选了
再清除 goods_property
属性内容,点击左边的小圆圈箭头
勾选 TextureRect 节点的 Expand
属性
我们再新建一个场景做物品栏,添加如下节点
给 GridContainer 节点的 columns
属性设为 5
选中 GridContainer 节点,点击场景上边的链接图标
然后搜索 Goods
节点,并添加:
开始再设计两个物品,双击选中上次做的 Weapon_02.tres
文件
属性面板中如下操作,学习 AtlasTexture
资源的使用
点击编辑器底部的 TextureRegion
做完如下:
你现在可以按照以上步骤做 Weapon_03.tres
文件的属性,我做的这样的
做完,我们逐个将做好的物品资源文件拖拽放到我们的场景中的 Goods 节点的 goods_property 属性上。
接下来见证奇迹的时刻,按 F6 运行游戏:
(完)