2012-10-04 152 views
5

在cocos2d中,座標系非常簡單..左下角是(0,0)。每當我設置好任何東西的位置。Cocos2d座標系

可以說一層是TouchEnabled。

時,即時通訊設定我的精靈的位置,這是很好..

[crab setPosition:ccp(20, 50)]; 

,但如果我得到的x和觸摸的y座標(並假設我點擊了精靈..):

- (void)ccTouchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    NSLog(@"Touches began!"); 
    NSArray *touchArray = [touches allObjects]; 
    UITouch *one = [touchArray objectAtIndex:0]; 
    pointOne = [one locationInView:[one view]]; 
    CCLOG(@"points are: %f and %f", pointOne.x, pointOne.y); 
} 

y座標與cocos2d的座標系建議相反,y從上到下增加!

所以即時假設視圖的座標系統是不同於mac的coord系統..這是相當直觀的..是否正確?

謝謝!

回答

4

OpenGL的使用(0,0)底部的左而iOS因此UIKit中,其處理這些觸摸使用左上角爲(0,0 )。很容易轉換你的觀點,你只需要記住去做。

cocos2d上的正確方法2。0是

CGPoint uiKitPoint = [touch locationInView:touch.view]; 
CGPoint cocos2dPoint = [[CCDirector sharedDirector] convertToGL:uiKitPoint]; 
0

的Cocos2D已經可以處理這個問題爲你的左上角。 CCDirector有這方面的一些方法。請看看這個較舊的post

0

通常,對於大多數與圖形相關的應用程序,傾向於在左下角放置(0,0)(Mac就是這種情況) - 在iOS上,它位於頂部 - 如你所見,留下。

當你處理輸入與茯苓,您可以快速地轉換過來使用convertTouchToNodeSpace方法(至少1.x的 - 我還沒有與2.0足夠的發揮 - 但我相信這是convertToNodeSpace有一個快速的文件檢查)。然後這將進行必要的轉換以給你正確的座標。 (注意:我需要挖掘一些其他代碼來檢查 - 但我無法記住我的頭頂是否也包括相機偏移量 - 我會在我能得到時進行編輯我的演示代碼&確認。)

0

觸摸來自UIKit,左上角是(0,0),所以您需要將它轉換爲cocos2d的座標系,然後再處理這些數據。

[[CCDirector sharedDirector] convertToGL]; 

對於UIKit的 - >的cocos2d

+0

convertToNodeSpace將不在當前節點座標系中的點轉換爲自身。例如世界座標(但仍然以openGL格式)到節點座標系。 –

+0

通過添加converttogl方法更新我的答案 – lukaswelte

+0

這仍然不正確。轉換爲節點空間不適用於uikit點 –