> Godot 3.3 rc6

接着上个文章 【Godot】加载文件数据

我们开始给装备栏和物品栏制作保存数据的功能。(文末有文件项目链接)

我们在 FileManager.gd 脚本里添加如下代码,用来保存加载数据

## 文件是否存在
## @path 文件路径
func exists_file(path: String) -> bool:var file = File.new()var exists = file.file_exists(path)file.close()return exists## 保存数据
## @path 文件路径
## @data 数据
func save_data(path: String, data) -> void:var file = File.new()file.open(path, File.WRITE)file.store_var(data) # 写入数据file.close()## 加载数据
## @path 文件路径
## @return 返回数据
func load_data(path: String):var file = File.new()file.open(path, File.READ)var data = file.get_var() # 读取数据file.close()return data

打开 Inventory.tscn 场景,Inventory.gd 脚本的 _ready 方法删除不要了,脚本里再添加 设置物品数据获取物品数据 的方法,代码如下:

#------------------------------
#  Set/Get
#------------------------------
## 设置物品数据列表
func set_goods_data_list(data_list: Array) -> void:for data in data_list:var goods_property = GoodsProperty.new()goods_property.set_property(data)var goods = ScnGoods.instance()goods.set_goods_property(goods_property)grid.add_child(goods)## 返回物品数据列表
func get_goods_data_list() -> Array:var data_list = []for goods in grid.get_children():var goods_property = goods.goods_property   # 物品资源属性# 如果物品的资源属性不为 nullif goods_property:var goods_data = goods_property.get_property() # 属性数据# 添加到 data_list 数组中data_list.push_back(goods_data)return data_list#------------------------------
#  自定义方法
#------------------------------
## 添加一个空物品
func add_empty_goods():var goods = ScnGoods.instance()grid.add_child(goods)

打开 EquipmentPanel.tscn 场景,给 EquipmentPanel.gd 脚本添加如下代码:


#------------------------------
#  Set/Get
#------------------------------
func set_data_list(data_list: Array):for data in data_list:# 获取是哪个节点上的物品var node_name = data['id']var goods = get_node(node_name) as Goods# 设置物品资源属性var goods_property = GoodsProperty.new()goods_property.set_property(data)# 设置属性到物品上goods.set_goods_property(goods_property)# 装备属性发生改变change_property(goods_property, true)func get_data_list() -> Array:var data_list = []# 获取物品的属性for goods in get_children():var goods_property = goods.goods_property as GoodsPropertyif goods_property:var data = goods_property.get_property()# 记录是哪个节点,以节点名作为 iddata['id'] = goods.name# 添加到 data_list 数组中data_list.push_back(data)return data_list

打开 Test.tscn 场景,给 Test.gd 脚本添加如下代码

# 存放数据的路径
const DataPath = "res://data/"
# 物品数据路径
const InventoryDataPath = DataPath + "InventoryGoodsData"
# 装备物品路径
const EquipmentDataPath = DataPath + "EquipmentGoodsData"
# 属性列表
const PropertyList = preload("res://inventory/GoodsProperty.gd").GoodsPropertyonready var equip_panel = $HBoxContainer/EquipmentPanel
onready var inventory = $HBoxContainer/VBoxContainer/Inventory#------------------------------
#  节点带有的方法
#------------------------------
func _ready() -> void:property_label.text = format_data_to_text(equip_panel.all_property)load_inventory_data()load_equipment_data()## 添加几个空物品,装备栏有几个物品,物品栏添加几个空物品for i in range(equip_panel.get_data_list().size()):inventory.add_empty_goods()#------------------------------
#  自定义方法
#------------------------------
## 加载物品数据
func load_inventory_data():# 如果有数据,则加载数据if FileManager.exists_file(InventoryDataPath):# 加载文件数据var data_list = FileManager.load_data(InventoryDataPath)# 图片数据无法保存,所以需要重新通过名称获取物品的图片for data in data_list:data[PropertyList.Texture] = GoodsFactory.get_goods_data(data[PropertyList.Name])[PropertyList.Texture]# 设置物品栏物品的数据inventory.set_goods_data_list(data_list)# 没有数据,则添加几个物品else:inventory.add_goods("金疮药")inventory.add_goods("桃木剑")inventory.add_goods("生锈铁剑")## 加载装备栏数据
func load_equipment_data():# 如果有数据,则加载数据if FileManager.exists_file(EquipmentDataPath):var data_list = FileManager.load_data(EquipmentDataPath)# 图片数据无法保存,所以需要重新通过名称获取物品的图片for data in data_list:data[PropertyList.Texture] = GoodsFactory.get_goods_data(data[PropertyList.Name])[PropertyList.Texture]equip_panel.set_data_list(data_list)

点击根节点 Test 节点,连接 tree_exited 信号到 Test 节点上


连接后方法的代码如下:

func _on_Test_tree_exited():## 获取物品栏的数据并保存var inv_data_list = inventory.get_goods_data_list()FileManager.save_data(InventoryDataPath, inv_data_list)## 获取装备栏的数据并保存var equ_data_list = equip_panel.get_data_list()FileManager.save_data(EquipmentDataPath, equ_data_list)

