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

Convert screen coordinates to game coordinates

本文关键字:游戏 坐标 转换 屏幕坐标      更新时间:2023-10-16

我使用EventListenerMouse处理来自用户的输入,EventListenerTouchOneByOne用于移动设备。

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

然而,它似乎并不关心屏幕缩放。例如,如果我在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();

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

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

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