2012-10-04 103 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点 –