在官方的cpp-empty-test中的 AppDelegate.cpp中 的applicationDidFinishLaunching 函数中 添加代码如下。
auto director = Director::getInstance();
auto glview = director->getOpenGLView();
if(!glview) {
glview = GLView::create(“Cpp Empty Test”);
director->setOpenGLView(glview);
}
director->setOpenGLView(glview);
glview = director->getOpenGLView();
//在这里设置了 Size的默认值。
if(glview)
{
#if (CC_TARGET_PLATFORM == CC_PLATFORM_WIN32) || (CC_TARGET_PLATFORM == CC_PLATFORM_LINUX) || (CC_TARGET_PLATFORM == CC_PLATFORM_MAC)
glview->setFrameSize(560.0f,994.0f);
#else
auto frmsize = glview->getFrameSize();
#endif
glview->setDesignResolutionSize(640.0f,1136.0f,(ResolutionPolicy)2);//ResolutionPolicy::EXACT_FIT);
}
然后,在HelloWorldScene.cpp 中的 menuCloseCallback 函数中添加如下代码:
//按钮点下后设置宽高。 下面注释里模仿游戏界面窗口改变。
auto direct = Director::getInstance();
auto glview = direct->getOpenGLView();
float Width = 560.0f;
float height = 994.0f * 1.2f; // 乘以1.2
glview->setFrameSize(Width ,height);
float width1 = 640.f;
float height1 = 1136.0f;
glview->setDesignResolutionSize(width1, height1, (ResolutionPolicy)2);
这个时候运行程序,点击menuclose 按钮, 会发现屏幕大小改变了。然后再点击menuclose按钮发现没有了反应,响应位置到了按钮图片的正下方的位置。
然后去修改源文件 CCGLViewProtocol.cpp 121行的代码。
_viewPortRect.setRect((_screenSize.width - viewPortW) / 2, (_screenSize.height - viewPortH) / 2, viewPortW, viewPortH);
替换为:
if (_resolutionPolicy == ResolutionPolicy::SHOW_ALL)
{
_viewPortRect.setRect((_screenSize.width - viewPortW) / 2, (_screenSize.height - viewPortH) / 5, viewPortW, viewPortH);
}else
{
_viewPortRect.setRect((_screenSize.width - viewPortW) / 2, (_screenSize.height - viewPortH) / 2, viewPortW, viewPortH);
}
然后点击按钮后再次点击按钮 发现 这次按钮对了。 请问这是不是一个bug?