2017-11-04 2 views
1

Ich muss einen SpriteNode über den Rahmen bewegen. Ich habe momentan das Problem, dass es Störungen hat, während ich das mache (ein paar Frames verlieren? Nicht wirklich sicher). Was ich brauche, ist, dass das Objekt horizontal ohne eine feste Richtung x Ziel fährt, so dass, wenn x durch einen Aufprall versetzt ist, das Objekt nicht versucht, zu seiner initialisierten x-Koordinate zurückzukehren. Hier ist wie der Teil des Codes sieht aus wie jetzt:schnell, bewegend SKSpriteNode?

`spaceRock.physicsBody?.affectedByGravity = false 
spaceRock.physicsBody = SKPhysicsBody(texture: (spaceRock?.texture)!, 
size:(spaceRock.size)) 
spaceRock.zPosition = 1 
spaceRock.position=CGPoint(x: xSpawnPosition, y: 
Double(self.size.height/2+(spaceRock.size.height))) 
spaceRock.physicsBody!.isDynamic = true 
spaceRock.physicsBody!.allowsRotation = true 
spaceRock.physicsBody!.categoryBitMask = 00000001 
spaceRock.physicsBody!.contactTestBitMask = 00000010 
addChild(spaceRock) 
spaceRock.physicsBody?.applyTorque(CGFloat(randTorque)) 
//spaceRock.run(SKAction.moveTo(y: -self.size.height- 
spaceRock.size.height, duration: rockTravelTime))` 

Der Kommentar ist das, was ich habe bis zu diesem Punkt zu verbrauchen.

Vielen Dank für die Hilfe!

Antwort

0

Sie mischen physikalische Simulation (SKPhysicsBody) und direkte Bewegung des Sprite (SKAction.moveTo) - obwohl Sie in der Lage sein können, dies zu tun, um Spezialeffekte zu erzielen, im Allgemeinen werden sie sich bekämpfen und Probleme verursachen.

Wenn Sie Ihre Objekte benötigen, um sich realistisch zu bewegen, verwenden Sie einen SKPhysicsBody und wenden Sie Kräfte (Drehmoment, Schub usw.) an, um sie zu bewegen. Dies ist ziemlich komplex zu programmieren und hat einen erheblichen Verarbeitungsaufwand.

Wenn Sie Ihre Sprites lieber direkt verschieben möchten, dann sollten Sie den SKPhysicsBody loswerden und Ihr moveTo sollte dann gut funktionieren.

+0

Sagen wir, ich nahm SKPhysicsBody heraus, wie würde ich für den Kontakt zwischen zwei Knoten testen? – Ari

+0

@Ari Sie können überprüfen, ob sich ihre Frames mit der Schnittpunktmethode von SKNode überschneiden. Es hängt davon ab, was Sie erreichen möchten. Physik könnte der beste Weg sein, aber dann solltest du Physik benutzen, um deine Körper zu bewegen. –

Verwandte Themen