Cocos2d-X遊戲開發(二)

Cocos2d-X遊戲開發

  1. 程序啓動執行流程:

  1. 系統設置
  2. 窗口分辨率

AppDelegate.cpp中有個設置窗口分辨率的函數。該函數是設置了我們預想設備的屏幕大小,也就是應用程序窗口的大小。

        //設定模擬器窗體大小

        glview->setFrameSize(360, 640);    

  1. 設計分辨率(可視區域)

AppDelegate.cpp中也有個設置設計分辨率的函數。該函數是設置了我們遊戲設計時候的分辨率,也就是可視區域的大小,也就是說設計者初衷的遊戲可視區域的分辨率屏幕大小。

但是對於每個用戶來說,他們使用的設備不一定是(480/320)的,比如手機有大有小。

而後面的ResolutionPolicy::SHOW_ALL,意思是按照原比例(480/320)進行放縮以適配實際屏幕大小。

//設定分辨率

glview->setDesignResolutionSize(720, 1280,ResolutionPolicy::SHOW_ALL);

  1. 五種適配模式

setFrameSize()是設置了窗口大小(即屏幕的實際大小),而這個參數只是爲了我們開發時作爲模擬參照,在實際手機上運行時,手機的屏幕大小是我們無法設置的。

而屏幕適配的關鍵在於setDesignResolutionSize(),通過它來設置可視區域的分辨率以及屏幕適配模式。該函數的前兩個參數爲分辨率(即屏幕長寬比例),而最後一個參數則是適配的模式。

  1. 適配模式
  • ResolutionPolicy::EXACT_FIT :拉伸變形,使鋪滿屏幕。
  • ResolutionPolicy::NO_BORDER :按比例放縮,全屏展示不留黑邊。

(長寬中小的鋪滿屏幕,大的超出屏幕)

  • ResolutionPolicy::SHOW_ALL :按比例放縮,全部展示不裁剪。

長寬中大的鋪滿屏幕,小的留有黑邊)

  • ResolutionPolicy::FIXED_WIDTH :按比例放縮,寬度鋪滿屏幕。
  • ResolutionPolicy::FIXED_HEIGHT :按比例放縮,高度鋪滿屏幕。
  1. 計算方法

假設:屏幕分辨率(fWidth,fHeight) ; 設計分辨率(dWidth,dHeight)。

放縮因子:k1 = fWidth/dWidth ; k2 = fHeight/dHeight。

則適配後的分辨率大小如下:

  • EXACT_FIT :( dWidth * k1, dHeight * k2)
  • NO_BORDER :( dWidth * max(k1,k2) , dHeight * max(k1,k2) )
  • SHOW_ALL :( dWidth * min(k1,k2) , dHeight * min(k1,k2) )
  • FIXED_WIDTH:( dWidth * k1 , dHeight * k1)
  • FIXED_HEIGHT:( dWidth * k2 , dHeight * k2)

 

  1. 背景圖自適應:
  2. 註釋掉以下代碼:

    // 設置設計解決方案

    glview->setDesignResolutionSize(designResolutionSize.width,designResolutionSize.height,ResolutionPolicy::NO_BORDER);

    autoframeSize =glview->getFrameSize();

    // 如果框架的高度大於中等大小的高度。

    if (frameSize.height > mediumResolutionSize.height)

    {

        director->setContentScaleFactor(MIN(largeResolutionSize.height / designResolutionSize.height,largeResolutionSize.width /designResolutionSize.width));

    }

    // 如果框架的高度大於小尺寸的高度。

    elseif (frameSize.height > smallResolutionSize.height)

    {

        director->setContentScaleFactor(MIN(mediumResolutionSize.height / designResolutionSize.height,mediumResolutionSize.width /designResolutionSize.width));

    }

    // 如果框架的高度小於中等大小的高度。

    else

    {

        director->setContentScaleFactor(MIN(smallResolutionSize.height / designResolutionSize.height,smallResolutionSize.width /designResolutionSize.width));

    }

  1. 在AppDelegate.cpp中設定模擬窗體大小與分辨率:

//設定模擬器窗體大小

glview->setFrameSize(360, 640);

//設定分辨率

glview->setDesignResolutionSize(720, 1280,ResolutionPolicy::SHOW_ALL);

  1. 在StartScene.cpp中設置背景圖

    autosprite =Sprite::create("StartScene.jpg");

    //函數作用是設置錨點,也就是二位座標系的起點

    //錨點是按照百分比設置的,0—1,0.5,0.5則表示中心點

    sprite->setAnchorPoint(Point(0.5, 0.5));

    sprite->setPosition(Vec2(visibleSize.width / 2 + origin.x,visibleSize.height / 2 +origin.y));

    //添加精靈到窗體

    this->addChild(sprite, 0);

運行結果:

發佈了39 篇原創文章 · 獲贊 3 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章