Cocos2dx:3.10+cocostudio多屏幕分辨率适配解决方案

前端之家收集整理的这篇文章主要介绍了Cocos2dx:3.10+cocostudio多屏幕分辨率适配解决方案前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
1.设计分辨率
配资源使用的分辨率大小,是1334*750。
2.屏幕分辨率
实际上用户屏幕的分辨率大小,不确定。

这里是实现代码

//
//  FixUIUtils.h
//  MapTest
//
//  Created by Alostz on 16/4/16.
//
//

#ifndef FixUIUtils_h
#define FixUIUtils_h
#include "cocos2d.h"

using namespace cocos2d;
using namespace std;

class FixUIUtils
{
public:
    FixUIUtils();
    
    ~FixUIUtils();
    
    static void init();
    
    static void setFixScale(Node *node);
    
    static void setScaleMin(Node* node);
    
    static void setScaleMax(Node* node);
    
    static void setRootNodewithFIXED(Node* node);
    
    static void fixScene(Node* node);
    
    static void fixUI(Node* node);
    
};

#endif /* FixUIUtils_h */

//
//  FixUIUtils.cpp
//  MapTest
//
//  Created by Alostz on 16/4/16.
//
//

#include <FixUIUtils.h>
static cocos2d::Size designSize = cocos2d::Size(750,1334);
static cocos2d::Size screenSize;
static float minScale;
static float maxScale;

static float xScale;

static float yScale;

FixUIUtils::FixUIUtils(){

}

FixUIUtils::~FixUIUtils(){

}

void FixUIUtils::init(){
    screenSize = Director::getInstance()->getVisibleSize();
    xScale = designSize.width / screenSize.width;
    yScale = designSize.height / screenSize.height;
    minScale = MIN(screenSize.height/designSize.height,screenSize.width/designSize.width);
    maxScale = MAX(screenSize.height/designSize.height,screenSize.width/designSize.width);
    
    log("xScale = %f * xyScale = %f \n screenSize.width = %f * screenSize.height = %f \n",xScale,yScale,screenSize.width,screenSize.height);

}

//1、先适配layout层到屏幕大小
void FixUIUtils::setFixScale(Node *node){
    auto nodeX = node->getScaleX();
    auto nodeY = node->getScaleY();
    log("setFixScale nodeX = %f * nodeX = %f \n",nodeX,nodeY);
    nodeX = nodeX * xScale;
    nodeY = nodeY * yScale;
    
    log("setFixScale nodeX = %f * nodeX = %f \n",nodeY);
    node->setScaleX(nodeX);
    node->setScaleY(nodeY);
}

//屏幕宽、高分别和设计分辨率宽、高计算缩放因子,取较(大)者作为宽、高的缩放因子。
//适用于控件的缩放
void FixUIUtils::setScaleMax(Node *node){
    auto nodeX = node->getScaleX();
    auto nodeY = node->getScaleY();
    log("setScaleMax nodeX = %f * nodeX = %f \n",nodeY);

    nodeX = nodeX * maxScale;
    nodeY = nodeY * maxScale;
    log("setScaleMax nodeX = %f * nodeX = %f \n",nodeY);

    node->setScaleX(nodeX);
    node->setScaleY(nodeY);
}

//屏幕宽、高分别和设计分辨率宽、高计算缩放因子,取较(小)者作为宽、高的缩放因子。
//适用于背景的缩放
void FixUIUtils::setScaleMin(Node *node){
    auto nodeX = node->getScaleX();
    auto nodeY = node->getScaleY();
    log("setScaleMin nodeX = %f * nodeX = %f \n",nodeY);

    nodeX = nodeX * minScale;
    nodeY = nodeY * minScale;
    log("setScaleMin nodeX = %f * nodeX = %f \n",nodeY);

    node->setScaleX(nodeX);
    node->setScaleY(nodeY);
}


void FixUIUtils::setRootNodewithFIXED(Node* node){
    auto moveX = (designSize.width - screenSize.width);
    auto moveY = (designSize.height - screenSize.height);
    node->setPosition(Point(-moveX,-moveY));
}

void FixUIUtils::fixScene(Node* node){
    fixUI(node);
    FixUIUtils::setRootNodewithFIXED(node);
}


void FixUIUtils::fixUI(Node* node){
    Vector<Node*> ChildrenList = node->getChildren();

    for (Node* child: ChildrenList) {
        log("fixUI nodeX = %d \n",child->getTag());
        FixUIUtils::setScaleMin(child);
    }
    
}



调用
//加载Cocos Studio编辑好的资源
    auto rootNode = CSLoader::createNode("test.csb");
    FixUIUtils::init();
    FixUIUtils::setFixScale(rootNode);
    FixUIUtils::fixScene(rootNode);
    this->addChild(rootNode);

猜你在找的Cocos2d-x相关文章