我正在用SpriteKit构建我的第一个游戏,用Swift 3编写。
我已经花了好几个小时来完成这个"赢得明星效应",但还没有任何可接受的结果:/
此视频演示了我要寻找的效果:https://youtu.be/9CeK5_G8T9E
添加一颗或多颗恒星不是问题;问题是让它们通过不同路径向不同方向移动到同一位置,就像在此视频示例中完成的那样。
希望你的帮助能引导我朝着正确的方向前进。
任何解决方案,教程,示例等都非常受欢迎。
感谢您的时间。
答案 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来完成。