SpriteKit 将节点动画到特定位置

tha*_*har 1 xcode sprite-kit swift3

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

我已经尝试了几个小时来实现这种“获胜明星效应”,但还没有任何可接受的结果:/

我正在寻找的效果在此视频中演示:https://youtu.be/9CeK5_G8T9E

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

希望您的帮助引导我走向正确的方向。

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

谢谢你的时间。

Ste*_*ves 7

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

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
}
}
Run Code Online (Sandbox Code Playgroud)

有很多方法可以让这个变得更好(例如,子类 SKSpriteNode 并使节点遵循精灵本身的属性的路径),但它说明了原理。

也可以使用 SKEmitter 来完成。