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

向GKObstacleGraph添加GKPolygonObstacle时执行中断,求问题排查

解决GKObstacleGraph添加障碍物时的EXC_BAD_ACCESS错误

嘿,我一眼就看出问题所在啦——你遇到的EXC_BAD_ACCESS错误,根源是创建的GKPolygonObstacle完全无效!GameplayKit对多边形障碍物有硬性要求:必须传入至少3个点,且这些点要能构成一个闭合的、不自交的多边形,你只传了2个点,连最基本的闭合图形都算不上,框架在处理这种非法数据时就触发了内存访问错误。

给你修正后的可运行代码:

import GameplayKit

// 建议显式初始化GKObstacleGraph并指定obstacleRadius,避免默认值潜在问题
let graph = GKObstacleGraph(obstacleRadius: 0)

// 创建一个有效的矩形障碍物:4个点按顺时针排列,构成闭合多边形
let barrierPoints: [float2] = [
    float2(x: 200, y: 200),
    float2(x: 500, y: 200),
    float2(x: 500, y: 500),
    float2(x: 200, y: 500)
]
let barrier = GKPolygonObstacle(points: barrierPoints)

graph.addObstacles([barrier])

另外再给你几个关键注意点:

  • 多边形障碍物的点数量必须≥3,且点的排列顺序要能形成闭合图形(顺时针或逆时针均可,尽量不要让线段交叉)。
  • 如果只是想创建类似“墙”的线段障碍物,不要用GKPolygonObstacle,可以把线段转化为极窄的矩形多边形,或者通过自定义GKGraphNode的连接规则来限制路径绕过该线段。
  • 初始化GKObstacleGraph时,显式设置obstacleRadius参数会更稳妥,这个参数用于控制路径与障碍物的最小距离,设为0表示路径可以紧贴障碍物。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:22:47