2016-08-25 68 views
2

我有一個簡單的Snake遊戲,頭部繪製一個UIBezier路徑。該部分工作正常:在Spritekit中添加一條路徑EXC_BAD_ACCESS

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 
} 

當頭在屏幕上移動時,通過滑動產生路徑。現在我添加一個主體單元以遵循UIBezier路徑,並且出現錯誤的訪問錯誤。

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

崩潰的: 0 SKCFollowPath :: cpp_willStartWithTargetAtTime(SKCNode *,雙)

線程1個EXC_BAD_ACCESS

回答

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:如果是,則在路徑中的點是相對偏移到 節點的起始位置。如果爲「否」,則該節點中的點是絕對的 座標值。

換句話說真正指的路徑是從精靈的起始位置相對,意味着絕對

在該行

最後:

snakePart.runAction(followBody) 

我不知道是什麼是snakePart但您在您的功能中使用shapeNode

更新

你崩潰思考,似乎snakePart不是有效SKNode(比如當您嘗試使用精靈或形狀,而不對自身進行初始化)