cocos2d-x 3.x в Windows: как изменить размер окна игры?

При разработке с использованием cocos2d-x 3.x для устройства он автоматически устанавливает представление GL в соответствии с устройством. В VS2012 на окнах создается окно, казалось бы, произвольного размера. Как установить размер этого окна?


person Tom    schedule 04.06.2014    source источник


Ответы (2)


Мое решение было следующим.

В 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);
    }
    ...
}

В моем конкретном случае я устанавливаю размеры окон для различных разрешений и соотношений сторон, чтобы проверить свои макеты. Я делюсь форматом вопросов и ответов, потому что я нигде не мог найти прямого ответа на этот вопрос.

person Tom    schedule 04.06.2014
comment
Обертывание вызова setFrameSize() с помощью #if (CC_TARGET_PLATFORM == CC_PLATFORM_WIN32) || (CC_TARGET_PLATFORM == CC_PLATFORM_MAC) означает, что это влияет только на сборку рабочего стола... - person trojanfoe; 26.02.2015

+1 к Тому. Кроме того, я просто хотел бы поделиться своим ответом и опытом со всеми.

Помните, не устанавливайте размер экрана "ПОСЛЕ" того, как директор установил вид GL. Это вызывает некоторые проблемы с определением границ на некоторых узлах, в первую очередь cocos2d::ui::Button и другими способами создания кнопок. Я использую cocos2d-x v3.6

Проверьте мой ответ здесь: cocos2d::Обнаружение щелчка меню немного смещается в нижний левый угол при использовании нестандартного размера окна

Такой способ вызовет некоторые проблемы:

auto director = Director::getInstance();
auto glview = director->getOpenGLView();
if(!glview) {
    glview = GLViewImpl::create("My Game");
    director->setOpenGLView(glview);
}

director->getOpenGLView()->setFrameSize(width , height);

Нажатие на кнопку не запускает обратный вызов. Что расстраивает. Вероятно, из-за вашего разочарования вы также щелкаете по всему экрану и замечаете, что есть некоторая часть экрана (скорее всего, нижняя левая часть), которая запускает обратный вызов, как будто там находится ограничивающая рамка узла. Он даже не соответствует положению и размеру рассматриваемого узла. Я могу воспроизвести проблему всякий раз, когда меняю размер экрана, как описано выше. Так что никогда не делайте этого так.

Ответ Тома - правильный способ изменения размера экрана.

Я надеюсь, что это удержит любого, кто делает это таким образом. Клянусь Богом, этот пост мог бы сэкономить мне кучу времени на решение этой проблемы.

Ваше здоровье!

person Neon Warge    schedule 21.06.2015