【问题标题】:cocos2d-x 3.x on Windows: How do I change the size of my game window?Windows 上的 cocos2d-x 3.x:如何更改游戏窗口的大小?
【发布时间】:2026-01-27 17:30:01
【问题描述】:

使用 cocos2d-x 3.x 开发设备时,它会自动设置 GL 视图以适应设备。在 Windows 上的 VS2012 中,它创建了一个看似任意大小的窗口。如何设置该窗口的大小?

【问题讨论】:

    标签: windows visual-studio cocos2d-x cocos2d-x-3.0


    【解决方案1】:

    我的解决方案如下。

    在 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() 的调用意味着这只会影响桌面构建...
    【解决方案2】:

    +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);
    

    单击按钮,不会启动回调。这令人沮丧。可能出于您的挫败感,您单击整个屏幕并注意到屏幕的某些部分(很可能是左下部分)触发回调,就好像节点的边界框在那里一样。它甚至不匹配相关节点的位置和大小。 每当我像上面描述的那样更改屏幕尺寸时,我都可以重现该问题。所以永远不要那样做。

    汤姆的答案是改变屏幕大小的正确方法。

    我希望这会阻止任何人这样做。我向上帝发誓,这篇文章本可以为我节省解决这个问题的时间。

    干杯!

    【讨论】: