关于cocos2dx中的各种尺寸
2014-07-08 14:46 onlyDIABLO 阅读(2268) 评论(0) 收藏 举报关于cocos2dx中的各种尺寸自己的一点体会
首先看CCEGLView类中的函数
1.sharedOpenGLView()
通过这个函数获的CCEGLView的对象而在此对象初始化的时候
m_obScreenSize.width = m_obDesignResolutionSize.width = [[EAGLView sharedEGLView] getWidth];
m_obScreenSize.height = m_obDesignResolutionSize.height = [[EAGLView sharedEGLView] getHeight];
默认获取了当前设备的屏幕分辨率并赋值给m_obScreenSize(屏幕分辨率)和m_obDesignResolutionSize(设计分辨率),如果代码中没有调用过setDesignResolutionSize()函数,那么设计分辨率默认和当前设备的屏幕分辨率是相等的,缩放比例m_fScaleX/m_fScaleY当然就是1。如果设置了setDesignResolutionSize()函数,那么在这个函数中将会对一系列的状态进行变换,通过你的设计分辨率和显示模式改变缩放比例,同时改变视口大小,这也就是在一些情况下屏幕会出现黑边的原因,因为得到的视口不能填满整个设备屏幕。其中的缩放比例m_fScaleX/m_fScaleY是代表如何将你设计的窗口绘制到屏幕分辨率上,而CCDirector中的缩放因子m_fContentScaleFactor是控制如何将你的图片资源绘制到你的窗口上的(后面会有解释)。
2.getFrameSize()
这个函数返回了屏幕分辨率的大小,在真机中自然是恒定的,当然在调试程序的时候可以利用setFrameSize()函数设置成某一分辨率大小来模拟各种各样的安卓分辨率尺寸。
3.getDesignResolutionSize()
获得设置的设计分辨率的尺寸,如果没有设置过那么获得值和getFrameSize()相同
4.getVisibleSize()
获得在当前显示模式下设计分辨率的可见范围,只有在显示模式为kResolutionNoBorder的情况下才有所不通,因为其他情况下都是将设计分辨率全部显示,而kResolutionNoBorder的时候会造成窗口拉伸而超出屏幕的显示范围。
5.getVisibleOrigin()
和上面的函数一样只有在显示模式为kResolutionNoBorder时候不返回(0,0),而是返回屏幕原点对应的设计分辨率坐标值。
在CCDirector的getVisibleSize()/getVisibleOrigin()函数就是通过类内的CCEGLView指针m_pobOpenGLView去调用上述两个函数去获得数值,其实就是CCDirector通过m_pobOpenGLView去喝openGLES打交道。
在看看CCDirector中的函数
1.getWinSize()
返回的m_obWinSizeInPoints就是设置的设计分辨率的数值,也就是openGL的view尺寸(不是像素个数!因为一个点不一定对应一个像素点),如果你调用过setDesignResolutionSize()函数,那么在setDesignResolutionSize()中有如下代码CCDirector::sharedDirector()->m_obWinSizeInPoints = getDesignResolutionSize();就是将设置的设计分辨率传递给m_obWinSizeInPoints保存,如果没调用过则在CCDirector::sharedDirector()->setOpenGLView(pEGLView);的时候有如下代码m_obWinSizeInPoints = m_pobOpenGLView->getDesignResolutionSize();显然这时m_obWinSizeInPoints也等于设备分辨率。
2.getWinSizeInPixels()
返回的是openGL的view的像素尺寸,这个值和m_obWinSizeInPoints和m_fContentScaleFactor有关,而m_fContentScaleFactor就是一个点对应的像素点个数。
这个值可以理解为你的图片资源和你的设计分辨率的比值,这个值是用来绘制图片的,也就只控制怎么将图片资源绘制到你的窗口分辨下。如果是用一套资源按不同的屏幕分辨率缩放可以不用理会。多套资源的情况下通过调用setContentScaleFactor()去设置,例子可以参考cocos2dx的helloCpp。可以发现在绘制图片时就是通过宏CC_CONTENT_SCALE_FACTOR()->#define CC_CONTENT_SCALE_FACTOR() CCDirector::sharedDirector()->getContentScaleFactor()去控制。
3.getVisibleSize()/getVisibleOrigin()
就是通过CCEGLView指针m_pobOpenGLView去调用CCEGLView对应的函数。
浙公网安备 33010602011771号