向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
相关产品推荐
相关产品推荐

