将屏幕坐标转换为游戏坐标

时间:2014-08-07 07:58:54

标签: c++ cocos2d-x

我正在使用来自用户的处理输入,在桌面上使用EventListenerMouse,在移动设备上使用EventListenerTouchOneByOne。他们工作得很好。

记录的坐标是相对于屏幕坐标的。文档here描述了如何将它们转换为游戏坐标。

然而,它似乎并不关心屏幕缩放。例如,如果我在AppDelegate中将设计分辨率设置为以下内容:

glview->setDesignResolutionSize(1280, 720, ResolutionPolicy::FIXED_WIDTH);

让我们说,在运行时,游戏在具有不同分辨率的设备上运行:

if(!glview)
{
    glview = GLView::createWithRect("My Game", Rect(0, 0, 800, 450));
    director->setOpenGLView(glview);
}

现在,捕获的触摸/鼠标坐标将相对于屏幕(800x450)。如何将它们转换为游戏坐标(1280x720)? cocos2d-x是否支持射线拾取等?

编辑:目前,这就是我正在做的事情。

point = convertToNodeSpace(point);
auto director = Director::getInstance();
auto view = director->getOpenGLView();
point.x /= view->getScaleX();
point.y /= view->getScaleY();

1 个答案:

答案 0 :(得分:2)

在AppDelegate.cpp中,只需添加以下代码:

glview-> setDesignResolutionSize(1280,720,ResolutionPolicy :: SHOW_ALL);

现在设备分辨率并不重要。导演将为所有设备设置上述分辨率。