更新功能无法跟上移动精灵

时间:2017-05-06 10:14:45

标签: swift sprite-kit skspritenode updating skaction

我有两个相互冲洗的精灵。我使用SKAction移动其中一个精灵并使用更新功能移动另一个精灵。每次调用更新函数时,它都会计算第二个精灵需要的位置,以便它继续与第一个精灵齐平。

但是,似乎更新功能无法足够快地移动第二个精灵,因为两个精灵之间会出现间隙。

The two sprites

我假设在调用更新函数后,第一个精灵的SKAction重新定位会被激活,这个短暂的延迟会产生差距,但我只是猜测。

我知道我可以将第二个精灵作为孩子添加到第一个精灵中以消除差距,但我无法做到这一点,原因很长,需要解释。

无论如何长话短说,有没有人有想法或如何使更新功能更精确或如何消除差距?

我用于测试的示例代码:

import SpriteKit
import GameplayKit

class GameScene: SKScene {

    let square1 = SKSpriteNode(texture: nil, color: UIColor.black, size: CGSize(width: 50, height: 50))
    let square2 = SKSpriteNode(texture: nil, color: UIColor.black, size: CGSize(width: 50, height: 50))

    override func didMove(to view: SKView) {

        backgroundColor = UIColor.white
        anchorPoint = CGPoint(x: 0.5, y: 0.5)

        addChild(square1)

        square2.position.x = square1.position.x + square1.size.width/2 + square2.size.width/2
        addChild(square2)

        let moveSideToSide = SKAction.sequence([

            SKAction.moveTo(x: -50, duration: 1),
            SKAction.moveTo(x: 50, duration: 1)

            ])

        square1.run(SKAction.repeatForever(moveSideToSide))

    }

    override func update(_ currentTime: TimeInterval) {

        square2.position.x = square1.position.x + square1.size.width/2 + square2.size.width/2

        // or - they both create a gap

        square2.run(SKAction.moveTo(x: square1.position.x + square1.size.width/2 + square2.size.width/2, duration: 0))

    }
}

0 个答案:

没有答案