使用cocos2d-x v3.1開發小遊戲(基本框架)

小遊戲的組成

  • 歡迎界面

在遊戲資源未所有加載完以前就須要載入,避免進入遊戲會有一段黑屏時間。android

能夠用來展現遊戲名稱或者開發者logo。c++

  • 開始菜單界面

通常用於顯示遊戲名稱和關卡選擇(或者稱遊戲難度選擇)。git

能夠外加一些設置性功能,如聲音開關,幫助入口等等。github

若是遊戲設置內容較多能夠把設置做爲一個單獨界面,在開始菜單上提供入口便可。ubuntu

有的小遊戲是以彈窗方式的菜單服務器

  • 主遊戲界面

遊戲的中心部分,好比2048遊戲的格子滑動界面,掃雷遊戲的掃雷界面,貪吃蛇遊戲的蛇移動的界面,等等。app

小遊戲擁有這一個界面也能算一個小遊戲,可是沒有其餘界面會使遊戲缺乏更多選擇。框架

遊戲的主要邏輯都是在完成這個界面。編輯器

  • 遊戲結束界面

遊戲結束通常都會有個分數,用於展現本次遊戲得分和歷史最高得分對比。ide

在這個界面上能夠添加再玩一次的按鈕,讓玩家從新玩一次。

大多數小遊戲都是以彈窗的方式展現遊戲結果。

  • 排行榜界面 (可選)

遊戲中有分數這個概念就會有排名。

能夠是單機的排行榜,也能夠是聯機的排行榜(須要服務器保存數據)。

排行榜能夠促進玩家拿到更高的分數(也是有缺點的,看到其餘玩家玩的分數過高了而放棄了)。

cocos2d-x v3.1 lua 框架的使用

  • lua代碼結構

src
├── conf.lua                  # 配置文件,一些不變的配置保存在這裏
├── GameOverScene.lua         # 遊戲結束的界面
├── GameScene.lua             # 遊戲主邏輯界面
├── HelloScene.lua            # 歡迎界面,在這裏作資源更新檢測
├── main.lua                  # 遊戲lua腳本的入口
├── MainMenuScene.lua         # 遊戲主菜單界面
├── RankScene.lua             # 排行榜界面
└── util.lua                  # 通用功能函數實現

 

每一個XXOOScene.lua 文件的樣子以下:
local XXOOScene = {}

XXOOScene.newScene = function ()
    local scene = cc.Scene:create()
    -- do other XXOO things
    return scene
end

return XXOOScene

 

關於Scene界面跳轉,在util中封裝一個通用函數用於界面跳轉。
function util.toScene(scene)
    -- 增長一個統一的界面跳轉動畫
    scene = cc.TransitionSlideInR:create(0.5, scene)
    if cc.Director:getInstance():getRunningScene() then
        cc.Director:getInstance():replaceScene(scene)
    else
        cc.Director:getInstance():runWithScene(scene)
    end
end

 

main.lua用戶進入HelloScene界面
  • HelloScene = require("src/HelloScene")
     
    local function main()
        cc.FileUtils:getInstance():addSearchResolutionsOrder("src")
        cc.FileUtils:getInstance():addSearchResolutionsOrder("res")
     
        HelloScene.newScene()
    end
     
     
    local status, msg = xpcall(main, __G__TRACKBACK__)
    if not status then
        error(msg)
    end

     

    遊戲啓動logo的Scene特殊處理

由於加載lua資源須要時間,待全部資源都加載完再建立遊戲啓動界面會出現啓動的時候黑屏。我在1G的安卓機上測試須要5秒才能進入到lua建立的Scene。

解決方案:在 C++ 中建立啓動畫面,HelloScene.lua中不作建立Scene的操做,直接getRunningScene。

  • AppDelegate::applicationDidFinishLaunching () {
    
        // ... other xxoo things
    
        auto scene = Scene::create();
        auto s = Director::getInstance()->getWinSize();
        auto layer = LayerColor::create(Color4B(255, 255, 255, 255), s.width, s.height);
        auto logo = Sprite::create("res/logo.png");
        layer->addChild(logo);
        logo->setPosition(Vec2(s.width*0.5,s.height*0.7));
        scene->addChild(layer,0);
        director->runWithScene(scene);
     
        // 特殊處理,延遲加載lua(建立好logoScene再加載)
        auto action = CallFunc::create(startLua);
        layer->runAction(action);
    
        return true;
    }

     

    cocos2d-x v3.1 引擎的精簡

原由: 引擎編譯完以後發現lib文件相比2.x版本的大了很多。因爲是作小遊戲,通常都會有用不到的引擎部分,比我我就沒用到ui編輯器,因此就想辦法不編譯ui編輯器部分。

步驟:

  • 找到mk文件: $ find . -name "Android.mk"

  • 修改mk文件,把與ui編輯器相關的語句註釋掉。

  • 編譯,在編譯錯誤提示中找出還有什麼須要註釋的代碼。我遇到的問題主要是CCB那些。須要在lua_cocos2dx_extension_manual.cpp中把CCB的代碼註釋。

  • CCLuaStack.cpp中也須要註釋幾個註冊函數。

我還精簡了物理引擎,剛開始是用到了的,但後面看小遊戲用不上就把它也幹掉了(大概省下1M)。

  • cocos/scripting/lua-bindings/auto/ 下的文件生成

看README後執行生成命令,遇到了一些問題:

  • 問題1:官方只提供ubuntu 64位的libclang.so文件,在32位機子上跑會報下面這個錯誤

  • LibclangError: libclang.so: wrong ELF class: ELFCLASS64. To provide a path to libclang use Config.set_library_path() or Config.set_library_file().

  • 解決方法:在llvm官網下載4.3版本的llvm和clang。編譯生成libclang.so.3.4。拷貝到bindings-generator/libclang/下覆蓋libclang.so文件。怎麼編譯的那個博客如今找不到了,步驟大概是:

  • clang-3.4.src.tar.gz 和 llvm-3.4.src.tar.gz 。解壓,而後把clang目錄拷貝到llvm-3.4/tools/下。編譯,在llvm-3.4同一個目錄下建一個build文件夾,進入到build,執行cmake ../llvm-3.4/CMakeLists.txt

文字描述可能不清晰,目錄結構以下:

 

. -> build | ->llvm-3.4 -> tools -> clang -> CMakeLists.txt |-> CMakeLists.txt

 

  • 問題2: 找不到頭文件,報錯出現unkown type name ,緣由是官方配置的android_headers路徑和我電腦上的不同,主要是gcc的版本,個人是4.8的,官方配置是4.7。以下:

  • details = "unknown type name '__locale_t'"

  • 解決方法:修改cocos2dx.ini中的android_headers 的值把/cxx-stl/gnu-libstdc++/4.7/ 改爲/cxx-stl/gnu-libstdc++/4.8/ 。有兩個地方要修改。這個問題要看本身的安卓ndk的配置狀況,也許你的仍是4.6呢,本身能夠去ndk對應的路徑下找找看本身的ndk版本。

全民頂爆菊花

應用寶:http://android.myapp.com/myapp/detail.htm?apkName=com.hanxi.runtodie

百度手機助手:http://as.baidu.com/a/item?docid=6678809

豌豆莢:http://www.wandoujia.com/apps/com.hanxi.runtodie

代碼地址:https://github.com/hanxi/cocos2d-x-v3.1

【加幾張遊戲效果圖】

相關文章
相關標籤/搜索