При разработке с использованием cocos2d-x 3.x для устройства он автоматически устанавливает представление GL в соответствии с устройством. В VS2012 на окнах создается окно, казалось бы, произвольного размера. Как установить размер этого окна?
cocos2d-x 3.x в Windows: как изменить размер окна игры?
Ответы (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);
}
...
}
В моем конкретном случае я устанавливаю размеры окон для различных разрешений и соотношений сторон, чтобы проверить свои макеты. Я делюсь форматом вопросов и ответов, потому что я нигде не мог найти прямого ответа на этот вопрос.
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);
Нажатие на кнопку не запускает обратный вызов. Что расстраивает. Вероятно, из-за вашего разочарования вы также щелкаете по всему экрану и замечаете, что есть некоторая часть экрана (скорее всего, нижняя левая часть), которая запускает обратный вызов, как будто там находится ограничивающая рамка узла. Он даже не соответствует положению и размеру рассматриваемого узла. Я могу воспроизвести проблему всякий раз, когда меняю размер экрана, как описано выше. Так что никогда не делайте этого так.
Ответ Тома - правильный способ изменения размера экрана.
Я надеюсь, что это удержит любого, кто делает это таким образом. Клянусь Богом, этот пост мог бы сэкономить мне кучу времени на решение этой проблемы.
Ваше здоровье!