gpt4 book ai didi

swift - 将 SKNodes 添加到 SKScene 减慢动画

转载 作者:行者123 更新时间:2023-11-28 15:31:04 24 4
gpt4 key购买 nike

我有一个 SKScene,其中有一个计时器回调(不是运行循环),它在每个时间步通过添加和/或删除 SKNode 来更新场景。这个想法是为沿直线向下移动的节点设置动画。下面是我回调中的代码。

    // 1. Add new nodes

let newSprite = SKSpriteNode(imageNamed: "file")

newSprite.position = (pos, pos)
spriteList.append((sprite: newSprite, position: 0))
scene.addChild(newSprite)

var removeList = [Int]()

let action = SKAction.move(to: (new, pos), duration: 5.0)
newSprite.run(action)

// 2. Update node positions
for (i,_) in spriteList.enumerated() {
spriteList[i].position += 1
if spriteList[i].position > gridLength {
removeList.append(i)
}
}

// 3. Remove old nodes
for i in removeList {
spriteList[i].sprite.removeFromParent()
spriteList.remove(at: i)
}

目前,每次运行此回调时,动画都会断断续续。当回调停止并且我没有更多节点要添加时,场景中的其余节点会平滑地向下动画。有什么建议可以解决这个问题吗?问题是添加节点、运行逻辑还是其他问题?

最佳答案

I have a SKScene, in which I have a timer callback (not run loop)

不要这样做

你永远不应该在 SpriteKit 中使用定时器,而是始终坚持使用运行循环。

Action

如果你想每 n 秒重复一段代码,只需使用操作

class Scene: SKScene {
override func didMove(to view: SKView) {
super.didMove(to: view)

let action = SKAction.run { [unowned self] in
// <--- put the codwe you want to repeat every 2 seconds here
}

let wait = SKAction.wait(forDuration: 2)
let sequence = SKAction.sequence([action, wait])
let repeatForever = SKAction.repeatForever(sequence)
run(repeatForever)
}
}

关于swift - 将 SKNodes 添加到 SKScene 减慢动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44735876/

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