遵循Spritekit EXC_BAD_ACCESS中的路径

时间:2016-08-25 21:32:02

标签: swift sprite-kit core-graphics

我有一个简单的Snake游戏,头部绘制UIBezier路径。那部分工作正常:

func addLineToSnakePath(snakeHead: SnakeBodyUnit) {
    //add a new CGPoint to array
    activeSnakePathPoints.append(CGPoint(x: snakeHead.partX, y: snakeHead.partY))

    let index = activeSnakePathPoints.count-1

    if (index == 1) {
        path.moveToPoint(activeSnakePathPoints[index-1])
    }

    path.addLineToPoint(activeSnakePathPoints[index])
    shapeNode.path = path.CGPath
}

当Head在屏幕上移动时,通过滑动生成路径。现在我添加一个主体单元来跟随UIBezier路径,我得到一个错误的访问错误。

 func addBodyPart() {
    let followBody = SKAction.followPath(path.CGPath, asOffset: true, orientToPath: false, duration: 1.0)
    snakePart.runAction(followBody)
 }

崩溃: 0 SKCFollowPath :: cpp_willStartWithTargetAtTime(SKCNode *,double)

主题1 EXC_BAD_ACCESS

1 个答案:

答案 0 :(得分:0)

查看代码我宁愿用这种方式强化我的代码:

func addLineToSnakePath(snakeHead: CGPoint) {
    let count = activeSnakePathPoints.count
    if count == 0  { return } // The snake don't have an head..
    //add a new CGPoint to array
    activeSnakePathPoints.append(CGPoint(x: snakeHead.x, y: snakeHead.y))
    guard count > 1 else {
        // There are only two element (the head point and the new point) so:
        path = UIBezierPath.init() 
        path.moveToPoint(activeSnakePathPoints[count-1])
        shapeNode.path = path.CGPath
        return
    }
    // There are some elements:
    path.addLineToPoint(activeSnakePathPoints[count-1])
    shapeNode.path = path.CGPath
}

接下来,当您进行followPath操作时,我看到您使用offset值为true(我不知道您是否需要这个...):

  

asOffset:如果是,则路径中的点是相对偏移的   节点的起始位置。如果为NO,则节点中的点是绝对的   坐标值。

换句话说, true 表示路径与精灵的起始位置相对, false 表示绝对

最后一行:

snakePart.runAction(followBody)

我不知道snakePart是什么,但你在函数中使用shapeNode

<强>更新

考虑到你的崩溃,似乎snakePart不是一个有效的SKNode(就像当你尝试使用精灵或形状而没有初始化时)