2017-08-27 77 views
0

我試圖爲SKSpriteNode創建一個自定義操作塊,我有以下代碼:智能KeyPaths不能正常工作

let sprite = SKSpriteNode(color: SKColor.red, size: CGSize(width: 50, height: 50)) 
sprite.position = CGPoint(x: 320, y: 240)  
self.addChild(sprite) 

let animation = SKAction.customAction(withDuration: 0, actionBlock: { 
    (node, elapsedTime) in 

    var initialValue : CGFloat? 
    initialValue = node[keyPath: \SKSpriteNode.position.x] //Extraneous argument label 'keyPath:' in subscript 

    node[keyPath: \SKSpriteNode.position.x] = 10 //Ambiguous reference to member 'subscript' 
}) 

sprite.run(animation) 

我得到兩個錯誤,第一是編譯器想我有「的keyPath」,這是不是這樣,一個外來的說法,因爲如果我喜歡它建議刪除它,我得到這個錯誤:

Cannot convert value of type 'ReferenceWritableKeyPath' to expected argument type 'String'

第二個錯誤我得到的是:

Ambiguous reference to member 'subscript'

我不完全確定爲什麼我會得到所有這些錯誤,而且我不確定錯誤是什麼意思。如果有人能夠向我解釋並提出解決方案,那就太好了。提前致謝。

回答

1

keyPath不工作,因爲nodeSKNode而不是SKSpriteNode。您可以使用條件轉換來確定該節點是否爲SKSpriteNode

let animation = SKAction.customAction(withDuration: 0, actionBlock: { 
    (node, elapsedTime) in 

    var initialValue : CGFloat? 
    if let spritenode = node as? SKSpriteNode { 
     initialValue = spritenode[keyPath: \SKSpriteNode.position.x] 

     spritenode[keyPath: \SKSpriteNode.position.x] = 10 
    } 
})