【问题标题】:Convert screen coordinates to game coordinates将屏幕坐标转换为游戏坐标
【发布时间】:2014-08-14 00:54:37
【问题描述】:

我在桌面上使用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();

【问题讨论】:

    标签: c++ cocos2d-x


    【解决方案1】:

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

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

    现在设备分辨率无关紧要。导演将为所有设备设置上述分辨率。

    【讨论】:

    • 对不起,SHOW_ALL 不是我想要的。我需要FIXED_WIDTH