【问题标题】:Cocos2d coordinate systemCocos2d坐标系
【发布时间】:2012-10-04 06:25:37
【问题描述】:

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

谢谢!

【问题讨论】:

    标签: iphone ios cocos2d-iphone drawing


    【解决方案1】:

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

    cocos2d 2.0上正确的方法是

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

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          【解决方案4】:

          通常,对于大多数与图形相关的应用程序,倾向于将 (0, 0) 放在左下角(Mac 就是这种情况) - 而在 iOS 上,它位于左上角如您所见。

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

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

          【讨论】:

            【解决方案5】:

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

            [[CCDirector sharedDirector] convertToGL];
            

            对于 UIkit -> cocos2d

            【讨论】:

            • convertToNodeSpace 将不在当前节点坐标系中的点转换为自身。例如,节点坐标系的世界坐标(但仍为 openGL 格式)。
            • 通过添加 converttogl 方法更新我的答案
            • 还是不正确。转换为节点空间不适用于 uikit 点
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多