关于用户数据库的问题

在游戏开发过程中,我遇到了许多关于用户数据库功能的疑问,主要来源如下:

  1. 其调用方法为 GameManager.get_project_database_plain("database_name", "record_name", "column_name"),其中 "record_name" 为字符串类型。这使得我在脚本中遍历数据库时非常困难且麻烦。例如,如果我希望有10个背包槽位,我需要使用一种非常繁琐的方法在 int 类型和 str 类型之间转换。目前我采用的临时方法如下:
	var backpack_item = []
	var database_name = "背包"
	# 获取背包物品状态
	for i in range(11):
		var database_item_numberName = "背包" + str(i) + "号位"
		var database_item_number = AGMakerManager.get_project_database_plain(database_name, database_item_numberName, "是否有东西")
		# 打印从数据库获取的原始值
		print("从数据库获取第 ", i, " 个位置的原始值: ", database_item_number)
		# 检查获取的值是否为 null
		if database_item_number == null:
			print("警告:第 ", i, " 个位置获取的值为 null,默认设置为 false")
			database_item_number = true
		backpack_item.append(database_item_number)
		print("添加到数组的第 ", i, " 个位置的值: ", database_item_number)

	print(value)

	# 扩展遍历范围到 11 个元素
	for i in range(last_updated_index + 1, min(11, backpack_item.size())):
		if not backpack_item[i]:
			print("更新前第 ", i, " 个位置状态: ", backpack_item[i])
			backpack_item[i] = true
			var database_item_numberName = "背包" + str(i) + "号位"
			# 更新数据库,传入布尔值 true
			AGMakerManager.update_project_database_plain(database_name, database_item_numberName, "是否有东西", true)
			print("已更新第 ", i, " 个位置,更新值为 true")
			# 重新获取更新后的值
			var updated_value = AGMakerManager.get_project_database_plain(database_name, database_item_numberName, "是否有东西")
			print("更新后第 ", i, " 个位置从数据库获取的值: ", updated_value)
			last_updated_index = i
			break
		else:
			print("第 ", i, " 个位置已有物品,继续检查下一个")
	print(backpack_item)

由于所有参数均为字符串类型,我不确定是否有更好的处理方式,但这在代码维护方面给我带来了诸多麻烦。

  1. 从 VS 脚本调用用户数据库的过程也非常繁琐。

首先,在动作转换中的开关或变量值比较条件检查时,无法选择用户数据库。


这些转换条件非常奇怪,耗费了我大量精力。我别无选择,只能通过信号来完成此任务。我必须先向脚本发送信号,然后在 GameObject 上创建一个新的开关变量,最后在脚本中修改它以实现所需操作。

func _on_test_同步信号测试(signal_name:String, value:Variant) -> void:
	var teststatus = AGMakerManager.get_project_database_plain("背包","背包1号位","是否有东西")
	print("同步信号测试,当前值: ", teststatus)
	$".".set_value("同步开关",teststatus)
	pass # Replace with function body.

其次,关于图像显示,我不清楚如何在 VS 脚本中获取存储在用户数据库中的图像数据。在动作编辑器中,似乎没有直接指定用户数据库的选项。我之前的解决方法是使用脚本从数据库中获取数据,并修改 Sprite2D 组件的 texture 属性以实现所需效果。

然后是对象开关的问题。当选择“self”(对象本身)时,我无法使用变量赋值,也无法直接引用项目数据库中的值来设置其状态。

在将用户数据库功能与 VS 脚本结合使用时,我经常遇到无法指定变量的地方,这让我非常头疼。使用 AGM 的初衷是为了减少编写代码的工作量,但这些效果和限制迫使我探索许多其他解决方案。受限于我的编程水平,我遇到了诸多麻烦和困难。我真诚希望 VS 脚本中变量、用户数据库和 GameObject 之间的交互逻辑能够得到优化。如果有任何好的解决方案,我将不胜感激。

1 个赞

这是非常扎实的反馈,也是我们需要听到的内容!我记得在测试阶段数据库经历了几次扩展,但现在我们可以更好地研究如何在操作和条件中使用这些扩展。我会将此反馈传达出去!

1 个赞

谢谢。我期待越来越好的用户体验。