Cocos2dx游戏屏幕适配

a. 几种适配模式

1. kResolutionUnKnown
无模式,会出现各种奇怪的问题,一般不采用这个

2. kResolutionExactFit
游戏画面宽高都完全适配手机屏幕尺寸

优点:游戏画面完全适配手机屏幕,使用方便
缺点:画面变形,画质损失

3. kResolutionFixedHeight 
游戏画面高度完全适配手机屏幕高度
缺点:游戏画面过宽时会出现移出屏幕外的情况
 游戏画面过窄时会出现黑边的情况
 
4. kResolutionFixedWidth
同上,只是把高度改成宽度

5. kResolutionNoBorder
优点:画面全部展示且不会出现黑边
缺点:游戏画面将有一份露出屏幕之外

6. kResolutionShowAll  
优点:游戏画面全部展示
缺点:游戏画面会出现黑边

b. 最佳解决方案

kResolutionNoBorder和kResolutionShowAll两个模式结合,取各自的优点
1. 游戏画面全部展示 
2. 游戏画面不会出现黑边
3. 游戏画面不会有露出屏幕之外情况


c. 几个尺寸概念

1. frameSize : 手机屏幕尺寸大小
CCSize frameSize = Director::getInstance()->getOpenGLView()->getFrameSize(); 

2. winSize : 游戏设计尺寸大小
CCSize winSize = Director::getInstance()->getWinSize();

3. lsSize : 游戏在手机屏幕上显示的可见区域
是winSize的等比例缩小

d. 具体代码

//手机尺寸大小
CCSize frameSize = CCEGLView::sharedOpenGLView()->getFrameSize(); 

//游戏在手机屏幕上显示的可见区域, 这里假设480*800
CCSize lsSize = CCSizeMake(480, 800); 
 
//屏幕尺寸和显示尺寸比值
float scaleX = (float) frameSize.width / lsSize.width; 
float scaleY = (float) frameSize.height / lsSize.height; 
 
//定义 scale 变量,取比值偏大的一个作为放大值
float scale = 0.0f;
if (scaleX > scaleY) { 
 scale = scaleX / (frameSize.height / (float) lsSize.height); 
} else { 
 scale = scaleY / (frameSize.width / (float) lsSize.width); 


//游戏设计尺寸大小, 屏幕坐标也是根据这个而来 
CCEGLView::sharedOpenGLView()->setDesignResolutionSize(lsSize.width * scale, 

 lsSize.height * scale, kResolutionNoBorder); 


    PS: 这个地址有更详细的介绍  http://www.cocoachina.com/game/20130513/6180.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值