SpriteKit将节点设置为特定位置的动画

时间:2017-05-16 10:35:40

标签: xcode swift3 sprite-kit

我正在用SpriteKit构建我的第一个游戏,用Swift 3编写。

我已经花了好几个小时来完成这个"赢得明星效应",但还没有任何可接受的结果:/

此视频演示了我要寻找的效果:https://youtu.be/9CeK5_G8T9E

添加一颗或多颗恒星不是问题;问题是让它们通过不同路径向不同方向移动到同一位置,就像在此视频示例中完成的那样。

希望你的帮助能引导我朝着正确的方向前进。

任何解决方案,教程,示例等都非常受欢迎。

感谢您的时间。

1 个答案:

答案 0 :(得分:1)

花了一段时间,但这里有一些东西:

import SpriteKit

class GameScene: SKScene {

var sprite = SKSpriteNode()

override func didMove(to view: SKView) {

    for _ in 1...15 {
        spawnsprite()
    }
}

func spawnsprite() {

    sprite = SKSpriteNode(color: SKColor.yellow, size: CGSize(width: 50, height: 50))
    sprite.position = CGPoint(x: (-size.width/2)+50, y: (-size.height/2)+50)
    addChild(sprite)

    let destination = CGPoint(x: (size.width/2)-50, y: (size.height/2)-50)
    let path = createCurvedPath(from: sprite.position, to: destination, varyingBy: 500)

    let squareSpeed = CGFloat(arc4random_uniform(600)) + 200
    let moveAction = SKAction.follow(path, asOffset: false, orientToPath: false, speed: squareSpeed)
    let rotateAction = SKAction.repeatForever(SKAction.rotate(byAngle: 2 * CGFloat.pi, duration: 2))
    sprite.run(SKAction.group([moveAction, rotateAction]))
}

func createCurvedPath(from start: CGPoint, to destination: CGPoint, varyingBy offset: UInt32) -> CGMutablePath {
    let pathToMove = CGMutablePath()
    pathToMove.move(to: start)
    let controlPoint = CGPoint(x: CGFloat(arc4random_uniform(offset)) - CGFloat(offset/2),
                               y: CGFloat(arc4random_uniform(offset)) - CGFloat(offset/2))
    pathToMove.addQuadCurve(to: destination, control: controlPoint)
    return pathToMove
}

override func update(_ currentTime: TimeInterval) {
    // Called before each frame is rendered
}
}

可以做很多事情来使这个更好(例如子类SKSpriteNode并使ode遵循精灵本身属性的路径),但它说明了原理。

也可以使用SKEmitter来完成。