cocos2dx 螢幕自適應

2021-06-27 12:58:21 字數 4398 閱讀 6835

cocos2d-x 螢幕自適應

cocos2dx-2.0版本對多解析度適配提供了很好的支援,使用起來比1.0版本要簡單些,1.0版本的適配可以參考

這篇博文。

1. 做2.0版本的適配首先需要了解下面這些知識。

(1)適配策略

2.0版本提供了三種適配策略:

kresolutionshowall:整個遊戲介面是可見的,會按原始比例進行縮放,不變形,但兩側可能會留有黑邊,不鋪滿螢幕。

可以根據自己的要求選擇。

(2)visiblesize和visibleorigin

getvisiblesize:表示獲得視口(可視區域)的大小,如果designresolutionsize跟螢幕尺寸一樣大,則getvisiblesize等於getwinsize。

getvisibleorigin:表示可視區域的起點座標,這在處理相對位置的時候非常有用,確保節點在不同解析度下的位置一致。

(3)designresolutionsize

designresolutionsize是乙個比較重要的概念,其實2.0版本的適配跟1.0版本原理差不多,都是按比例進行縮放。這個designresolutionsize表示設計方案,就是你的遊戲完美支援的解析度方案,一般根據資源的尺寸來定,自適配時會按照這個解析度計算出縮放因子。因此,這個值也應該是動態的,如果是橫屏遊戲則高度肯定是鋪滿螢幕的,寬度也要盡可能的鋪滿螢幕,因此應該選擇寬高比最大的作為設計解析度,下面的demo會給出使用方法。

(4)設定相對位置

在遊戲中使用相對位置設定座標的好處是顯而易見的,這樣就不需要為每個解析度都定義一套座標了。首先得定義一些參考點,引擎的testcpp例子中就提供了一種方法,以螢幕上可視區域的9個點作為參考點,相當於在該矩形內寫乙個公尺字,這9個點分別是:左上、左、左下、下、右下、右、右上、上、中心。

#include "cocos2d.h"

typedef struct tagresource

resource;

//可用的資源尺寸

static resource smallresource = ;

static resource mediumresource = ;

static resource largeresource = ;

//設計方案

static cocos2d::ccsize smalldesignresolutionsize = cocos2d::ccsizemake(480.0f, 320.0f);

static cocos2d::ccsize mediumdesignresolutionsize = cocos2d::ccsizemake(1024.0f, 768.0f);

static cocos2d::ccsize largedesignresolutionsize = cocos2d::ccsizemake(2048.0f, 1536.0f);

//縮放因子,主要給文字標籤使用

#define scale_factor (cocos2d::cceglview::sharedopenglview()->getdesignresolutionsize().width / smallresource.size.width)

#endif :

else if (framesize.height > smallresource.size.height)

else

pdirector->setdisplaystats(true);

pdirector->setanimationinterval(1.0 / 60);

ccscene *pscene = helloworld::scene();

pdirector->runwithscene(pscene);

return true;}

(3)建立visiblerect.h和visiblerect.cpp檔案,封裝了獲取那9個點座標的函式,比較簡單。**如下:

visiblerect.h

#ifndef __visiblerect_h__

#define __visiblerect_h__

#include "cocos2d.h"

using_ns_cc;

class visiblerect;

#endif

visiblerect.cpp

#include "visiblerect.h"

ccrect visiblerect::s_visiblerect;

void visiblerect::lazyinit()}

ccrect visiblerect::getvisiblerect()

ccpoint visiblerect::left()

ccpoint visiblerect::right()

ccpoint visiblerect::top()

ccpoint visiblerect::bottom()

ccpoint visiblerect::center()

ccpoint visiblerect::lefttop()

ccpoint visiblerect::righttop()

ccpoint visiblerect::leftbottom()

ccpoint visiblerect::rightbottom()

(4)修改helloworldscene.cpp的init函式,使用相對位置設定座標。

bool helloworld::init()

ccmenuitemimage *pcloseitem = ccmenuitemimage::create(

"closenormal.png",

"closeselected.png",

this,

menu_selector(helloworld::menuclosecallback));

pcloseitem->setposition(ccpadd(visiblerect::rightbottom(),

ccp(-pcloseitem->getcontentsize().width/2, pcloseitem->getcontentsize().height/2)));

ccmenu* pmenu = ccmenu::create(pcloseitem, null);

pmenu->setposition(ccpointzero);

this->addchild(pmenu, 1);

cclabelttf* plabel = cclabelttf::create("hello world", "arial", scale_factor * 24);

plabel->setposition(ccpadd(visiblerect::top(),

ccp(0, -plabel->getcontentsize().height)));

this->addchild(plabel, 1);

ccsprite* psprite = ccsprite::create("helloworld.png");

psprite->setposition(visiblerect::center());

this->addchild(psprite, 0);

ccsprite *plogosprite = ccsprite::create("icon.png");

plogosprite->setanchorpoint( ccp(0, 0.5) );

plogosprite->setposition(ccpadd(visiblerect::left(), ccp(50, 0)));

this->addchild(plogosprite, 0);

return true;

}

(5)建立視窗,main.cpp的主要內容:

cceglview* eglview = cceglview::sharedopenglview();

//eglview->setframesize(2048, 1536);

//eglview->setframesize(480, 320);

//eglview->setframesize(800, 480);

//eglview->setframesize(1024, 768);

//eglview->setframesize(1280, 800);

eglview->setframesize(1280, 768);

//eglview->setframesize(960, 640);

eglview->setframezoomfactor(0.5f);

ok,到此為止,**部分已經完成

cocos2dx 螢幕設定

聲 明 一 設定啥 首先是換豎屏,然後還有個比較重要的,就是自適屏。二 橫豎換屏 1.開啟main.cpp檔案 找到eglview setframesize 320,480 這裡設定成你要的解析度,用於開發。2.生成android專案後修改androidmanifest.xml檔案 android ...

cocos2d x螢幕適配

第一,對於螢幕適配問題,首先必須理解幾個基本的概念。framesize 實 際上就是裝置的原始解析度,開發環境中可以通過cceglview sharedopenglview setframesize 來設 置裝置的解析度大小,當然也可以可以通過cceglview sharedopenglview g...

cocos2dx 螢幕設定

聲 明 一 設定啥 首先是換豎屏,然後還有個比較重要的,就是自適屏。二 橫豎換屏 1.開啟main.cpp檔案 找到eglview setframesize 320,480 這裡設定成你要的解析度,用於開發。2.生成android專案後修改androidmanifest.xml檔案 android ...