【发布时间】:2019-11-26 15:29:43
【问题描述】:
多个 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等大屏幕设备上开始运行时),我认为这是一个问题计算机速度:-(。为了安全起见,现在我设置了“延迟+= 0.2”。我认为这也是动画问题的下降。我怎样才能确保它们可以按顺序放置?(尽可能保持短暂的延迟)
当圆盘落下完成并堆叠时,它们会继续非常轻微地持续弹跳。更多的光盘,更多的弹跳。我认为这是
disc.physicsBody?.affectedByGravity = true的问题,但必须启用此功能以便稍后移动。如何让它们保持静止?
谢谢。
=== 已编辑 ===
问题 2 的解决方案: 圆盘下方有一层,它们的恢复必须都设置为 0。
【问题讨论】:
标签: ios swift skspritenode skscene skshapenode