创建多个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到20的顺序堆叠。打印时,它们是正确的。但是,当检查labelNode文本时,它们可以在实际设备上运行,但是对于多张光盘,有时无法在模拟器上运行(尤其是在大屏幕设备(如iPad Pro,iPhone 11 Pro等)上运行的开始),我认为这是一个问题计算机速度:-(。为了安全起见,到目前为止,我设置了'delay + = 0.2'。我认为这也涉及动画问题。如何确保它们可以按顺序放置?(尽可能短的延迟)]
当滴落的光盘完成并堆叠时,它们会非常非常连续地不断弹跳。更多的光盘,更多的弹跳。我认为这是disc.physicsBody?.affectedByGravity = true
的问题,但必须启用此功能以便以后移动。如何让他们保持静止?
谢谢。
===编辑===
问题2的解决方案:光盘下方有一个地板,它们的恢复必须都设置为0。
创建多个SKShapeNode,如下所示:对于1 ... 20中的i {let waitAct = SKAction.wait(forDuration:delay)self.run(waitAct){let disc = SKShapeNode(rectOf:...
解决模拟器上SpriteKit
的性能,我建议您查看此页面: