gpt4 book ai didi

swift - for循环不按顺序执行代码(swift + spritekit)

转载 作者:可可西里 更新时间:2023-11-01 01:28:35 24 4
gpt4 key购买 nike

这是我的代码:

override func didMoveToView(view: SKView) {
/* Setup your scene here */

let origin = CGPoint(x: CGRectGetMidX(self.frame), y: CGRectGetMidY(self.frame))

let delay = SKAction.waitForDuration(2.0)

for (var i = 0; i < 6; i++) {
//generate a random point on a circle centered at origin with radius of 500
let point = randomPointOnCircle(500, center: origin)

let chanceToSpawn = arc4random_uniform(100)

switch chanceToSpawn {

case 0...60:

self.runAction(delay){
let smallBall = SKSpriteNode(imageNamed: "smallBall”)
self.addChild(smallBall)
smallBall.xScale = 0.05
smallBall.yScale = 0.05
smallBall.position = point

let finalDest = CGPointMake(origin.x, origin.y)
let moveAction = SKAction.moveTo(finalDest, duration: 5.0)
smallBall.runAction(SKAction.sequence([SKAction.waitForDuration(0.1), moveAction, SKAction.runBlock({
smallBall.removeFromParent()
})]))
delay
}

break

case 61...80:
//same as case 0…60, smallBall changed to “mediumBall”
break
case 81...99:
//same as case 0…60, smallBall changed to “largeBall”
break
default:
break
} // ends switch statement
}//ends for loop



}//end didMoveToView

基本上,我的球会在圆圈上的随机点上生成并向中心移动。但我遇到的问题是,无论我如何重新安排事物(或重写事物,即尝试不同的循环或定义用于生成球和球运动的函数并简单地从 switch 语句内部调用它们)所有球同时产生。我正在努力让它们一个接一个地产生(意味着一个球产生,线程等待几秒钟,然后产生另一个球。),我似乎无法弄清楚为什么每个球都同时产生时间和所有其他球一样。

我对 Swift/Spritekit 编程还很陌生,我觉得我忽略了一些小细节,这让我很烦恼。任何帮助表示赞赏!

最佳答案

For 循环的执行速度比您想象的要快!您的 for 循环可能会立即执行。

“这是为什么?我已经调用了 self.runAction(delay) 来延迟 for 循环!”您问。不幸的是,延迟操作实际上并没有延迟 for 循环。它只会延迟您在 self 上运行的其他操作。

要解决此问题,请尝试延迟不同的数量,具体取决于 for 循环计数器:

self.runAction(SKAction.waitForDuration(i * 2 + 2)) { ... }

这样,球将每两秒出现一次。

关于swift - for循环不按顺序执行代码(swift + spritekit),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40012730/

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