2015-06-15 86 views
0

我試圖使它,所以我的遊戲認識到,當我觸摸我的場景中的節點,除了當我使用下面的代碼,我認爲會做到我想要的,我的應用程序做沒有正確識別節點的位置。touch.locationInView不工作,因爲我認爲

我點擊了屏幕的其餘部分,打印出我正在觸摸的節點的名稱,事實證明,我的應用程序認爲節點位於與實際不同的位置(x值正確y值是非常關閉)

你看到什麼是錯的?

override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) { 
    /* Called when a touch begins */ 

    for touch in (touches as! Set<UITouch>) { 
     var TouchlocationEnd = touch.locationInView(self.view!) 
     let touchedNode = self.nodeAtPoint(TouchlocationEnd) 

     var name = touchedNode.name 

     println(name) 

     if name == "start"{ 
      var scene = PlayScene(size: self.view!.bounds.size) 
      scene.scaleMode = .AspectFill 
      self.view!.presentScene(scene) 
     } 
    } 
} 
+0

_anything_「不能正常工作」是不太可能的。你應該首先假設_you_有錯,而不是Cocoa。 – matt

+0

我沒有想到可可錯了,我想我應該用一個不同的標題 – Matt

+0

現在好了????? – Matt

回答

2

根據Apple的文檔,nodeAtPoint()函數採用「節點座標系中的一個點」。但是你發現的觀點是視圖中的位置,它不一定與你在這裏繼承的任何節點在同一座標系統中。

換句話說,我猜測「self.view」的座標系與「self」的座標系不同。嘗試類似的東西(未經測試):

let touchPoint = touch.locationInNode(self) 
let touchedNode = self.nodeAtPoint(touchPoint) 
+0

touch.locationInNode(self)而不是touch.locationInView(self.view!)是問題謝謝!我還確定,用我使用的代碼,y值由於某種原因被倒置。屏幕的頂部是0,而通常它的底部是0 ...奇怪 – Matt

+0

這是因爲UIView和SpriteKit的座標系不同 - 「y軸」走向不同的方向。 (這就是爲什麼正確使用這些便利功能是一個好主意!)很高興你把它修好了。 –

相關問題