Buduję swoją pierwszą grę za pomocą Swift i SpriteKit i chcę dodać tło. Gra toczy się w kosmosie, więc chciałem mieć gwiazdy w tle poruszające się z różną prędkością. Obecnie zamierzam uzyskać wygląd 3D, dzięki czemu większe gwiazdy poruszają się po ekranie szybciej niż mniejsze. Czy istnieje skuteczny sposób, aby to zrobić zamiast tworzyć podklasę SKNode w ten sposób i dodawać ją jako dziecko na początku DidMoveToView
? Wygląda na to, że ta metoda jest dość intensywna, ale pomyślałem, że wypróbuję ją, zanim powtórzę ten sam obraz w kółko.Animacja tła z głębią w SpriteKit
class BackGroundAnimation:SKNode{
let theView:SKView
init(aView:SKView){
theView = aView
super.init()
animate()
}
func animate(){
for _ in 1...200{
let randomSize = random(1, max: 3)
var randomPosx = random(1,max: 1000)
randomPosx = randomPosx/1000.0
var randomPosy = random(1,max: 1000)
randomPosy = randomPosy/1000.0
let star:SKSpriteNode = SKSpriteNode(texture:starTexture)
star.setScale(randomSize/60.0)
star.position = CGPoint(x:(theView.scene?.size.width)! * randomPosx,y:(theView.scene?.size.width)! * randomPosy)// (self.scene.size.width)*randomPosx, y:(self.scene.size.height) * randomPosy)
//star.position = CGPoint(x: 200,y: 200)
star.physicsBody = SKPhysicsBody(circleOfRadius: star.size.width/2)
star.physicsBody?.collisionBitMask = 0
star.physicsBody?.categoryBitMask = 0
star.physicsBody?.contactTestBitMask = 0
star.physicsBody?.linearDamping = 0
star.physicsBody?.velocity = CGVector(dx:1 * randomSize, dy:0)
star.name = "star"
//addChild(star)
self.addChild(star)
self.moveToParent(self.scene!)
}
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
Każda pomoc będzie wielki.
Uważam, że metoda, z której obecnie korzystasz, jest właściwym sposobem implementacji tego typu tła.Jednakże, jeśli zauważysz ekstremalne opóźnienie i/lub powolne działanie (z powodu tła) na prawdziwych urządzeniach (nie symulatorach), spróbuję zepsuć ich części i przenieść je do części tła, które naprawdę potrzebujesz – Nik
Możesz użyć cząstki i po prostu mają 3 warstwy cząsteczek renderujące z różnymi prędkościami i to wszystko. Zrzut ekranu z tego, co mam na myśli: https://twitter.com/JozemiteApps/status/678734299521155072. –
Sprawdź w SKEmitterNode –