5

在 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的坐标系不同..这很反直觉..对吗?

谢谢 !

4

5 回答 5

4

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

cocos2d 2.0 上的正确方法是

CGPoint uiKitPoint = [touch locationInView:touch.view];
CGPoint cocos2dPoint = [[CCDirector sharedDirector] convertToGL:uiKitPoint];
于 2012-10-04T11:51:54.790 回答
1

这个 cocos2d 教程可能会对你有所帮助

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

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

于 2012-10-04T07:04:12.207 回答
0

Cocos2D 已经可以为您处理这个问题。CCDirector 对此有一些方法。请看一下这个较旧的帖子

于 2012-10-04T07:19:48.390 回答
0

通常,对于大多数与图形相关的应用程序,倾向于将 (0, 0) 放置在左下角(Mac 就是这种情况) - 在 iOS 上,它位于左上角我注意到了。

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

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

于 2012-10-04T07:22:56.320 回答
0

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

[[CCDirector sharedDirector] convertToGL];

对于 UIkit -> cocos2d

于 2012-10-04T07:23:42.623 回答