cocos2d-x v3.17.2のcpp templateをベースに
v4へのmigrationを行う解説を行っていきます
旧バージョンのcocos2d-xからv4へのアップデートに
関心はあるがあまりiOS, Androidには習熟していないよ
という方向けです
私の知見が助力になれば幸いです
1.確認環境
-
XCode 12.5.1
-
CocoaPods 1.10.2
-
CMake 3.15.3
2.Cocos2d-x v4ダウンロード
githubに履歴を残していますので
差分や動作の確認にお使いください。
cocos2d-x v3.17.2のテンプレートから始めます。
ダウンロードしたcocos2d-xを解凍してフォルダ名をcocos2dに変更後
既存のcocos2dフォルダを置き換えます。
cocos2d-x v4 ダウンロードリンク(https://www.cocos.com/en/)
3.iOSのビルド
基本的にはHow to migrate · GitBookを参考にしていますが
細かいところに差異があります
修正を適用したgitをアップロードしています->github
まず、v4でiOSでのビルドが通るように修正します v4からはiOSでもCMakeが利用されていますがここでは 既存のxcodeprojを利用するためにcocos2d-xエンジンのみ CMakeからxcodeprojを生成します
3.1 CMakeでcocos2d-xエンジンのXCodeプロジェクトを生成
cocos2d/cocos/CMakeList.txtの修正をします
- cmake_minimum_requiredのセット
- COCOS2DX_ROOT_PATHのセット
- CocosBuildSet moduleのincludeをします
下記のようになります
cmake_minimum_required(VERSION 3.15)
# The version number
set(COCOS2D_X_VERSION 4.0)
set(COCOS_CORE_LIB cocos2d)
project(cocos2d_libs)
if(NOT DEFINED BUILD_ENGINE_DONE)
set(COCOS2DX_ROOT_PATH ${CMAKE_CURRENT_LIST_DIR}/..)
set(CMAKE_MODULE_PATH ${COCOS2DX_ROOT_PATH}/cmake/Modules/)
include(CocosBuildSet)
endif()
cocos2d/cocosフォルダへ移動、ここでCMakeします
cd cocos2d/cocos
cocos2d/ios-buildフォルダを作成します、ここにprojファイルが生成されます
mkdir ../ios-build
CMakeを実行します
cmake . -GXcode -DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_SYSROOT=iphoneos -B ../ios-build
3.2 xcodeprojの修正
では、既存のxcodeprojを修正していきましょう
HelloCpp.xcodeprojを開きます
3.3 cocos2d-xを入れ替える
参照の切れているcocos2d_lib.xcodeprojを削除して
先ほど作成したcocos2d/ios-build/cocos2d_lib.xcodeprojに
置き換えます
3.3.1 Header Search Paths
既存のHeader Search Pathsを修正します
これはそのままで良いことが多いです
SimpleAudioEngineを使う場合は追加します
もとになるバージョンによってUser Header Search Pathsであったり
Header Search Pathsになっていますが、
3.17.2ではHeader Search Pathsに設定されているので
そちらを修正していきます
Project HellopCppの
Settings —> Search Paths —> Header Search Paths
3.3.2 Other Linker Flagの修正
TARGETS HelloCpp-mobile
Build Settings —> Linking —> Other Linker Flag
下記にあるlinker flagを追加します
How to migrate · GitBookにはglfw3が含まれますが実際にはないので含みません
$(inherited)
$(PROJECT_DIR)/../cocos2d/external/Box2D/prebuilt/ios/libbox2d.a
$(PROJECT_DIR)/../cocos2d/external/jpeg/prebuilt/ios/libjpeg.a
$(PROJECT_DIR)/../cocos2d/external/freetype2/prebuilt/ios/libfreetype.a
$(PROJECT_DIR)/../cocos2d/external/webp/prebuilt/ios/libwebp.a
$(PROJECT_DIR)/../cocos2d/external/bullet/prebuilt/ios/libLinearMath.a
$(PROJECT_DIR)/../cocos2d/external/bullet/prebuilt/ios/libBulletDynamics.a
$(PROJECT_DIR)/../cocos2d/external/bullet/prebuilt/ios/libBulletCollision.a
$(PROJECT_DIR)/../cocos2d/external/bullet/prebuilt/ios/libLinearMath.a
$(PROJECT_DIR)/../cocos2d/external/bullet/prebuilt/ios/libBulletMultiThreaded.a
$(PROJECT_DIR)/../cocos2d/external/bullet/prebuilt/ios/libMiniCL.a
$(PROJECT_DIR)/../cocos2d/external/websockets/prebuilt/ios/libwebsockets.a
$(PROJECT_DIR)/../cocos2d/external/uv/prebuilt/ios/libuv_a.a
$(PROJECT_DIR)/../cocos2d/external/openssl/prebuilt/ios/libssl.a
$(PROJECT_DIR)/../cocos2d/external/glsl-optimizer/prebuilt/ios/libmesa.a
$(PROJECT_DIR)/../cocos2d/external/glsl-optimizer/prebuilt/ios/libglsl_optimizer.a
$(PROJECT_DIR)/../cocos2d/external/glsl-optimizer/prebuilt/ios/libglcpp-library.a
$(PROJECT_DIR)/../cocos2d/external/png/prebuilt/ios/libpng.a
$(PROJECT_DIR)/../cocos2d/external/curl/prebuilt/ios/libcurl.a
$(PROJECT_DIR)/../cocos2d/external/openssl/prebuilt/ios/libcrypto.a
$(PROJECT_DIR)/../cocos2d/external/chipmunk/prebuilt/ios/libchipmunk.a
// glfw3ファイルがないのでGitBookにはありますがここでは含んでいません
$(PROJECT_DIR)/../cocos2d/external/glfw3/prebuilt/ios/libglfw3.a
3.3.3 VALID_ARCHSの修正
既存のVALID_ARCHSがある場合は置き換え
ない場合はUser Defined Settingsを追加します
PROJECT HelloCpp
Build Settings -> User-Defined に追加
DEBUG arm64 arm64e armv7s x86_64
RELEASE arm64 arm64e armv7s
TARGETS HelloCpp-mobileに反映されていない場合
すでに設定されていることがあります
TARGETS HelloCpp-mobile -> Build Settings -> User-Defined を削除してください
3.3.4 Build Phaseの修正
TARGETS HelloCpp-mobile
BuildPhases -> Target Dependanciesにcocos2d(cocos2d_libs)
を追加する
Link Binary with Librariesに
Metal.frameworkとcocos2d_libs以下の
ライブラリ(libcocos2d.aやlib_ext*.a)を追加する
3.3.5 Compile
以上でビルドできるようになりました
3.4 参照