我在SKShapeNode
SpriteKit's
update
中创建了一个delegate
,它的工作方式与我想要的完全一样。我唯一关心的是update
每十分之一秒被调用一次。这是否意味着我的代码也经常运行?这似乎对性能不太友好。有办法解决吗?还是在update
上有代码好吗?
为什么您会首先问update
中的代码。好吧,如果我将其放置在didMove
或sceneDidLoad
中,那么当我旋转device
时,node
不会立即跟随,它会在原位置保留半秒,然后再重新定位到新位置,它看起来像是跳跃。坏。 Update
解决了这个问题。这是代码:
override func update(_ currentTime: TimeInterval) {
let mySquare = SKShapeNode(rectOf: CGSize(width: 50, height: 50))
mySquare.fillColor = SKColor.blue
mySquare.lineWidth = 1
mySquare.position = CGPoint(x: 0, y: 0)
self.addChild(mySquare)
}
}
是的,您可以创建。您唯一的问题是每次调用更新时都在创建一个新节点。目前,您看不到多个节点,因为如果尝试在每个更新调用中更改mySquare的位置,则会将它们放置在彼此的顶部,您将看到您有多个节点。创建后不久将无效,您将用完帧频。因为您没有进行任何动画处理,所以现在看不到区别。
override func update(_ currentTime: TimeInterval) {
let mySquare = SKShapeNode(rectOf: CGSize(width: 50, height: 50))
mySquare.fillColor = SKColor.blue
mySquare.lineWidth = 1
mySquare.position = CGPoint(x: randomX, y: randomY)
self.addChild(mySquare)
}
更改X和Y的位置将使您有机会看到将节点添加到屏幕上的其他位置。
如果出于任何原因要在更新中创建mySquare节点,则可以保留该节点的引用,也可以在父节点中搜索该节点(如果可用),则不添加任何节点
var mySquare: SKShapeNode
然后在更新中检查Square节点是否为nil或具有相同的节点
override func update(_ currentTime: TimeInterval) {
if mySquire == nil {
mySquare = SKShapeNode(rectOf: CGSize(width: 50, height: 50))
mySquire.name = "your square name"
mySquare.fillColor = SKColor.blue
mySquare.lineWidth = 1
mySquare.position = CGPoint(x: randomX, y: randomY)
self.addChild(mySquare)
}
}
注意:您甚至可以检查名称,例如
if mySquare.name == "your square name"
然后不再添加