cocos2dx ResolutionPolicy

FrameSize 参数,在游戏运行时,我们可以通过 CCEGLView::sharedOpenGLView()->getFrameSize();如果在手机上运行,那么不同分辨率将会得到不同的值

  1. CCEGLView::sharedOpenGLView()->setDesignResolutionSize(720, 480, kResolutionShowAll);
  2. CCEGLView::sharedOpenGLView()->setDesignResolutionSize(720, 480, kResolutionExactFit);

CCSize winSize = CCDirector::sharedDirector()->getWinSize();

 

  kResolutionExactFit 牺牲了画质而保持了全屏显示,对画面进行了拉伸

  kResolutionShowAll 为了保持设计画面比例对四周进行留黑边处理,使得不同比例下画面不能全屏

kResolutionNoBorder

其一:游戏画面全屏;其二:保持设置游戏时的宽高比例,相比 kResolutionShowAll 有所区别的是,为了填补留下的黑边,将画面稍微放大,以至于能够正好补齐黑边

CCEGLView::sharedOpenGLView()->getScaleY()

========

获取设备屏幕实际分辨率需要使用CCSize szFrame = pEGLView->getFrameSize();

kResolutionNoBorder: 看不到黑边,实际就是宽高等比缩放,但缩放比例取宽比和高比之中大的那一个。

kResolutionShowAll:全部显示,可以理解为保证内容都显示在屏幕之内,实际也是宽高等比缩放,但缩放比例取宽比和高比之中小的那一个

setPosition(const CCPoint &position);
这里传入的参数不是像素,也和传统的point有不同,它指的是在designResolutionSize参照下的坐标

CCDirector::sharedDirector()->getWinSize();   获取的是designResolutionSize
CCDirector::sharedDirector()->getWinSizeInPixels();  获取的是getWinSize*contentScaleFactor之后的值

开发者可以通过CCDirector::sharedDirector()->setContentScaleFactor()来设置contentScaleFactor,这个系数可以理解为
图片原始尺寸和designResolutionSize的比值,这个比值将用来绘制图片。
如果只是一套资源按照不同屏幕分辨率缩放,可以不用理会

使用kResolutionNoBorder策略时要注意的
CCSize szVisible = CCDirector::sharedDirector()->getVisibleSize();
CCPoint posVisible = CCDirector::sharedDirector()->getVisibleOrigin();
使用该策略时,因为标准背景图可能会超出屏幕,所以设置位置时需要已一个可视矩形为基准。
可以这样理解,szVisible就是你在实际设备上能看到的有效区域的宽高,posVisible就是这个有效区域的起始坐标,和szVisible构成一个可视矩形,一般来说这个可视矩形是设计分辨率下可视矩形的子集

原文地址:https://www.cnblogs.com/anjsoft/p/3270155.html