You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GDScript伪随机数生成二维数组时每行重复问题求助

问题原因

在GDScript中,数组属于引用类型。你定义的subMap是全局变量,每次执行geographyMap.append(subMap)时,并没有将subMap的内容复制到二维数组中,而是把subMap这个数组对象的引用存了进去。后续循环里的subMap.clear()只是清空了当前数组的元素,但所有已经添加到geographyMap里的引用,指向的还是同一个数组对象。最终所有行都会显示最后一次循环填充的内容,导致所有子数组完全重复。

解决方案

直接在外层循环内部创建新的子数组,避免复用全局的subMap变量:

var geographyMap: Array[Array[int]]
func generate_map():
    print("Generate map function called")
    var mapHeight: int = 10
    var mapWidth: int = 10
    geographyMap.clear()
    for yy in mapHeight:
        # 每次循环生成新的子数组,不再复用全局变量
        var subMap: Array[int] = []
        for xx in mapWidth:
            var chance: int = randi_range(0, 1000)
            subMap.append(1 if chance > 500 else 0)
        geographyMap.append(subMap)

    for i in geographyMap:
        print(i)
补充优化
  • 用三元表达式简化0/1的判断逻辑,让代码更简洁。
  • 不需要额外调用randomize(),Godot项目启动时默认已完成随机种子初始化,除非你需要固定种子生成可复现的结果。
  • 如果一定要复用全局数组,也可以在添加时复制数组内容:geographyMap.append(subMap.duplicate()),但这种方式不如直接创建新数组高效清晰。

内容的提问来源于stack exchange,提问作者Faye Rauscher

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 20:22:16