麻烦官方人员详细解释一下N个Size

cc.director.getVisibleSize();//获取运行场景的可见大小
cc.director.getWinSize();//获取视图的大小,以点为单位
cc.director.getWinSizeInPixels();//获取视图大小,以像素为单位
cc.view.getFrameSize();//Returns the frame size of the view
cc.view.getViewPortRect();//Returns the view port rectangle.
cc.view.getVisibleSize();//Returns the visible area size of the view port.
cc.view.getVisibleSizeInPixel();//Returns the visible area size of the view port.
cc.view.getDesignResolutionSize();//Returns the designed size for the view. Default resolution size is the same 

我在canvas节点的设计分辨率是480x800,然后用以下代码在Chrome中进行测试:

cc.log("cc.director.getVisibleSize:",cc.director.getVisibleSize().toString());
cc.log("cc.director.getWinSize:",cc.director.getWinSize().toString());
cc.log("cc.director.getWinSizeInPixels:",cc.director.getWinSizeInPixels().toString());
cc.log("cc.view.getFrameSize:",cc.view.getFrameSize().toString());
cc.log("cc.view.getViewPortRect:",cc.view.getViewPortRect().toString());
cc.log("cc.view.getVisibleSize:",cc.view.getVisibleSize().toString());
cc.log("cc.view.getVisibleSizeInPixel:",cc.view.getVisibleSizeInPixel().toString());
cc.log("cc.view.getDesignResolutionSize:",cc.view.getDesignResolutionSize().toString());

得到数据如下:

=============Default=============
cc.director.getVisibleSize:      (480.00, 800.00)
cc.director.getWinSize:          (480.00, 800.00)
cc.director.getWinSizeInPixels:  (480.00, 800.00)
cc.view.getFrameSize:            (480.00, 800.00)
cc.view.getViewPortRect:         (0.00, 0.00, 480.00, 800.00)
cc.view.getVisibleSize:          (480.00, 800.00)
cc.view.getVisibleSizeInPixel:   (480.00, 800.00)
cc.view.getDesignResolutionSize: (480.00, 800.00)
截图工具测量大小:                  (480.00, 800.00)
=============Iphone4=============
cc.director.getVisibleSize:      (533.33, 800.00)
cc.director.getWinSize:          (533.33, 800.00)
cc.director.getWinSizeInPixels:  (533.33, 800.00)
cc.view.getFrameSize:            (320.00, 480.00)
cc.view.getViewPortRect:         (0.00, 0.00, 320.00, 480.00)
cc.view.getVisibleSize:          (533.33, 800.00)
cc.view.getVisibleSizeInPixel:   (320.00, 480.00)
cc.view.getDesignResolutionSize: (480.00, 800.00)
截图工具测量大小:                  (320.00, 480.00)
=============Iphone6 Plus=============
cc.director.getVisibleSize:      (450.00, 800.00)
cc.director.getWinSize:          (450.00, 800.00)
cc.director.getWinSizeInPixels:  (450.00, 800.00)
cc.view.getFrameSize:            (414.00, 736.00)
cc.view.getViewPortRect:         (0.00, 0.00, 414.00, 736.00)
cc.view.getVisibleSize:          (450.00, 800.00)
cc.view.getVisibleSizeInPixel:   (414.00, 736.00)
cc.view.getDesignResolutionSize: (480.00, 800.00)
截图工具测量大小:                  (414.00, 736.00)

1.cc.director.getVisibleSize();//获取运行场景的可见大小
不理解,它和我用截图工具测量的不一样啊??
2.cc.director.getWinSize();//获取视图的大小,以点为单位
cc.director.getWinSizeInPixels();//获取视图大小,以像素为单位
不理解,它们两个数值都一样啊,你这里的视图大小指的什么????
3.cc.view.getFrameSize();//Returns the frame size of the view
不理解,???
4.cc.view.getViewPortRect();//Returns the view port rectangle.
不理解,???
5.cc.view.getVisibleSize();//Returns the visible area size of the view port.
cc.view.getVisibleSizeInPixel();//Returns the visible area size of the view port.
了解,也只有这一个和截图大小一致,两VisibleSize与VisibleSizeInPixel这两个不一样,单位不同
6.cc.view.getDesignResolutionSize();//Returns the designed size for the view. Default resolution size is the same
了解,和场景中Canvas设置的一样

9赞

其实这贴好

可惜没人啊!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

我也被这些问题搞得头疼 ,期待官方组能给予一个合理的解释

从来就没弄明白。。。

1赞

我自己都很懵逼,Cocos2d-x 继承过来的 API…… 有些 size 好像是某些平台特有的……

visibleSize 是基于设计分辨率的坐标系的,这样能够便于直接把值用于游戏中。会根据屏幕适配方式而调整宽高比例。

getVisibleSizeInPixel 同 visibleSize,不过是以像素为单位而不是设计分辨率

getWinSize 获取视图的大小,以点为单位。2.0 中已去除。

getWinSizeInPixels 获取视图大小,以像素为单位(这里的像素指的是资源分辨率)

getFrameSize 获取屏幕物理分辨率

getDesignResolutionSize 就是你设置的设计分辨率

getViewPortRect 不太清楚这个……

1赞

:13:

给跪了

:joy:

:joy:

:joy:

老早就有这个疑问了,哈哈 也是一个一个去试的

谢邀!(好吧我是自己跑过来的)
刚好今天也折腾了下这个问题,正好整理分享一下,如有错误欢迎指出。。。

cocos 里边是有好多个 size、rect,搞得我也一脸懵逼,大概梳理一下就是这几个:
winSize (inPixels), visibleSize (inPixels), designResolusionSize 和 frameSize

下面说明下这几个东西的关系:
winSize = winSizeInPixels = visibleSIze, 实际开发的计算中,大多数情况下就用这一个 visibleSize !!!
visibleSizeInPixels 是 visibleSize 的基础上乘以各种适配策略下的缩放比例,是的就是你的实际截图测量的大小
designResolusionSize 是 canvas 组件下设置的设计分辨率
frameSize 是 cc.game.container 的 width height

除了各种 size 还有各种 rect,好像也不多,就两个:
viewportRect, visibleRect

visibleRect 是实际开发的计算中用到的
viewportRect 是 gl 下的 viewport 概念, 只不过他的 x y 值是相对于 游戏坐标系下进行计算的

======| 分割线 |===========================

总结一下,其实大多数情况下,只要关心 visibleSize 就好了~

8赞

顶楼上全部

谢谢回答,这些东西不明白的人应该还是很多的,否则快半年的帖子也不会顶上来
你所说的WinSize==VisibleSize,但是在我上面的数据getWinSizeInPixels()与getVisibleSizeInPixel()是不一样的,应该是不一样的吧

仔细看,
visibleSizeInPixels 跟
winSize winSizeInPixels visibleSIze
是不一样的

从2dx时代开始就不明白的说 ·.· :slightly_smiling: ·.·

1赞

我知道啊,单看接口名理解就是单位不一样嘛,如果WinSize==VisibleSize那按照你说的乘以各种适配策略下的缩放比例之后,也应该是一样的

太JB乱了,删除掉吧,留一两个用用的就行了

嗯嗯,现在的实现 里,winSize 跟 winSizeInPixels 是一个东西,2.0 准备移除里,所以这个可以不用管他,容易混淆