Ich habe ein Problem mit Physikkörper. Ich habe ungefähr 20 Knoten, die nach dem Zufallsprinzip zum Ansehen kommen. Jedes Mal, wenn der Knoten laicht stelle ich die Physik des Objekts, wie folgt aus:Wie man physicsBody auf dem Laichen von spritekitnodes setzt
func showObject(){
let texture = SKTexture(imageNamed: "A.png")
object = SKSpriteNode(texture: texture)
object.name = "A"
object.position = CGPoint(x: 0, y: self.frame.width)
object.setScale(0.7)
object.zPosition = 2
object.run(moveAndRemove)
object.physicsBody = SKPhysicsBody(texture: texture, size: texture.size())
object.physicsBody?.categoryBitMask = PhysicsCategory.Object
object.physicsBody?.collisionBitMask = PhysicsCategory.Object2
object.physicsBody?.contactTestBitMask = PhysicsCategory.Object2
object.physicsBody?.affectedByGravity = false
object.physicsBody?.isDynamic = true
addChild(object)
}
Ich denke, das ist nicht optimal, weil physicsBody jedes Mal gesetzt, wenn der Knoten hervorgebracht wird. Aus diesem Grund habe ich manchmal wenig Flimmern - niedrigere fps wenn App läuft. Wenn physicsBody ausgeschaltet ist, ist alles in Ordnung. Ich habe eine einfache Frage. Wie stelle ich den Physikkörper für alle 20 Knoten nach dem Spielstart ein und spawne sie einfach, ohne physicsBody neu zu erstellen. Ich versuche, Physikkörper mit Textur direkt zu SKView zu setzen, aber danach stürzt app mit Nullfehler ab.
Danke für jeden Tipp.
Es ist mein Laich:
let SpawnObject = SKAction.run({
() in
let randomFunc = [self.showObject, self.showObject1.......]
let randomResult = Int(arc4random_uniform(UInt32(randomFunc.count)))
randomFunc[randomResult]()
})
let delay1 = SKAction.wait(forDuration: 0.9)
let SpawnDelay1 = SKAction.sequence([SpawnObject,delay1])
let SpawnDelayForever1 = SKAction.repeatForever(SpawnDelay1)
self.run(SpawnDelayForever1)
let distance = CGFloat(self.frame.height + 200)
let moveObject = SKAction.moveBy(x: -distance, y: 0, duration: TimeInterval(0.004 * distance))
let removeObject = SKAction.removeFromParent()
moveAndRemove = SKAction.sequence([moveObject,removeObject])
Beim Laichen wird der physicBody neu gezeichnet, sogar für diejenigen, die Sie zuvor erstellt haben. Eine Möglichkeit, dies zu tun, besteht darin, sie NICHT aus der Szene zu entfernen, sondern sie vom Bildschirm wegzubewegen, damit der Benutzer sie nicht sehen kann. Wenn Sie sie wieder benötigen, verschieben Sie sie zurück auf den Bildschirm. –