如何以正确的顺序创建多个SKShapeNode?

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

创建多个SKShapeNode如下:

for i in 1...20 {
        let waitAct = SKAction.wait(forDuration: delay)
        self.run(waitAct) {
                let disc = SKShapeNode(rectOf: CGSize(width: width, height: height), cornerRadius: height/2)
                disc.position = CGPoint(x: self.frame.midX, y: self.frame.maxY)
                disc.fillColor = self.discColors[i]
                disc.strokeColor = .clear
                disc.physicsBody = SKPhysicsBody(rectangleOf: CGSize(width: width, height: height))
                disc.physicsBody?.affectedByGravity = true
                disc.physicsBody?.density = 0.5 
                disc.physicsBody?.mass = 0.2
                disc.physicsBody?.friction = 1.0
                disc.physicsBody?.restitution = 0
                disc.physicsBody?.isDynamic = true
                disc.physicsBody?.allowsRotation = false
                disc.name = "\(i)"
                self.addChild(disc)

                let label = SKLabelNode(text: "\(i)")
                label.fontColor = .white
                label.fontName = "Arial Rounded MT Bold"
                label.fontSize = fontSize
                label.verticalAlignmentMode = .center
                disc.addChild(label)

                print(i)
        }    
        delay += 0.2
}

所有光盘均在屏幕顶部创建,然后自动下拉,所有光盘垂直堆叠。

这里有两个问题:

  1. 光盘应按从1到20的顺序堆叠。打印时,它们是正确的。但是,当检查labelNode文本时,它们可以在实际设备上运行,但是对于多张光盘,有时无法在模拟器上运行(尤其是在大屏幕设备(如iPad Pro,iPhone 11 Pro等)上运行的开始),我认为这是一个问题计算机速度:-(。为了安全起见,到目前为止,我设置了'delay + = 0.2'。我认为这也涉及动画问题。如何确保它们可以按顺序放置?(尽可能短的延迟)]

  2. 当滴落的光盘完成并堆叠时,它们会非常非常连续地不断弹跳。更多的光盘,更多的弹跳。我认为这是disc.physicsBody?.affectedByGravity = true的问题,但必须启用此功能以便以后移动。如何让他们保持静止?

谢谢。

===编辑===

问题2的解决方案:光盘下方有一个地板,它们的恢复必须都设置为0。

创建多个SKShapeNode,如下所示:对于1 ... 20中的i {let waitAct = SKAction.wait(forDuration:delay)self.run(waitAct){let disc = SKShapeNode(rectOf:...

ios swift skspritenode skscene skshapenode
1个回答
0
投票

解决模拟器上SpriteKit的性能,我建议您查看此页面:

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