frameSize winSize visibleSize,傻傻搞不清楚!

研究了一天都没有一个头绪的,就是这winSize和visibleSize(framSize客串)。

看了csdn上的一篇博文,里面说:

frameSize就是手机实际的分辨率
winSize就是游戏的设计分辨率
visibleSize就是winSize在手机屏幕中实际显示的部分的分辨率

可是,当我实际测试的时候,我发现三者都很混乱,我已经感觉不会再爱了!!

我通过修改AppDelegate.cpp中的代码来进行测试:
glview->setDesignResolutionSize(600, 800, ResolutionPolicy::SHOW_ALL);

然后再通过一个TextField控件来显示三者的数据:

auto vx = visibleSize.width;
auto vy = visibleSize.height;

auto wx = Director::getInstance()->getWinSize().width;
auto wy = Director::getInstance()->getWinSize().height;

auto fx = Director::getInstance()->getOpenGLView()->getFrameSize().width;
auto fy = Director::getInstance()->getOpenGLView()->getFrameSize().height;

textfield = TextField::create();
addChild(textfield,3);
textfield->setAnchorPoint(Vec2(0, 0));
textfield->setPosition(Vec2(origin.x + visibleSize.width / 2 - 40, 20));
textfield->setSize(Size(winSize.width - 40 - 100, winSize.height - 100));
textfield->ignoreContentAdaptWithSize(false);
textfield->setTextColor(Color4B::GREEN);

textfield->setString(String::createWithFormat("visible size\n%f, %f\nwinsize\n%f, %f\nframe size\n%f, %f", vx, vy, wx, wy, fx, fy)->getCString());

下面展出我的测试结果:

EXACT_FIT

FIXED_HEIGHT

FIXED_WIDTH

NO_BOARDER

SHOW_ALL

我的手机分辨率是720P(1280 x 720)

从结果看到:

首先,frame size 并不是手机的分辨率,而一直是我的设计分辨率,600 x 800

然后
FIXED_HEIGHT中,visibleSize居然是600x800而winSize却是450x800,不是说winSize是画布大小,而visibleSize是可见区域吗?不应该是两个数据颠倒一下?
FIXED_WIDTH中,visibleSize是600x800,而winSize是600x1067,可是我的画布一共也就600x800好吗……
更加无法理解的是NO_BORDER,visibleSize居然是375x500,可是从运行结果来看明明上下边都显示出来了好吗,为什么是这个分辨率,而是长宽比也与720P的手机分辨率不一样啊!

我真是醉了!先去睡了!望高手帮我解惑啊解惑!!!

:10:有人吗?

:6::6:

自己顶!:14:

:10::10::10:

说实在的。我用了两年cocos我也一直分不清这个……哈哈。只能说cocos团队太会折腾了。

:9:我也感觉,主要是也不发一个有关的官方详细教程。

这三个自己查看下 源码 ,就很好理解!!。团队都给你开源咯,你还不好好利用,省得你在那里自己测试老半天!

— Begin quote from ____

引用第7楼a008040于2015-03-08 18:45发表的 :
这三个自己查看下 源码 ,就很好理解!!。团队都给你开源咯,你还不好好利用,省得你在那里自己测试老半天! http://www.cocoachina.com/bbs/job.php?action=topost&tid=287133&pid=1253505

— End quote

好主意!

可是我看了半天也没找到啊

有人知道吗

你测试的有问题

一开始创建窗口时会调用setFrameSize()函数,创建的大小就是窗口的大小

谢谢你的回复。
能说清楚一点吗,错在哪里,应该怎么测试才是正确的?

frameSize肯定是窗口大小,这点不需要有疑问, winSize是资源的设计尺寸, 默认情况下frameSize winSize visibleSIze一样大, 但是调用了setDesignResolutionSize()函数之后这三个大小就不一样了, 除了EXACT_FIT外,其它的分辨率策略winsize跟visibleSize都是一样大小的。

1赞

我上面所说的情况是针对窗口宽高比跟设计宽高比不一样的情况,如果还不明白可以加武汉cocos2d交流群:316973436 私密我,我手绘几张图给你看就明白了