cocos2d-x 2.2.6 屏幕自适配

为什么屏幕适配,暂且不说,先看下目前手机的屏幕分辨率,如下:

480*800     // 比如windows phone以及中高端Android机

480*854     //  WFVGA,是480*800的加长版

540*960     // HTC

640*960         // 经典版的iphone

1136*960           // iphone5

1280*720           // 传说中的HD

1280*800    // 三星的9220

1024*768    // ipad

如果我想让我的游戏在这些设备上运行,因为屏幕的不一致而设定多张不同的资源图片显示是不可取的,所以,屏幕适配是一个很好的方式。

在模拟器中,一般设定屏幕的大小,我们会使用main.cpp中:

CCEGLView* eglView = CCEGLView::sharedOpenGLView();
// 设定屏幕大小
eglView->setFrameSize(960, 640);     

 

然而,在程序中,假如,我有张480*320的图片,屏幕大小设定为960*640,其效果如下:

这样的效果,是不能满足要求的,所以在cocos2d-x的AppDelegate的AppDelegate::applicationDidFinishLaunching()中,我们可以添加如下代码:

CCEGLView* pEGLView = CCEGLView::sharedOpenGLView();

pEGLView->setDesignResolutionSize(float width, float height, ResolutionPolicy resolutionPolicy);

针对于setDesignResolutionSize,其,第一个和第二个参数为分辨率的宽高,第三个参数是适配模式,主要有以下几种:

kResolutionExactFit,        // 拉伸变形,使其铺满屏幕
kResolutionNoBorder,      // 按比例放缩,全屏展示不留黑边(长宽中小的铺满屏幕,大的超出屏幕)
kResolutionShowAll,        // 按比例放缩,全部展示不裁剪(长宽中大的铺满屏幕,小的留有黑边)
kResolutionFixedHeight,   // 按比例放缩,宽度铺满屏幕
kResolutionFixedWidth,    // 按比例放缩,高度铺满屏幕

一般情况下,获取分辨率的宽高,我们会使用

CCDirector::sharedDirector()->getWinSize()获取分辨率的宽高

屏幕适配的原理,说通俗点讲就是获取屏幕宽高比率和背景图片宽高比率相对比的,所以我采取的方式是这样的:

// 屏幕适配(原理:根据屏幕比率和背景图片比率比较的大小)

ResolutionPolicy eResolutionType = kResolutionUnKnown;   // 适配模式
    CCSize winSize = CCSizeMake(480, 320);
    float designRate = winSize.width / winSize.height;               // 参照比率

    float WinWidth = CCDirector::sharedDirector()->getWinSize().width;

    float WinHeight = CCDirector::sharedDirector()->getWinSize().height;
    float WinRate = WinWidth / WinHeight;                // 屏幕比率

    if (WinRate > designRate)
        eResolutionType = kResolutionFixedWidth;
    else if(WinRate < designRate)
        eResolutionType = kResolutionFixedHeight;
    else if(WinRate == designRate)
        eResolutionType = kResolutionNoBorder;
    pEGLView->setDesignResolutionSize(winSize.width, winSize.height, eResolutionType);

 

最后运行效果:

 

参考:http://blog.csdn.net/chinahaerbin/article/details/39586281

参考:http://my.oschina.net/ffs/blog/305680?fromerr=vvswf7WK

 

转载于:https://www.cnblogs.com/SkyflyBird/p/5023739.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值