IOS應用內嵌cocos2dx游戲項目


1.創建Cocos2d-x項目

相比於Android來說cocos2dx的iPhone環境基本不用配置,直接創建用xcode打開就可以運行。

Cocos2d-x官方網站下載最新版本引擎。

將剛才下載的壓縮包解壓到你指定的文件夾里(我的是cocos2dx3.16)。

進入到目錄cocos2d-x-3.16/tools/cocos2d-console/bin/cocos.py

打開終端運行cocos.py腳本創建文件

./cocos.py new HelloWorldDemo -p com.coco2dx.TestCocos -l cpp -d ~/Desktop

或者

python cocos.py new HelloWorldDemo -p com.coco2dx.TestCocos -l cpp -d ~/Desktop

參數說明:

  • TestCocos為項目名稱
  • -p后面接包名
  • -l后面接開發語言類型,有cpp, lua, js三種類型
  • -d后面接項目存放的目錄

2.新建一個IOS項目,名字自取(我的是TestIOSCocos),把相應cocos2dx工程cocos2d-x和游戲資源(我創建的是lua項目,游戲資源包括res、src、config.json、Classes)拷貝到此IOS項目下,在IOS項目下創建Resource並將剛才拷貝的資源res、src、config.json轉移到此文件夾下

3.添加 依賴、引用、資源(注意:Resource 下的res和src是藍色的)

 

3.資源什么的都已經導入完成后,現在要做的是導入cocos2d_libs.xcodeproj、cocos2d_lua_bindings.xcodeproj、libsimulator.xcodeproj(其中libsimulator.xcodeproj可導入也可不導入,這個是模擬器運行時需要的)

 

 

導入之后的目錄如上圖

4.配置target Dependencies

5.配置Link Binary

注意當導入libz.dylib的時候發現沒有這個庫,不要慌,按照下圖操作:點擊Add Other---command+shift+G----/usr/lib/ ---進入文件夾找到相關文件添加即可

6.Header Search Paths添加路徑

 

7.cocos不支持 Bitcode,所以改為NO

8.添加cocos的viewcontroller相關代碼到IOS項目下,將AppDelegate.m改為MyAppDelegate.mm因為因為cocos中已經存在AppDelegate避免沖突,main.m中AppDelegate也替換成MyAppDelegate,並將.m文件后綴改為.mm

 

 

9.在Main.storyboard中添加一個按鈕並且為按鈕添加點擊事件

 

 

10.在MyAppDelegate.mm中添加代碼:static AppDelegate s_sharedApplication;

 

11.參照TestCocos項目的Build Settings對TestIOSCocos做相應的修改

 

 

 

現在可以編譯運行了,不過一般都會報錯

"stack" file not found 的問題解決方案這個問題可能是因為我們在.m文件中引用了'<stack>',或者.cpp文件或.h文件中引用了'<stack>',但最后被.m文件應用了,導致了上面的錯誤。這里我們的解決方法可以考慮刪除引用,或者把.m文件的后綴改成.mm,這樣就可以和cpp語言混編不再報錯了。

"use of undeclared identifier static_assert" 的問題解決方案在將cocos2d-x整合進我原有的工程的過程中遇到了“static_assert”的問題,網上的解釋和解決方案是因為'static_assert'方法是在C++11中支持的,所以我們需要在build的時候使用C++11來編譯。具體方法是在 'Build Settings' 中的 'Apple LLVM 7.1 - Language - C++' 中設置 'C++ Language Dialect'為'GNU++11 [-std=gnu++11]'和'C++ Standard Library'為'libc++ (LLVM C++ standard library with C++11 support)'。

 

后續補充:關於推出游戲返回應用界面,並再次啟動問題

上面說的方法在第一次運行的時候是沒有問題的,但是推出游戲返回應用界面並且再次啟動游戲就會crash。

解決辦法:在執行cocos2d::Director::getInstance()->end();完之后返回應用界面的時候要延時處理,代碼如下圖

注釋或者刪除MyAppDelegate.mm中AppDelegate相關內容

更改RootViewController.mm如下圖

最后是lua調用Jumping的exitGame函數,lua調用oc網上有很多教程,我使用的是luaoc.callStaticMethod(className,"exitGame",args),調用的oc方法要寫成靜態的

local function clickBack(sender,eventType)

    if eventType == ccui.TouchEventType.ended then

        print("back~~~~~~~")

 

        local luaoc = require "cocos.cocos2d.luaoc"

        local args = {}

        local className = "Jumping"

        local ok,ret  = luaoc.callStaticMethod(className,"exitGame",args)

        if not ok then

            cc.Director:getInstance():resume()

        else

            print("The ret is:", ret)

            cc.Director:getInstance():endToLua()

            --os.exit()

        end

    end

end

項目源碼:https://github.com/Ring1992/TestIOSCocos


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM