是否可以在更新委托中创建SKShapeNode?

问题描述 投票:0回答:1

我在SKShapeNodeSpriteKit'supdate中创建了一个delegate,它的工作方式与我想要的完全一样。我唯一关心的是update每十分之一秒被调用一次。这是否意味着我的代码也经常运行?这似乎对性能不太友好。有办法解决吗?还是在update上有代码好吗?

为什么您会首先问update中的代码。好吧,如果我将其放置在didMovesceneDidLoad中,那么当我旋转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)
    }
}
ios swift sprite-kit device-orientation skshapenode
1个回答
0
投票

是的,您可以创建。您唯一的问题是每次调用更新时都在创建一个新节点。目前,您看不到多个节点,因为如果尝试在每个更新调用中更改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"

然后不再添加

© www.soinside.com 2019 - 2024. All rights reserved.