2012-06-25 19 views
0

我想將觸摸位置轉換爲我瓷磚遊戲中的世界座標。有了這個代碼,我點擊了屏幕的右側(使我的性格走在瓷磚遊戲,背景走得慢到左):如何使用convertToWorldSpace計算觸摸位置?

- (void)ccTouchesEnded:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    for(UITouch *touch in touches) { 
     CGPoint location = [touch locationInView: [touch view]]; 

     location = [[CCDirector sharedDirector] convertToGL: location]; 
     CGPoint test = [self convertToWorldSpace:location]; 

     CCLOG(@"test : %.2g", test.x); 

test日誌給我:

50,72,1E + 02,+ 2.6E 02,4.2E + 02,(然後下降)3.2E + 02,9.5,-1.9e + 02等

沒有人知道爲什麼? 我想計算觸摸的「真實」座標,以便我知道角色何時必須繼續(點擊其實際位置右側),或者他必須轉身向後走。 (點擊上的實際位置左)

感謝您的幫助

回答

1

所有你正在用cocos2d做的事,你在單一的OpenGL視圖中做。所以,如果你處理的場景或層場景大小的觸摸,就足以把這些線

CGPoint location = [touch locationInView: [touch view]]; 
    location = [[CCDirector sharedDirector] convertToGL: location]; 

獲得觸摸位置relatieve到你的屏幕。 convertToWorldSpace只是將本地節點座標轉換爲世界座標

+0

謝謝,但這給了我在x軸的最大值480,所以參考是屏幕尺寸。當我使用convertToWorldSpace,它到480然後下降在負值...我想有這樣的東西:480,然後500,630,850等,如果我繼續點擊我的角色的位置的權利,你知道如何做到這一點? – Paul

+1

那麼你需要將它轉換爲不是用於世界空間,而是用於大視野的空間。像[myScrollableView convertToNodeSpace:location]; – Morion

1

這些數字印刷看起來很好,但你使用%g格式說明,它根據Apple's documentation關於這個問題,這是否:

64位浮點數(double),如果指數小於-4或大於或等於精度,則以%e的形式打印,否則以%f的樣式顯示。

除非這是你想要的,否則你應該使用%f而不是用科學記數法產生任何數字。

+0

感謝傑克! '%f'確實比較好,對於我的問題,上面的代碼給了我在x軸上的最大值480,所以引用是屏幕大小。當我使用convertToWorldSpace時,它會到480然後在負值下降...我想有這樣的東西:480,然後500,630,850等,如果我繼續點擊我的角色的位置的權利。你會知道如何做到這一點? – Paul

+1

@Paul要做到這一點,您需要引用您的主視圖(實際滾動的視圖),然後執行類似'[mainView convertToNodeSpace:location]'的操作。 –