Auf Anweisung von diesem Posten hier; Swift-Making an SKNode simply "move forward" on an angle Ich habe diesen Code geschrieben, um einen Winkel randomisiert und mein Sprite in diesem Winkel anfahren haben:Swift-SKSpriteNode Geschwindigkeit ändert sich nicht
func setDegrees() {
let ball1Degrees:UInt32 = arc4random_uniform(360)
if ball1Degrees > 300 {
ball2Degrees = Int(ball1Degrees) - 360
ball3Degrees = Int(ball1Degrees) - 300
}
else if ball1Degrees > 240 {
ball2Degrees = Int(ball1Degrees) + 60
ball3Degrees = Int(ball1Degrees) - 360
}
else {
ball2Degrees = Int(ball1Degrees) + 60
ball3Degrees = Int(ball1Degrees) + 120
}
}
func myFunction() {
ball1.position = CGPoint(x: 0, y: 0)
ball2.position = CGPoint(x: 0, y: 0)
ball3.position = CGPoint(x: 0, y: 0)
setDegrees()
if ball1Degrees < 90 {
ball1.physicsBody?.velocity = CGVector(dx: 1, dy: tan(Double(ball1Degrees) * (.pi/180)))
}
if ball1Degrees == 90 {
ball1.physicsBody?.velocity = CGVector(dx: 1, dy: 0)
}
if ball1Degrees > 90 && ball1Degrees <= 180 {
ball1.physicsBody?.velocity = CGVector(dx: -1, dy: tan(Double(180 - ball1Degrees) * (.pi/180)))
}
if ball1Degrees > 180 && ball1Degrees <= 270 {
ball1.physicsBody?.velocity = CGVector(dx: -1, dy: -tan(Double(ball1Degrees - 180) * (.pi/180)))
}
if ball1Degrees > 270 && ball1Degrees <= 0 {
ball1.physicsBody?.velocity = CGVector(dx: 1, dy: -tan(Double(360 - ball1Degrees) * (.pi/180)))
}
if ball2Degrees < 90 {
ball2.physicsBody?.velocity = CGVector(dx: 1, dy: tan(Double(ball2Degrees) * (.pi/180)))
}
if ball2Degrees == 90 {
ball2.physicsBody?.velocity = CGVector(dx: 1, dy: 0)
}
if ball2Degrees > 90 && ball2Degrees <= 180 {
ball2.physicsBody?.velocity = CGVector(dx: -1, dy: tan(Double(180 - ball2Degrees) * (.pi/180)))
}
if ball2Degrees > 180 && ball2Degrees <= 270 {
ball2.physicsBody?.velocity = CGVector(dx: -1, dy: -tan(Double(ball2Degrees - 180) * (.pi/180)))
}
if ball2Degrees > 270 && ball2Degrees <= 0 {
ball2.physicsBody?.velocity = CGVector(dx: 1, dy: -tan(Double(360 - ball2Degrees) * (.pi/180)))
}
if ball3Degrees < 90 {
ball3.physicsBody?.velocity = CGVector(dx: 1, dy: tan(Double(ball3Degrees) * (.pi/180)))
}
if ball3Degrees == 90 {
ball3.physicsBody?.velocity = CGVector(dx: 1, dy: 0)
}
if ball3Degrees > 90 && ball3Degrees <= 180 {
ball3.physicsBody?.velocity = CGVector(dx: -1, dy: tan(Double(180 - ball3Degrees) * (.pi/180)))
}
if ball3Degrees > 180 && ball3Degrees <= 270 {
ball3.physicsBody?.velocity = CGVector(dx: -1, dy: -tan(Double(ball3Degrees - 180) * (.pi/180)))
}
if ball3Degrees > 270 && ball3Degrees <= 0 {
ball3.physicsBody?.velocity = CGVector(dx: 1, dy: -tan(Double(360 - ball3Degrees) * (.pi/180)))
}
}
myFunction()
Aber wenn mein Spiel ausgeführt wird, keine der oben genannten Geschwindigkeitsänderungen erscheinen angewendet werden wird. Die Neupositionierung in der Mitte des Bildschirms wird erfolgreich ausgeführt, und es gibt sogar ein paar Skalierungs-SKAction-Befehle, die hier nicht besonders relevant sind, die gut funktionieren. Warum ändert sich die Geschwindigkeit nicht? Ist es zu viel Code für den Simulator meines Computers? Oder habe ich irgendwo einen Fehler gemacht? Ich wäre für jede Rückmeldung dankbar.
Vielen Dank im Voraus.
Haben Sie vergessen, die Physic zu erstellen Körper? Ändern Sie 'physicsBody?' In 'physicsBody!'. Schau, ob es abstürzt. Wenn dies der Fall ist, bedeutet das, dass Sie vergessen haben, die Physikkörper zu erstellen. – Sweeper
Im Attribute-Inspektor meines Sprites in meinem GameScene.sks habe ich Physik-Körper vom Typ Bounding Circle zugewiesen, aber trotzdem passiert nichts. Muss ich etwas hinzufügen, um sie in meinem GameScene.swift zu erstellen? Oder gibt es im Attribut-Inspektor eine Einstellung, die ich sicherstellen muss, dass eine bestimmte Art und Weise festgelegt ist, dass es verschoben werden darf? –
Ich habe auch nur Ihren Vorschlag versucht, und nein, es stürzt nicht ab? Irgendwelche anderen Ideen? –