进入 Test.tscn 场景按 F6 测试一下


项目文件:

百度网盘链接: https://pan.baidu.com/s/1YGjx-2pkGEwTKSX0HJVNeg

提取码: 4p9v


内容如有错误欢迎指出

【GDScript】保存/加载物品装备数据相关推荐

  1. PyTorch模型的保存加载以及数据的可视化

    文章目录 PyTorch模型的保存和加载 模块和张量的序列化和反序列化 模块状态字典的保存和载入 PyTorch数据的可视化 TensorBoard的使用 总结 PyTorch模型的保存和加载 在深度 ...

  2. (仿头条APP项目)6.点击过的新闻列表文字变灰和下拉刷新与滚动加载新闻数据

    文章目录 一.点击过的新闻列表文字变灰 效果图 实现思路 导入ormlite数据库类依赖 利用ormlite创建数据库和表 创建数据库类MyDbHelper 创建数据库中的新闻实体类NewInfo 页 ...

  3. Geospark-SQL加载SHP数据

    title: (六)Geospark SQL加载SHP数据(JAVA版) date: 2021-05-08 09:29:06 tags: GeoSpark GeoSpark SQL默认是无法读取Shp ...

  4. c++读取图片_Pytorch读取,加载图像数据(一)

    Pytorch读取,加载图像数据(一) 在学习Pytorch的时候,先学会如何正确创建或者加载数据,至关重要. 有了数据,很多函数,操作的效果就变得很直观. 本文主要用其他库读取图像文件(学会这个,你 ...

  5. 上拉加载更多后台数据_6-7【微信小程序全栈开发课程】记录页面(七)--分页加载记录数据...

    现在是一次性加载所有的记录数据,数据多的时候,会加载比较慢,所以我们改成分页加载,一次最多加载15条数据 每次拉倒底部都会自动加载下一页的数据,知道所有的数据加载完成 1.添加data变量 编辑rec ...

  6. android预加载app,Android欢迎页预加载首页数据

    项目需求:展示欢迎页的同时执行token登录和首页预加载 背景: 在此之前,展示欢迎页和token登录等网络操作是串行的,所以用户点开App到最终看到首页的时间就是:"展示欢迎页的时间&qu ...

  7. C++-加载EXCEL数据

    作者:翟天保Steven 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 场景需求 在用C++编程时,有保存数据的需求就有加载数据的需求,加载EXCEL数据的方式各式各样 ...

  8. Matlab停在载入界面,试图在Matlab用户界面中实现保存/加载对象功能时遇到了困难...

    我尝试在Matlab(R2009A)用户界面中实现保存/加载函数.我的对象实现了一个布局函数,它为对象生成一个用户界面.我正在尝试实现保存/加载按钮的回调."保存"按钮起作用,并将 ...

  9. 216:vue+openlayers 加载GPX数据,导出geojson文件

    第216个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+openlayers中加载GPX数据,显示图形, 导出geojson文件. GPX(GPS eXchange Format,GPS交换 ...

最新文章

  1. TabLayout 在宽屏幕上tab不能平均分配的问题解决
  2. [转]Docker 大势已去,Podman 即将崛起
  3. JPA 2 | 动态查询与命名查询
  4. gd动态曲线 php_php中用GD绘制折线图
  5. Linux初级运维(十七)——Linux内核编译与系统裁减
  6. [LeetCode] 118. Pascal's Triangle Java
  7. php upload 缓存_php-使用vich_uploader的liip_imagine无法创建缓存
  8. 20200907:力扣203周周赛题解记录
  9. git clone 某一特定分支转
  10. Centos如何安装163yum源
  11. IplImage结构及与其相关的读写函数
  12. 幼儿抽象逻辑思维举例_四个锻炼幼儿推理能力的小游戏,让孩子的逻辑思维更上一层楼...
  13. picasa2中文版,picasa2中文,picasa2中文版下载,picasa2中文版本
  14. 对六自由度机械臂的运动控制及python实现(附源码)
  15. JavaScript里的var变量
  16. layuiAdmin 框架单页面文档
  17. python闭包的应用场景_python闭包浅见
  18. fast角点与ShiTomas角点速度对比
  19. 老杜(杜昶旭)GRE填空笔记部分整理-by“ 1哥”+ TTC相关资料
  20. 上古卷轴5mo初始化python失败_NIF Texcase Fixer Script-适用于Linux的紫色和绝对引用修复程序...

热门文章

  1. php 立方根,PHP立方根
  2. 基于Android的学生信息管理大作业
  3. 用支付宝和微信可以直接跳转拉起支付,API搭建比较方便第三方支付接口首选杉德比较靠谱,
  4. CSP-S 2020 T1 P7075 儒略日
  5. Mapper的xml文件基础语法笔记,增删改查,遍历
  6. Len()、Lenw()与Lenb()函数间的区别
  7. MAC安装chromedriver碰到的问题
  8. android模拟器游戏大全,安卓模拟器游戏大全_小鸡模拟器
  9. 展锐哪些芯片支持伽利略Galileo定位系统
  10. ORACLE EBS常用表查询语句