2016-05-09 3 views
0

Swift - SpriteKitÄndern collisionBitMask nach y-Wert auf- oder absteigend

Ich mache mein erstes Spiel und ich habe meine var Player = SKSpriteNode() und auch var platform = SKNode()

ich erkennen soll, wenn der Spieler in wächst Y-Richtung, so kann ich collisionBitMask ausschalten. Dadurch wird es möglich, beim Springen durch Plattformen hochzuspringen und wenn er fällt, wird er auf den Plattformen landen.

So kann ich so etwas wie:

if player.position.y = increasing { 
Player.physicsBody?.collisionBitMask = nil 
}else{ 
Player.physicsBody?.collisionBitMask = PhysicsCategory.Platform 
} 

ich um ausgesehen haben und nicht finden können, was ich bin nach, es sei denn, ich bin für die falsche Sache suchen.

Vielen Dank.

Bearbeiten: Gelöst check EmilioPelaez Antwort, zeigt nur, wie ich es hier leicht geändert habe.

Deklariert var lastY: CGFloat? außerhalb der Funktionen mit allen anderen Variablen.

override func update(currentTime: CFTimeInterval) { 
     /* Called before each frame is rendered */ 
     // Checking y direction 
      if Player.position.y > lastY { 
       // Player increasing in y direction 
       Player.physicsBody?.collisionBitMask = PhysicsCategory.Ground 
      } else { 
       // Player decreasing in y direction 
       Player.physicsBody?.collisionBitMask = PhysicsCategory.Ground | PhysicsCategory.Platform 
      } 

     lastY = Player.position.y 
} 

Antwort

1

Grundsätzlich möchten Sie den aktuellen Wert mit dem Wert im vorherigen Frame vergleichen.

Der einfachste Weg, dies zu tun, besteht darin, eine Variable zu erstellen, in der Sie den vorherigen Wert speichern und diesen für den Vergleich verwenden können. Sobald Sie den Vergleich durchgeführt haben, speichern Sie den aktuellen Wert in dieser Variablen, um den nächsten Frame zu verwenden.

Etwas wie folgt aus:

var lastY: CGFloat? 

// in your function 
if let lastY = lastY { 
    if player.y > lastY { 
    // player.y is increasing 
    } else { 
    // player.y is decreasing 
    } 
} 
lastY = player.y 
+0

erstaunlich, funktioniert perfekt. Ich änderte es sehr leicht, so schlecht es in meine Frage zu bearbeiten. Danke vielmals! – Steve

Verwandte Themen