2015-01-11 22 views
0

好的,所以我想在這裏做一些簡單的事情,我想我已經過於複雜了 - 我需要一個if語句來說明這個對象是否離開屏幕(進入負y座標),發生了什麼事情。我無法得到它。Swift:比較if語句不工作的2個對象的位置?

我已經嘗試了很多事情,包括如果比較像這樣的數字報表,有它等於然後試圖大於/小於:

if block1.position.y == -50 { 
      savior.hidden = true 
     } 

我已經試過具有對象小於self.size.height的大小:

if block1.position.y < self.size.height { 
      savior.hidden = true 
     } 

我累了,配售對象在點關閉屏幕和具有if語句比較2對象的y位置:

if block1.position.y == ptBlock1.position.y { 
      savior.hidden = true 
     } 

沒有什麼工作。塊1,我正在使用的對象,被髮送到在SKAction具體點,所以我知道它越來越有:

var moveDownLeft = SKAction.moveTo(CGPointMake(self.size.width * 0.35,-50), duration:5.5) 
block1.runAction(moveDownLeft) 

爲什麼不if語句的工作?

編輯:

我曾經嘗試這樣做,即使BLOCK1明顯比ptBlock1低y位置,沒有任何反應:

if block1.position.y < ptBlock1.position.y { 
      savior.hidden = true 
     } 
else if block1.position.y > ptBlock1.position.y { 
savior.hidden = false 
} 
+0

可能重複的[Swift:如果語句使用.position不返回結果?](http://stackoverflow.com/questions/27882535/swift-if-statement-u sing-position-not-returns-results) – Abizern

+0

請不要複製您自己的問題,尤其是不要一個小時分開。你可以用這個細節更新原始問題。 – Abizern

+0

@Abizern對不起。我覺得我必須重做這個問題。你可以幫我解決這個問題嗎? – skyguy

回答

1

此對象熄滅屏幕(進入負y座標)

你在那裏做出錯誤的假設。關閉屏幕不一定是負的y座標。

SKNode的位置不是針對屏幕進行測量的;它是根據它的超視圖來衡量的,這是SKScene。而SKScene是比屏幕大!如果您想知道相對於屏幕發生了什麼,則需要將這些座標轉換爲屏幕座標。 (僅舉一個例子,如果您從模板中創建一個新的SpriteKit項目並登錄touchesBegan以顯示分路位置,則會發現左上角的分接頭大約爲{303,758}。座標系一個物體離屏頂部如果它的y大於大於約760.與屏幕座標對比,如果你是屏幕頂部,如果你是而不是大於0.這些都是非常不同的座標系!)

+0

好的,可以理解。但即便如此,如果不是一個數字,我不應該能夠將對象的位置與另一個對象進行比較嗎? – skyguy

+0

但上面的問題中沒有任何代碼將它與另一個對象進行比較。你僅僅將數字與數字進行比較,並且正如我剛纔所說的那樣,這個數字是完全不同的座標系統。 – matt

+0

好吧,那麼你會如何解決這個問題?我怎樣才能比較屏幕座標? – skyguy