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

Godot开发A*算法游戏时出现数组索引无效错误求助

问题解决:Godot A*寻路中"invalid get index '0' on base array"错误

错误原因

报错行costo_minimo = lista_costos[zero]触发索引越界,本质是**lista_costos数组为空**,此时访问任何索引都会触发错误。

导致数组为空的常见场景:

  • 首次调用evaluacion函数时,hijo_arriba/hijo_izquierda/hijo_abajo/hijo_derecha还未向lista_costos添加任何元素
  • 当前节点的所有方向子节点都不满足comprobar_hijos in celdas的条件,没有生成任何代价数据

修复方案

1. 给evaluacion函数添加空数组判断

在访问数组索引前先做检查,避免越界:

func evaluacion():
    # 空数组直接返回,避免索引错误
    if lista_costos.empty():
        print("警告:无可用代价数据")
        indice_costo_minimo = -1 # 标记无效索引
        return
    
    costo_minimo = lista_costos[0]
    for i in range(1, len(lista_costos)):
        if lista_costos[i] < costo_minimo:
            costo_minimo = lista_costos[i]
    indice_costo_minimo = lista_costos.find(costo_minimo, 0)

2. 确保celdas数组正确初始化

检查celdas是否已填充可通行单元格坐标,否则comprobar_hijos in celdas会一直返回false,导致lista_costos始终为空。

3. 优化最小值查找逻辑(可选)

用Godot内置min函数简化代码,同时保留空数组判断:

func evaluacion():
    if lista_costos.empty():
        print("警告:无可用代价数据")
        indice_costo_minimo = -1
        return
    
    costo_minimo = min(lista_costos)
    indice_costo_minimo = lista_costos.find(costo_minimo, 0)

4. 调用evaluacion前做前置检查

在astar函数末尾,确认有代价数据再执行评估:

func astar():
    # 原有代码...
    hijo_arriba()
    hijo_izquierda()
    hijo_abajo()
    hijo_derecha()
    
    # 仅当存在代价数据时执行评估
    if not lista_costos.empty():
        evaluacion()

额外建议

  • 在hijo_abajo等函数中添加日志,输出是否成功添加代价数据,方便定位问题
  • 检查celda_actual数组初始化情况,避免astar中访问celda_actual[0]触发同类错误

内容的提问来源于stack exchange,提问作者Marco Mulgado

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 22:50:38