【问题标题】:SKAction wait interval NOT consistentSKAction 等待间隔不一致
【发布时间】:2018-03-04 17:33:12
【问题描述】:

我有一个创建 SpriteNode 副本并以指定间隔沿矩形路径移动每个副本的函数。我对这个间隔有一个问题,即动作以不一致的间隔执行,从而在动作运行时在精灵节点之间产生奇怪的间隙。

var items = [SKSpriteNode]();
let item = SKSpriteNode(imageNamed: "Spaceship");

func createItem(scene: SKScene) {

    let square = UIBezierPath(rect: CGRect(x: -300, y: -150,  width: 700, height: 300));
    let follow = SKAction.follow(square.cgPath, asOffset: false, orientToPath: false, duration: 5.0);

    for i in 0..<6 {

        if let itemCopy = item.copy() as? SKSpriteNode {
            itemCopy.position = CGPoint(x: -300, y: -150);
            items.append(itemCopy);
            scene.addChild(itemCopy);
            let otherWait = SKAction.wait(forDuration: 1.0, withRange: 2.0);
            let otherSequence = SKAction.sequence([otherWait, SKAction.repeatForever(follow)]);
                itemCopy.run(otherSequence);
            }
        }
}

我的理解是我不能依赖for loop 来确定时间,而这个问题可能是由此引起的。有没有办法通过某种回调函数来解决这个问题?

【问题讨论】:

    标签: ios swift sprite-kit skspritenode skaction


    【解决方案1】:

    这里的问题与 for 循环无关,而是来自您使用 wait(forDuration:withRange:) 的事实,这是预期的行为。文档指出:

    创建一个空闲一段时间的操作。

    我认为您正在寻找wait(forDuration:) 方法,它会工作得很好:)

    【讨论】:

    • 谢谢。 wait(forDuration:) 的唯一问题是所有项目将相互重叠,看起来只有一个在移动。所以我需要一个额外的时间间隔让每个项目在不同的时间开始移动。太糟糕了,这是随机的一段时间..
    • 我通过使用 wait(forDuration:) 并在循环中增加持续时间来让它工作。谢谢:)
    • 很高兴听到@SeongLee! :) 是的!另一种解决方案是在 update() 方法中编写代码,并跟踪添加的最后一道菜,例如,如果增量时间 > 2 秒,则添加一道新菜。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多