Godot:我设置了一个变量,但它充当了一个指针

Godot: Im setting a variable but its acting as a pointer

var t = db.query_result

然后我在 for 中使用它和多个其他更改 t 值的查询,但我想将它设置为我的第一个查询的值?如何将 t 设置为 db.query_result 并使其在我进行其他查询时不再更改?

func setTuto1():#
db.open_db()
db.query("select ID from currentTutorialMap where LandTextureType = 'Stone0';")
var t = db.query_result
print(t)
print(t.size())
print(t[1]["ID"])
for i in range(0, t.size()):
    var x = rng.randi_range(0, 6)
    if x==0:
        db.query("update currentTutorialMap set LandTextureIndex = 10 where ID == %d;" % t[i]["ID"])
    elif (x==1 or x==2):
        db.query("update currentTutorialMap set LandTextureIndex = 9 where ID == %d;" % t[i]["ID"])
    elif (x==3 or x==4):
        db.query("update currentTutorialMap set LandTextureIndex = 11 where ID == %d;" % t[i]["ID"])
    elif (x==5 or x==6):
        db.query("update currentTutorialMap set LandTextureIndex = 12 where ID == %d;" % t[i]["ID"])

变量 t 是您方法的局部变量 (func)。如果您希望它保留其值,请将其设为一个字段(在任何 func 之外声明它,指南建议在脚本顶部执行此操作)。

如果你只想要第一个结果,而不是覆盖它,你可以有一个 bool 变量,默认设置为 false。当您写 t 时,您将其设置为 true。这允许您检查是否已经设置 t.

像这样:

var _is_t_set := false
var _t

func setTuto1():
    if _is_t_set:
        # we have been here before
        # do whatever you do in this case
        pass
    else:
        # first time we are here
        db.open_db()
        db.query("blah blah blah")
        _t = db.query_result
        _is_t_set = true # so we do not enter here again

或者您可以使用 null。尽管仔细检查 db.query_result 是否可以为空。

像这样:

var _t = null

func setTuto1():
    if _t != null:
        # we have been here before
        # do whatever you do in this case
        pass
    else:
        # first time we are here
        db.open_db()
        db.query("blah blah blah")
        _t = db.query_result

另外,