Ich erstelle einen zufälligen Gegenstand Spinner für meine iOS App in Swift mit SpriteKit, aber derzeit ist meine Methode nicht sehr effizient, und ich bin mir fast sicher, dass es nicht der beste Weg sein kann erreichen, was ich anstrebe. Der Prozess, dem ich momentan folge, ist im Wesentlichen.
- auf Szene Last-Schleife durch eine Liste von 13 verschiedenen Elementen (in JSON gespeichert)
- eine Gruppe von Knoten erstellen die relevanten Daten, die zeigt
- jede Gruppe von Knoten zu einer zweiten Gruppe von Knoten hinzufügen, die jeweils eine beweglichen entlang der x-Achse leicht, eine lange Reihe von SKNode der (die Elemente für den Spinner)
zu schaffen - Moving diese Gruppe entlang der x-Achse, was den Eindruck es Spinnen durch die ElementeWarum dauert das Erstellen großer Mengen von SKNodes so lange?
Aber diese Methode dauert etwa zu geben 6 Sekunden, um die Szene sogar zu laden (und die Verzögerung besteht darin, die Knoten dem viel größeren Knoten hinzuzufügen: group.addChild(spinnerItem)
) und da ich erst neu bei Swift bin, bin ich mir sicher, dass es einen besseren Weg gibt, also jede Hilfe/Beratung wert aßen, um diesen Code zu verbessern, da er dringend Effizienzverbesserungen benötigt! Hier
ist die didMove Funktion ...
override func didMove(to view: SKView) {
var xPos = CGFloat(self.frame.width + 150)
var eventWeapon = weapon()
for n in 0...13{
eventWeapon = getWeapon(caseName: "chromaCase", weaponID: n)
print(eventWeapon)
let texture = createSpinnerItem(wName: "\(eventWeapon.name)", wSkin: "\(eventWeapon.skin)", wColor: "\(eventWeapon.color)")
let spinnerItem = SKSpriteNode(texture: texture)
spinnerItem.position = CGPoint(x: xPos, y: self.frame.height/2)
group.addChild(spinnerItem)
xPos = xPos + 300 * 1.2
}
self.addChild(group)
group.run(SKAction.moveBy(x: -5000, y: 0, duration: 2))
}
und die createSpinnerItem
Funktion innerhalb der verwendeten ...
func createSpinnerItem(wName: String, wSkin: String, wColor: String) -> SKTexture {
let object = SKNode()
let bGround = SKShapeNode(rectOf: CGSize(width: 300, height: 300))
bGround.fillColor = color.offWhite
bGround.strokeColor = color.gray
bGround.lineWidth = 5
object.addChild(bGround)
let titleBG = SKShapeNode(rectOf: CGSize(width: 300, height: 100))
if wColor == "blue"{ titleBG.fillColor = color.CSGOblue }
if wColor == "red"{ titleBG.fillColor = color.CSGOred }
if wColor == "pink"{ titleBG.fillColor = color.CSGOpink }
if wColor == "purple"{ titleBG.fillColor = color.CSGOpurple }
titleBG.strokeColor = color.gray
titleBG.lineWidth = 5
titleBG.position = CGPoint(x: 0, y: -150 + 50)
object.addChild(titleBG)
let weaponName = SKLabelNode()
weaponName.text = wName
weaponName.fontColor = color.white
weaponName.fontSize = 40
weaponName.fontName = "Avenir-Regular"
weaponName.verticalAlignmentMode = .center
weaponName.position = CGPoint(x: 0, y: -150 + 70)
object.addChild(weaponName)
let weaponSkin = SKLabelNode()
weaponSkin.text = wSkin
weaponSkin.fontColor = color.white
weaponSkin.fontSize = 20
weaponSkin.fontName = "Avenir-Regular"
weaponSkin.verticalAlignmentMode = .center
weaponSkin.position = CGPoint(x: 0, y: -150 + 30)
object.addChild(weaponSkin)
return object
}
Fragen - Warum setzen Leute immer Tags in ihre Titel? –
hmm? Ich glaube, ich habe meine Tags in den relevanten "Tags" -Abschnitt des Beitrags gesetzt – LuckyBowers
Sie haben "Swift" zum Titel hinzugefügt. Es besteht keine Notwendigkeit, es ist bereits in den Tags angegeben, dass Sie Swift verwenden. –