切换场景设置新的窗口大小

我在切换场景时,需要更改原来的窗口大小,使用Director::getInstance()->getOpenGLView()->setFrameSize()函数设置新的窗口大小,但是发现新的窗口的精灵大小比例变化了,包括背景图和旁边的帧提示信息,我又加入 Director::getInstance()->getOpenGLView()->setDesignResolutionSize(size,ResolutionPolicy::NO_BORDER)函数,发现帧信息正常了,但是场景内精灵的大小和位置(相对位置)仍然不对,所以想请教下各位大佬切换场景时改变窗口大小的正确方法。

dd,来个大佬吧

可能是setDesignResolutionSize只改变了投影矩阵,而观察空间位置没变导致的。

哪应该怎么改呢?

直接对scene缩放

你的意思调用setscaleFactor()函数吗,我试过,也跟上面情况一样。我的理解是就是创建一个新的窗口,而不是对原来的窗口进行各种操作,但是看了下,cocos好像不支持这个,觉得很奇怪,就像是从登陆界面到游戏界面应该是两个不同的窗口吧。

啥需求啊,要在场景创建完成后改变,窗口大小

是转换到另一个场景,我需要另一个场景窗口大一点。

我试了一下,不知道是不是bug,setFrameSize会让视口缩小到左下角,在渲染前调用glViewpor设置视口大小就会正常。。。。

直接setframesize就是不对,好像整个场景的节点大小比例全改变了,glviewpor?是哪个方法?

glviewpor 这个是opengl的方法,你可以把下面缩放改一下:
void GLView::setViewPortInPoints(float x , float y , float w , float h)
{
experimental::Viewport vp((float)(x * _scaleX + _viewPortRect.origin.x),
(float)(y * _scaleY + _viewPortRect.origin.y),
(float)(w * _scaleX),
(float)(h * _scaleY));
Camera::setDefaultViewport(vp);
}

刚试了下,应该是不行,而且我看返回是对摄像头参数的设置,应该是为了改变窗口的视点什么的。其实感觉如果是手游制作的话确实不需要改变窗口大小,但是想要开发pc端游的话,窗口的调整又是必须的,我还百度了下cocos适不适合做pc端,感觉不是特别好。

相机apply时会设置gl视口的像素值分辨率,用的就是DefaultViewport,你只需要调用setFrameSize不需要改DesignResolutionSize,保证camera的_defaultViewport和你的DesignResolutionSize大小相同,坐标和原点一致

好的,我自己再慢慢调一下,谢了。