2016-05-09 63 views
0

斯威夫特更改collisionBitMask - SpriteKit根據Y值升序或降序

:我將我的第一場比賽,我有我的var Player = SKSpriteNode()var platform = SKNode()

我想檢測當玩家正在增加y方向,所以我可以關閉collisionBitMask。因此,當跳躍和跌倒時能夠跳躍穿過平臺,他將登陸平臺。

所以我可以有這樣的:

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

我已經看了看周圍,並不能找到我所追求的,除非我找錯了東西。

非常感謝。

編輯:解決檢查EmilioPelaez回答,只是顯示我如何在這裏稍微改變它。

聲明var lastY: CGFloat?以外的所有其他變量的函數。

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 
} 

回答

1

基本上,你想要做的是將當前值與前一幀的值進行比較。

最簡單的方法是創建一個變量,您可以在其中存儲以前的值,然後使用它進行比較。完成比較後,將當前值存儲在該變量中以用於下一幀。

事情是這樣的:

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

驚人,完美的作品。我改變了它非常輕微,所以生病編輯我的問題。非常感謝! – Steve