【发布时间】:2026-01-27 17:30:01
【问题描述】:
使用 cocos2d-x 3.x 开发设备时,它会自动设置 GL 视图以适应设备。在 Windows 上的 VS2012 中,它创建了一个看似任意大小的窗口。如何设置该窗口的大小?
【问题讨论】:
标签: windows visual-studio cocos2d-x cocos2d-x-3.0
使用 cocos2d-x 3.x 开发设备时,它会自动设置 GL 视图以适应设备。在 Windows 上的 VS2012 中,它创建了一个看似任意大小的窗口。如何设置该窗口的大小?
【问题讨论】:
标签: windows visual-studio cocos2d-x cocos2d-x-3.0
我的解决方案如下。
在 AppDelegate.cpp 中:
bool AppDelegate::applicationDidFinishLaunching() {
auto director = Director::getInstance();
auto glview = director->getOpenGLView();
if(!glview) {
glview = GLView::create("My Game");
glview->setFrameSize(800, 600); // or whatever
director->setOpenGLView(glview);
}
...
}
在我的特定用例中,我将窗口大小设置为各种分辨率和纵横比以测试我的布局。我正在分享问答形式,因为我在任何地方都找不到直接的答案。
【讨论】:
#if (CC_TARGET_PLATFORM == CC_PLATFORM_WIN32) || (CC_TARGET_PLATFORM == CC_PLATFORM_MAC) 包装对setFrameSize() 的调用意味着这只会影响桌面构建...
+1 给汤姆。另外,我只想把我的答案和经验分享给大家。
记住,不要在导演设置 GL 视图“之后”设置屏幕尺寸。这会导致某些节点上的边界检测出现一些问题,尤其是 cocos2d::ui::Button 和其他有关如何创建按钮的方式。我正在使用 cocos2d-x v3.6
在这里查看我的答案: cocos2d::Menu click detection is a bit off to bottom left whenever using a custom window size
这样做会导致一些问题:
auto director = Director::getInstance();
auto glview = director->getOpenGLView();
if(!glview) {
glview = GLViewImpl::create("My Game");
director->setOpenGLView(glview);
}
director->getOpenGLView()->setFrameSize(width , height);
单击按钮,不会启动回调。这令人沮丧。可能出于您的挫败感,您单击整个屏幕并注意到屏幕的某些部分(很可能是左下部分)触发回调,就好像节点的边界框在那里一样。它甚至不匹配相关节点的位置和大小。 每当我像上面描述的那样更改屏幕尺寸时,我都可以重现该问题。所以永远不要那样做。
汤姆的答案是改变屏幕大小的正确方法。
我希望这会阻止任何人这样做。我向上帝发誓,这篇文章本可以为我节省解决这个问题的时间。
干杯!
【讨论】: