Cocos2d坐标系

时间:2012-10-04 06:25:38

标签: iphone ios cocos2d-iphone drawing

在cocos2d中,坐标系非常简单。左下角是(0,0)。 无论什么时候我都设置好任何位置。

假设一个图层是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的坐标系不同..这是非常直观的..这是正确的吗?

谢谢!

5 个答案:

答案 0 :(得分:4)

OpenGL使用左下角的(0,0)而iOS,因此处理触摸的UIKit使用左上角为(0,0)。很容易转换你的观点,你只需要记住这样做。

cocos2d 2.0的正确方法是

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

答案 1 :(得分:1)

这个cocos2d教程可能会帮到你

http://www.gamefromscratch.com/post/2012/06/08/Cocos2D-HTML-Tutorial-3All-about-sprites-and-positioning.aspx

但一般来说,在cocos2d点(0,0)是屏幕的左下角

答案 2 :(得分:0)

Cocos2D已经可以为您处理。 CCDirector有一些方法。请查看旧的post

答案 3 :(得分:0)

通常情况下,对于大多数与图形相关的应用程序,有一种趋势是在左下角放置(0,0)(这是Mac的情况) - 在iOS上,它位于左上角正如你所注意到的那样。

当您使用Cocos处理输入时,您可以使用 convertTouchToNodeSpace 方法快速转换它(至少使用1.x - 我没有玩过足够的2.0 - 但我相信从快速文档检查中得到 convertToNodeSpace 。然后,这将进行必要的转换,为您提供正确的坐标。

(注意:我需要挖掘一些我的其他代码来仔细检查 - 但我不记得我的头脑是否也计算相机偏移量 - 当我可以到达时我会编辑我的演示代码&确认。)

答案 4 :(得分:0)

Touches来自UIKit,其左上角是(0,0),因此在处理此数据之前,您需要将其转换为cocos2d的坐标系。

[[CCDirector sharedDirector] convertToGL];

对于UIkit - > cocos2d的