cocos2dx android winSize 由来

//float width, float height 设计分辨率
//resolutionPolicy 适配策略  这里用kResolutionFixedHeight:高度固定

 

void CCEGLViewProtocol::setDesignResolutionSize(float width, float height, ResolutionPolicy resolutionPolicy)
{
    CCAssert(resolutionPolicy != kResolutionUnKnown, "should set resolutionPolicy");
    
    if (width == 0.0f || height == 0.0f)
    {
        return;
    }

    //设置设计分辨率
    m_obDesignResolutionSize.setSize(width, height);
    
    //计算缩放比率  m_obScreenSize(屏幕大小)
    m_fScaleX = (float)m_obScreenSize.width / m_obDesignResolutionSize.width;
    m_fScaleY = (float)m_obScreenSize.height / m_obDesignResolutionSize.height;
    
    if (resolutionPolicy == kResolutionNoBorder)
    {
        m_fScaleX = m_fScaleY = MAX(m_fScaleX, m_fScaleY);
    }
    
    if (resolutionPolicy == kResolutionShowAll)
    {
        m_fScaleX = m_fScaleY = MIN(m_fScaleX, m_fScaleY);
    }

    //我们这里使用的,高度固定的意思,就是高度的缩放比例固定,根据高度缩放比率计算宽度
    //这里会根据我们设置的设计分辨率,然后根据适配策略,调整设计分辨率
    if ( resolutionPolicy == kResolutionFixedHeight) {
    	m_fScaleX = m_fScaleY;
    	m_obDesignResolutionSize.width = ceilf(m_obScreenSize.width/m_fScaleX);
    }

    if ( resolutionPolicy == kResolutionFixedWidth) {
    	m_fScaleY = m_fScaleX;
    	m_obDesignResolutionSize.height = ceilf(m_obScreenSize.height/m_fScaleY);
    }

    // calculate the rect of viewport    
    float viewPortW = m_obDesignResolutionSize.width * m_fScaleX;
    float viewPortH = m_obDesignResolutionSize.height * m_fScaleY;

    m_obViewPortRect.setRect((m_obScreenSize.width - viewPortW) / 2, (m_obScreenSize.height - viewPortH) / 2, viewPortW, viewPortH);
    
    m_eResolutionPolicy = resolutionPolicy;
    
	// reset director's member variables to fit visible rect
	//下面说明:
    CCDirector::sharedDirector()->m_obWinSizeInPoints = getDesignResolutionSize();
    CCDirector::sharedDirector()->createStatsLabel();
    CCDirector::sharedDirector()->setGLDefaultValues();
}


通过这句赋值:

 m_obWinSizeInPoints = m_pobOpenGLView->getDesignResolutionSize();

我们平时使用的接口,获取winSize:

 CCSize CCDirector::getWinSize(void)
{
    return m_obWinSizeInPoints;
}

举例:

小米2s 720*1280

设计分辨率 640*960

固定高度,缩放比率:

720/640 = 1.125

计算宽度为:1280/1.125 = 1138

由此得到我们的winSize为:640*1138

通过打印信息得到:

03-16 20:49:22.579: D/cocos2d-x debug info(8833): [LUA-print] =====winSize  width=====1138
03-16 20:49:22.579: D/cocos2d-x debug info(8833): [LUA-print] =====winSize  height=====640






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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值