我有一个简单的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
答案 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(就像当你尝试使用精灵或形状而没有初始化时)