gpt4 book ai didi

ios - 从对象创建循环转换为在对象创建之间等待的 runBlock

转载 作者:行者123 更新时间:2023-11-28 06:52:11 25 4
gpt4 key购买 nike

抱歉,对 swift 还很陌生,而且一般都是编码,所以这可能是一个初学者问题。我目前有下面的代码围绕一个圆圈创建箭头。我如何转换它以便所有箭头都在最后一个箭头后 1 秒生成,直到它们全部创建?另一个线程中的用户告诉我,这必须使用 runBlock 和 SKAction.sequence 来完成,但我对它们几乎不熟悉。我能得到一些帮助吗?谢谢! (:

override func didMoveToView(view: SKView) {

self.spawnArrows()

}

func spawnArrows() {

for var i = 0; i < 36; i++ {

let arrow = self.createArrow(specificPointOnCircle(Float(self.frame.size.width), center: CGPoint(x: CGRectGetMidX(self.frame), y: CGRectGetMidY(self.frame)), angle: Float(i * 10)))
self.addChild(arrow)

}
}

func specificPointOnCircle(radius:Float, center:CGPoint, angle:Float) -> CGPoint {

let theta = angle * Float(M_PI) / 180
let x = radius * cosf(theta)
let y = radius * sinf(theta)
return CGPoint(x: CGFloat(x) + center.x, y: CGFloat(y) + center.y)

}

func createArrow(position: CGPoint) -> SKSpriteNode {

let arrow = SKSpriteNode(imageNamed: "Arrow.png")
arrow.zPosition = 2
arrow.size = CGSize(width: self.frame.size.width / 2 * 0.12, height: self.frame.size.width * 0.025)
arrow.position = position
return arrow

}

最佳答案

您可以像下面这样更新您的spawnArrows 方法

func spawnArrows() {

var list = [SKAction]()

for var i = 0; i < 36; i++ {
let create = SKAction.runBlock { [unowned self] in
let arrow = self.createArrow(self.specificPointOnCircle(Float(self.frame.size.width), center: CGPoint(x: CGRectGetMidX(self.frame), y: CGRectGetMidY(self.frame)), angle: Float(i * 10)))
self.addChild(arrow)
}
list.append(create)

let wait = SKAction.waitForDuration(1)
list.append(wait)
}

let sequence = SKAction.sequence(list)
self.runAction(sequence)
}

正如您现在看到的,我正在使用 for 循环 创建一个操作列表

  1. 第一个添加的 Action 确实包含创建第一个箭头的代码
  2. 然后有个 Action 等待1秒
  3. 然后是添加第二个箭头的 Action
  4. 等等...

for 循环 结束后, Action 列表被转换为 sequence 并最终执行。

让我知道它是否有效。

关于ios - 从对象创建循环转换为在对象创建之间等待的 runBlock,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34583157/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com