【Godot】加载文件数据

Godot 3.3 rc6

接着上个教程 【GDScript】装备栏

我们开始给物品数据加载出来,之前使用资源的方式是用来加载小量数据的,如果是大量数据,那就不可避免需要加载文件中的数据。

加载数据代码见上个文章【GDScript】加载 csv 文件,转化为字典

开始设置文件的数据
在这里插入图片描述
保存为 csv 文件,我们保存名称为 GoodsData.csv

接下来我们在 文件系统 中创建一个 data 文件夹,将文件 GoodsData.csv 放在里面

在这里插入图片描述
可以看到这个显示了 错误的图标,输出中报错。这是因为 Godot 不识别这种文件,导入错误。
在这里插入图片描述
我们在 data 文件夹下创建一个名字为 .gdignore 的文件,Godot 会在导入的时候忽略这个文件夹,创建完我们退出项目,按 Ctrl + Shift + Q 或者选择菜单 项目-退出到项目列表 退出。我们再重新打开这个项目。

可以看到文件系统中没有这个文件夹了

在这里插入图片描述

我们在 autoload 文件夹中创建一个 GoodsFactory.gd 脚本文件,然后把这个脚本添加到 自动加载 里,用来获取物品节点

(如果不知道 自动加载 在哪里,看上个文章 【GDScript】加载 csv 文件,转化为字典 的下半部分内容

打开之前做的 GoodsProperty.gd 脚本,修改 GoodsProperty 的 AttackRange 为 AttackRange,之前一个小失误
在这里插入图片描述
改为
在这里插入图片描述

然后我们在 GoodsFactory.gd 脚本里写入如下内容

## GoodsFactory
## 物品工厂
extends Node


## 物品属性
const GoodsProperty = preload("res://inventory/GoodsProperty.gd")
## 物品场景文件
const ScnGoods = preload("res://inventory/Goods.tscn")
## 物品属性列表
const GoodsPropertyList = GoodsProperty.GoodsProperty

# 存放物品图片的文件夹(这里我创建了这些路径)
const GoodsPicturePath = "res://assets/texture/goods/"


## 物品数据
var goods_data = {}


#------------------------------
#  节点带有的方法
#------------------------------
func _ready():
	## 获取物品数据
	goods_data = FileManager.parse_csv_file("res://data/GoodsData.csv", "Name")



#------------------------------
#  自定义方法
#------------------------------
## 返回一个物品
## @goods_name 物品名称
## @return 返回一个物品的节点
func get_goods(goods_name: String):
	if goods_data.has(goods_name):
		var data = get_goods_data(goods_name)	# 物品数据
		var res_property = GoodsProperty.new()
		
		## 设置物品属性资源的属性数据
		res_property.set_property(data)
		
		## 返回物品节点
		var goods = ScnGoods.instance()
		goods.set_goods_property(res_property)	# 设置物品属性
		return goods
	else:
		print_debug("没有【%s】这个物品" % goods_name)
		return null



## 返回物品数据
## --------------
## 做这个方法的原因是因为,数据的属性可能与文件的属性数据不一致的问题
## 我们在这里将数据转为 符合物品属性数据格式 的数据
func get_goods_data(goods_name: String):
	var data = goods_data[goods_name]	# 物品数据
	var temp = {}
	
	# 设置资源的格式:变量[属性名] = 属性值
	temp[GoodsPropertyList.Name] = data['Name']
	temp[GoodsPropertyList.Damage] = int(data['Damage'])
	temp[GoodsPropertyList.MoveSpeed] = int(data['MoveSpeed'])
	temp[GoodsPropertyList.AttackRange] = int(data['AttackRange'])
	temp[GoodsPropertyList.Price] = int(data['Price'])
	temp[GoodsPropertyList.Texture] = get_goods_texture(data['Picture'])
	return temp


## 获取物品图片
## @picture_name 物品图片名称
## @return 返回物品的图片
var file = File.new()
func get_goods_texture(picture_name: String) -> Texture:
	var path = GoodsPicturePath + picture_name + ".png"	# 物品图片路径
	
	# 如果存在图片,则返回图片
	if file.file_exists(path):
		return load(path) as Texture
	# 如果不存在,则返回默认的 icon 图片
	else:
		return preload("res://icon.png")

现在我们做好的关于 获取物品 的脚本,在这里我没有在 res://assets/texture/goods/ 文件夹下边放图片,但你如果有图片文件,你可以修改为和你的 Picture 名称相同的图片文件,然后它会自己加载

现在我们开始给 Inventory 增加“添加物品”的功能
打开 Inventory.tscn 场景,添加脚本,写入如下代码:

## Inventory
extends PanelContainer


onready var grid = $Margin/Grid


#------------------------------
#  节点带有的方法
#------------------------------
func _ready():
	add_goods("金疮药")
	add_goods("桃木剑")
	add_goods("生锈铁剑")



#------------------------------
#  自定义方法
#------------------------------
## 添加物品
## @item_name 物品名称
func add_goods(item_name: String):
	var goods = GoodsFactory.get_goods(item_name)
	if goods:
		grid.add_child(goods)

我们再打开之前做的 Goods.tscn 场景,选中 TextureRect 节点,添加脚本,代码如下:

extends TextureRect


## 鼠标指上去显示数据
func _make_custom_tooltip(for_text):
	var label = Label.new()
	var goods_data = get_parent().goods_property.get_property()	# 物品数据
	label.text = JSON.print(goods_data, '\t')
	return label	# 返回这个标签,显示数据

然后给 TextureRect 节点的 hint_tooltip 属性添加文字,任何非空格字符串都可以这样鼠标指上去会调用 _make_custom_tooltip 方法,我给它设置成 111,任何字符都无所谓
在这里插入图片描述

我们再切回 Inventory.tscn 场景,按 F6 运行测试一下,鼠标指到物品上,然后显示出了物品信息:

在这里插入图片描述

我是为了省事演示的方式做成这样,你可以在上面的 Texture 节点的脚本的 _make_custom_tooltip 方法里边设置自己的标签然后让他显示出来。

可以看到中文字体没有显示出来,是因为 Godot 标签内置的还不支持中文,我们需要手动给他设置中文字体

点击 Inventory.tscn 场景的 theme 属性,点击创建 theme 资源
在这里插入图片描述
点击下边的 default font ,创建 DynamicFont 资源
在这里插入图片描述
在 font_data 属性里拖拽一个字体文件到里面,下方我会给出项目文件,里面有字体,或者你在 windows 里边有 Fonts 字体文件夹(自己百度 Fonts 文件夹位置),选择一个中文字体复制到 Godot 项目的文件夹里,然后设置
在这里插入图片描述
然后再按 F6 测试一下场景,这次可以看到有中文字体了
在这里插入图片描述

项目文件:
百度网盘链接: https://pan.baidu.com/s/1qq9VGfWCrcDplqC-0tZVFw
提取码: gu6g

文中如有错误,欢迎指正。

  • 4
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
### 回答1: Godot XML文件是一种用于描述Godot游戏引擎中场景和资源的XML格式文件。这些文件通常使用`.tscn`和`.tres`文件扩展名,分别表示场景和资源。 Godot XML文件包含以下内容: 1. 版本信息:Godot XML文件的第一行是版本信息,用于指定使用的Godot版本和文件格式。 2. 根节点:根节点是文件中的最上层元素,它包含了场景或资源的所有内容。根据文件类型,根节点的标签名称可能是`Scene`或`Resource`。 3. 节点:节点是场景或资源中的一个元素,它可以是一个对象、一个组或一个自定义节点。每个节点都有一个类型和一个名称,以及一组属性和子节点。 4. 属性:属性是节点的一个元素,用于描述节点的各种属性,例如位置、旋转、缩放等。每个属性都有一个名称和一个值。 5. 子节点:子节点是一个节点的一个元素,用于描述节点的子节点。子节点可以包含其他节点,这些节点可以是对象、组或自定义节点。 6. 资源引用:在Godot中,资源是可重用的对象,它们可以被多个场景使用。为了在场景中使用资源,需要使用资源引用,它是一个字符串,指向资源的路径或ID。 一个简单的Godot XML文件示例,如下所示: ```xml <?xml version="1.0" encoding="UTF-8"?> <root> <Scene format="2"> <environment> <background_color> <color r="0" g="0" b="0" a="1"/> </background_color> </environment> <node name="Sprite" type="Sprite"> <position x="0" y="0"/> <scale x="1" y="1"/> <texture import="ExtResource( 1 )"> <filter_mag>1</filter_mag> <filter_min>1</filter_min> <flip_h>0</flip_h> <flip_v>0</flip_v> <offset> <x>0</x> <y>0</y> </offset> <region> <enabled>0</enabled> <rect> <x>0</x> <y>0</y> <width>0</width> <height>0</height> </rect> </region> <tex_flags>7</tex_flags> </texture> </node> </Scene> </root> ``` 该示例是一个Godot场景文件,包含一个名为"Sprite"的Sprite节点。节点有位置、规模和纹理等属性。节点的纹理属性是一个资源引用,指向场景中的一个纹理资源。 ### 回答2: Godot XML 文件是指在Godot游戏引擎中使用的一种文件格式,用于存储游戏资源和场景数据。XML是一种可扩展标记语言,被广泛应用于数据交换和配置文件等领域。 Godot XML 文件使用标签、属性和文本内容来描述游戏资源和场景的属性和结构。通过使用不同的标签和属性,可以定义游戏中的角色、场景、音频、动画等相关信息。XML文件具有良好的可读性和可扩展性,能够方便地进行修改和维护。 通过Godot引擎的内置工具,我们可以使用XML文件导入和导出游戏资源和场景数据。首先,我们可以创建一个XML文件,并按照Godot引擎的规定格式编写内容。然后,通过Godot引擎中提供的相关函数,可以将XML文件导入到游戏项目中,或者将游戏资源和场景数据导出为XML文件。 使用Godot XML 文件可以实现游戏资源和场景的共享和复用。通过将资源和场景数据存储为XML文件,我们可以方便地在不同的项目中进行导入和导出。这样,我们可以更好地管理和组织游戏开发过程中的各种资源,提高开发效率。 总之,Godot XML 文件是一种使用XML格式存储游戏资源和场景数据文件。它具有可读性和可扩展性的特点,可以方便地在Godot游戏引擎中进行导入和导出。通过使用XML文件,我们可以更好地组织和管理游戏开发过程中的资源和数据。 ### 回答3: Godot XML 文件是一种在Godot游戏引擎中使用的文件格式。它用于存储场景、资源和节点的信息,以便在游戏中进行序列化和反序列化操作。 Godot XML 文件是一种基于文本的文件格式,可以通过文本编辑器打开和修改。它使用层次结构的标记来表示节点之间的关系,并通过属性和值来描述节点的属性。 通过Godot XML 文件,开发者可以保存和加载游戏场景,包括场景中的节点、材质、贴图等。它还可以用于导出和导入自定义资源,例如动画、音频和脚本文件。 使用Godot XML 文件,开发者可以方便地进行版本控制和团队协作。他们可以将修改后的XML文件上传到代码仓库中,以便团队成员共享和合并。 此外,Godot XML 文件还可以作为游戏配置文件使用。开发者可以使用XML文件来存储玩家的偏好设置、游戏进度、成就等信息。 总而言之,Godot XML 文件是Godot游戏引擎中使用的一种文件格式,用于存储和描述场景、资源和节点的信息。它方便游戏开发者进行序列化、反序列化、版本控制和配置管理。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值