cocos2d-x屏幕 适配(2)

来源:未知 责任编辑:责任编辑 发表时间:2014-03-23 22:25 点击:

cocos2d-x添加了一个新的方法,可以非常简便地让cocos2d根据屏幕尺寸的大小做自适配。

方法名:

    virtual void setDesignResolutionSize(float width, float height, ResolutionPolicy resolutionPolicy);

该方法所传的参数中,前两个参数width、height,指的是开发者在设计界面时默认设计的尺寸。例如:开发者在设计界面时以iphone5为准,则width和height就是568*320;若是以iphone4为准,则width和height就是480*320;以此类推。

第三个参数resolutionPolicy指的是cocos2d在缩放时需要遵守的规则。ResolutionPolicy这个自定义结构如下:




kResolutionExactFit是指cocos2d缩放的时候不考虑画面失真,直接用画面填充满整个屏幕

kResolutionNoBorder是指cocos2d缩放的时候尽量顶满画面,如果因此有超出画面的部分,就会把超出的部分切除掉(举例来说:如果设计大小是568*320,在480*320大小的屏幕上自适配的时候,就会把宽度超出的部分切除)

kResolutionShowAll是指cocos2d缩放的时候显示所有的画面,如果有填不满屏幕的地方就会显示黑条。

这三种规则各有优缺点,具体使用哪种规则需要考量项目的需要进行合理的选择。

然而,需要特别注意的一点是:setDesignResolutionSize和enableRetina这两个方法是不可以同时使用的。这即意味着使用自适配的时候是不可以做高清版的。

如果查看cocos2d-x源代码,可以看到在setDesignResolutionSize方法中有一句代码:

    CCAssert(m_bIsRetinaEnabled == false, "can not enable retina while set design resolution size!");

在下认为这是因为高清模式下图片资源都是进行了缩小的,所有的坐标都是定义的point,而不是pixel。因此高清模式和自适配可能有某些冲突存在。(以上只是笔者的猜测,不靠谱勿怪)

总之,如果想要使用自适配,就必须在项目一开始就放弃高清。如果要做高清版,目前看来就只能自己根据屏幕尺寸的比例变化设置setContentScaleFactor,这一部分的设置方法这里就不展开了。


另外,笔者在刚开始使用自适配功能时,误以为开发时要把UI元素的位置坐标和大小都写成相对于屏幕大小的一定比例。例如:

    CCSprite* avatarSprite = CCSprite::create("avatar.png");
    avatarSprite->setPosition(ccp(winSize.width * 0.000878, winSize.height * 0.653125));
    addChild(avatarSprite);

但实际上这是没有必要的。自适配功能是直接调整整个CCDirector的画布大小,因此任何添加到CCDirector中的元素都会被缩放相应的比例,没有必要再特意将坐标写成相对屏幕比例的模式。


具体参考:http://www.cnblogs.com/eagley/archive/2013/05/31/3110785.html
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
用户名: 验证码:点击我更换图片
最新评论 更多>>

推荐热点

  • cocos2d-x学习笔记(19)--label 、label atlas
  • cocos2d-x学习笔记(23)--地图的使用3--CCTMXLayer
  • Cocos2d-x学习(一):HelloWorld
  • cocos2dx在xcode下开发,编译到android上(2)
  • cocos2d 设置屏幕默认方向
  • Cocos2d-x 2.0 之 Actions “三板斧” 之一
  • cocos2d-x学习笔记(22)--地图的使用2(TMX) --Z-Order、AnchorPoi
  • cocos2d-x学习笔记(18)--游戏打包(windows平台)
  • cocos2d-x学习笔记(16)--spritesheet(精灵表单)
网站首页 - 友情链接 - 网站地图 - TAG标签 - RSS订阅 - 内容搜索
Copyright © 2008-2015 计算机技术学习交流网. 版权所有

豫ICP备11007008号-1