cocos2d-x getContentSize和getContentSizeInPixels区别

原文地址:http://buerkai.iteye.com/blog/1545142

cocos2d-x中使用getContentSize获得的就是逻辑点的大小,而getContentSizeInPixels获得的就是像素点的大小。 像素点和逻辑点的对应关系为:逻辑点的大小 = 像素大小 / contentScaleFactor。 


如果在高分辨率的平台上(如Iphone4),使用非高分辨率的图片资源,且设置contentScaleFactor为1.0,则IOS的Core Animation compositor 会自动拉伸非高分辨率的资源来适配, 使其在非高分辨率和高分辨率设备上的视觉效果是一样的。 

如果用户设置contentScaleFactor 为(1.0,2.0]之间的值,系统会使用用户设置的拉伸值。 

cocos2d-x提供了接口来设置contentScaleFactor, 接口为:CCDirector::setContentScaleFactor。 

了解了IOS分辨率的内幕后,再来解释一下问题产生的原因。 

问题1: 因为设置enableRetinaDisplay(false),contentScaleFactor为1.0,所以图片会被当成非高清资源,在显示的时候水平和竖直的分辨率都会被拉伸2倍。 

问题2:因为设置enableRetinaDisplay(true), contentScaleFactor为2.0,所以图片会显示成原有的像素大小。但是设置位置是使用setPosition,该接口设置的是逻辑位置。因为之前的位置是参考800*480的屏幕大小来设置的,所以当contentScaleFactor为2.0时,就相当于参考屏幕的像素大小为1600*960, 所以精灵的位置等都出现了错误。 


建议使用逻辑点 


下面解析一下坐标转换,直接贴源码: 
CCPoint CCDirector::convertToGL(const CCPoint& uiPoint) 

    CCSize s = m_obWinSizeInPoints; 
    float newY = s.height - uiPoint.y; 
    
    return ccp(uiPoint.x, newY); 


CCPoint CCDirector::convertToUI(const CCPoint& glPoint) 

    CCSize winSize = m_obWinSizeInPoints; 
    float oppositeY = winSize.height - glPoint.y; 
    
    return ccp(glPoint.x, oppositeY); 


两种坐标的X方向没有变,只变了Y方向。cocos2d里面默认的是GL坐标系,即左下角为原点ccp(0.0f.0.0f),在Y方向上向上增加,X横向增加。 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值