比方說,我創建了以下SKNode擴展斯威夫特在一個迅速類(即NodeExtensions.swift)。
extension SKNode {
var x: CGFloat {
get {
return position.x
}
set {
position.x = newValue
}
}
var y: CGFloat {
get {
return position.y
}
set {
position.y = newValue
}
}
}
然後在我的GameScene:SKScene我創建了一個函數來繪製從一個點一個簡單的線條到另一個如下。請注意我已經創建精靈節點在此GameScene類nodeA1
和nodeA2
性能和使用CGRectGetMidX
和CGRectGetMidY
在viewDidLoad中添加了這兩個節點場景以指定位置。
// I first declare these globally in the class
let pathToDraw1 = CGPathCreateMutable()
let myLine1 = SKShapeNode()
// Then I create function below that uses pathToDraw1 and myLine1.
// Draw line from Node 1 to Node 2
func drawLine1to2() {
// Removes drawn line by enumerating the node with the name "line1"
enumerateChildNodesWithName("line1", usingBlock: {node, stop in node.removeFromParent()})
// Enumerate over this node
nodeA2.enumerateChildNodesWithName("A2_Broj", usingBlock: {node, stop in
self.myLine1.name = "line1"
CGPathMoveToPoint(self.pathToDraw1, nil, nodeA1.x, nodeA1.y) // From node
CGPathAddLineToPoint(self.pathToDraw1, nil, nodeA2.x, nodeA2.y) // To node
self.myLine1.path = self.pathToDraw1
self.myLine1.strokeColor = SKColor.orangeColor()
self.myLine1.zPosition = 2.0
self.myLine1.lineWidth = 25
self.addChild(self.myLine1)
})
}
請注意以下幾行,使用SKNode擴展中的x和y位置。
CGPathMoveToPoint(self.pathToDraw1, nil, nodeA1.x, nodeA1.y) // From node
CGPathAddLineToPoint(self.pathToDraw1, nil, nodeA2.x, nodeA2.y) // To node
通過使用該SKNode擴展,我能夠使用單個函數來繪製從一個點線到另一個使用CGPathMoveToPoint
和任何設備上面所示CGPathAddLineToPoint
如(iPad和/或iPhone等)。
綜上所述!
- 創建SKNode擴展名。
- 在場景中創建並添加兩個節點(即,對於此線條繪製示例)。
- 使用擴展時,請在您的函數/方法中指定每個節點的使用方式,如上例所示。
注意我使用的只是一個示例,但可以在您自己的應用程序設計中使用同樣的方法。這裏的想法是使用擴展,並且只有一個功能/方法可以獲得適用於任何設備的節點位置。
這是否仍然是貫徹我們的應用程序使用擴展的正確方法?謝謝!
完美的解釋,是的,它有助於,再次,超級解釋。謝謝。 –
我的榮幸。不要猶豫問更多的問題,這就是堆棧溢出是什麼,只要你張貼你正在嘗試的代碼。快樂的編碼。 – crashoverride777
我的朋友。由於您熟悉我當前使用baseScene創建10個節點並使用此baseScene繼承其他30個類的過程。如果我來到一個不需要node1但需要其他九個節點的子類,我可以只使用'node1.removeFromParent'嗎?我試了一下,它的工作原理,但我想確保這是避免在不需要此節點的場景中使用此節點的正確方法。謝謝。 –