ios - 如何使用 Swift SpriteKit 在 For 循环中一一创建 SKSprite 节点
问题描述
我想通过 For 循环创建 10 个 SKSPrite 节点。我希望节点一个接一个出现,但使用我的代码,所有 10 个节点同时出现。增加等待时间并没有帮助。先感谢您。
for i in 1 ... 10 {
self.stone[i - 1].position = CGPoint(x: 0 , y: -100)
self.stone[i - 1].anchorPoint = CGPoint(x: 0.5, y: 0.5)
self.stone[i - 1].size = CGSize(width: 50, height: 50)
self.stone[i - 1].physicsBody = SKPhysicsBody(circleOfRadius: 20)
self.stone[i - 1].physicsBody!.affectedByGravity = false
self.stone[i - 1].physicsBody!.categoryBitMask = PhysicsCategory.Object1
self.stone[i - 1].zPosition = 2
self.addChild(self.stone[i - 1])
let actionMove = SKAction.move(to: CGPoint(x: 0, y: 0), duration: 0.3)
let actionRolling = SKAction.animate(with: stone[i - 1].arrayTexture, timePerFrame: 0.05)
let actionDelay = SKAction.wait(forDuration: 1.0)
let actionSequence = SKAction.sequence([actionMove,actionRolling,actionDelay])
stone[i - 1].run(actionSequence)
}
解决方案
您在代码中所做的所有事情都是创建一个创建节点的循环,您在该循环中应用于这些节点的任何持续时间都会平等地影响它们。您需要一个在循环之外的变量,该变量在每个节点实例的循环中递增。
var delay: Double = 1.0
for i in 1 ... 10 {
self.run(.wait(forDuration: delay) {
self.stone[i - 1].position = CGPoint(x: 0 , y: -100)
self.stone[i - 1].anchorPoint = CGPoint(x: 0.5, y: 0.5)
self.stone[i - 1].size = CGSize(width: 50, height: 50)
self.stone[i - 1].physicsBody = SKPhysicsBody(circleOfRadius: 20)
self.stone[i - 1].physicsBody!.affectedByGravity = false
self.stone[i - 1].physicsBody!.categoryBitMask = PhysicsCategory.Object1
self.stone[i - 1].zPosition = 2
self.addChild(self.stone[i - 1])
let actionMove = SKAction.move(to: CGPoint(x: 0, y: 0), duration: 0.3)
let actionRolling = SKAction.animate(with: stone[i - 1].arrayTexture, timePerFrame: 0.05)
let actionDelay = SKAction.wait(forDuration: 1.0)
let actionSequence = SKAction.sequence([actionMove,actionRolling,actionDelay])
stone[i - 1].run(actionSequence)
}
delay += 1.0
}
推荐阅读
- typescript - 如何解决“类型循环引用自身错误”?
- while-loop - Nim 中的迭代器生成函数:分配迭代器时工作,直接调用时卡住
- reactjs - React 测试模拟实现一,使用模拟函数
- javascript - Slick.js 循环问题
- java - 带有路径变量的 Spring Boot AuthenticationToken
- windows - Docker multistage - 如果基本图像不同,则参数不会持续存在
- javascript - 对象的类型未知
- java - 如何使用 RxJava 代替 AsyncTask 来加载数据?
- docker - Windows DockerFile 复制文件夹
- javascript - 使用 javascript DOM 隐藏图像并仅使其在黑色背景上可见