先日(2017年6月30日の日記参照)の続きです。Cocos2d-xがビルドできたら、開発環境のセットアップをします。といってもsetup.pyを実行して、質問に答えるだけです。
$ cd cocos2d-x $ ./setup.py Setting up cocos2d-x... ->Check environment variable COCOS_CONSOLE_ROOT ->Search for environment variable COCOS_CONSOLE_ROOT... ->COCOS_CONSOLE_ROOT not found -> Add COCOS_CONSOLE_ROOT environment variable... ->Added COCOS_CONSOLE_ROOT=/home/katsuhiro/usr/src/cocos2d-x/tools/cocos2d-console/bin ... ->Check environment variable NDK_ROOT ->Search for environment variable NDK_ROOT... ->NDK_ROOT not found ->Search for command ndk-build in system... ->Command ndk-build not found ->Please enter the path of NDK_ROOT (or press Enter to skip): ★★Enterを押す★★ ... ->Check environment variable ANDROID_SDK_ROOT ->Search for environment variable ANDROID_SDK_ROOT... ->ANDROID_SDK_ROOT not found ->Search for command android in system... ->Command android not found ->Please enter the path of ANDROID_SDK_ROOT (or press Enter to skip): ★★Enterを押す★★ ... Please execute command: "source /home/katsuhiro/.bashrc" to make added system variables take effect
最初にAndroid NDKの場所を聞かれ、次にAndroid SDKの場所を聞かれます。もしAndroid向けにビルドしないのであれば、Enterを連打して無視しても構いません。私はスマホでもゲームを動かしてみたかったのでインストールしました。
Android SDKのコマンドラインツールは Android Studioのダウンロードサイトの一番下にある "Get just the command line tools" にあります。Android NDKは Android NDKのダウンロードサイトにあります。
SDKとNDKはどこに配置しても良いみたいです。私は~/usr/lib/ の下に放り込んでおきました。
$ cd ~/usr/lib $ unzip android-ndk-r15b-linux-x86_64.zip ...省略... $ ln -s android-ndk-r15b android-ndk $ cd ~/usr/lib $ mkdir android-sdk $ cd android-sdk $ unzip sdk-tools-linux-3859397.zip ...省略... $ cd ~/usr/lib $ tree -L 2 . ├──android-ndk -> android-ndk-r15b ├──android-ndk-r15b │ ├──CHANGELOG.md │ ├──README.md │ ├──build │ ├──meta │ ├──ndk-build │ ├──ndk-depends │ ├──ndk-gdb │ ├──ndk-stack │ ├──ndk-which │ ├──platforms │ ├──prebuilt │ ├──python-packages │ ├──shader-tools │ ├──simpleperf │ ├──source.properties │ ├──sources └──android-sdk └──tools
それとSDKやNDKのバージョン名が変わるたびにセットアップし直すのは面倒だったので、NDKはシンボリックリンクを張りました。手抜きです……。
$ cd cocos2d-x $ ./setup.py Setting up cocos2d-x... ->Check environment variable COCOS_CONSOLE_ROOT ->Search for environment variable COCOS_CONSOLE_ROOT... ->COCOS_CONSOLE_ROOT is found : /home/katsuhiro/usr/src/cocos2d-x/tools/cocos2d-console/bin ... ->Check environment variable NDK_ROOT ->Search for environment variable NDK_ROOT... ->NDK_ROOT not found ->Search for command ndk-build in system... ->Command ndk-build not found ->Please enter the path of NDK_ROOT (or press Enter to skip): /home/katsuhiro/usr/lib/android-ndk -> Add NDK_ROOT environment variable... ->Added NDK_ROOT=/home/katsuhiro/usr/lib/android-ndk ->Check environment variable ANDROID_SDK_ROOT ->Search for environment variable ANDROID_SDK_ROOT... ->ANDROID_SDK_ROOT not found ->Search for command android in system... ->Command android not found ->Please enter the path of ANDROID_SDK_ROOT (or press Enter to skip): /home/katsuhiro/usr/lib/android-sdk -> Add ANDROID_SDK_ROOT environment variable... ->Added ANDROID_SDK_ROOT=/home/katsuhiro/usr/lib/android-sdk ... Please execute command: "source /home/katsuhiro/.bashrc" to make added system variables take effect
環境設定はうまく行ったようです。最後に出ているメッセージの言う通りsource ~/.bashrcを実行すれば、cocosというコマンドが実行できるようになっているはずです。
Cocos2d-xの開発ではcocosコマンドを使うそうです。まずはcocos newでゲームのプロジェクト(テンプレート?)を生成します。
プロジェクト名はmygame1で、パッケージ名はnet.katsuster.mygame1(-p net.katsuster.mygame1)、C++ で開発します(-l cpp)。プロジェクトをディレクトリmygameに置いてもらいます(-d mygame)。何も指定しないとMyCppGameというディレクトリ名になりますが、リネームしても別に問題はありません。
$ mkdir ~/cocos $ cd ~/cocos $ cocos new mygame1 -p net.katsuster.mygame1 -l cpp -d mygame > Copy template into /home/katsuhiro/cocos/mygame/mygame1 > Copying Cocos2d-x files... > Rename project name from 'HelloCpp' to 'mygame1' > Replace the project name from 'HelloCpp' to 'mygame1' > Replace the project package name from 'org.cocos2dx.hellocpp' to 'net.katsuster.mygame1' > Replace the Mac bundle id from 'org.cocos2dx.hellocpp' to 'net.katsuster.mygame1' > Replace the iOS bundle id from 'org.cocos2dx.hellocpp' to 'net.katsuster.mygame1' $ ls mygame mygame1 $ ls mygame/mygame1/ CMakeLists.txt cocos2d proj.ios_mac proj.win10 Classes proj.android proj.linux proj.win32 Resources proj.android-studio proj.tizen
ディレクトリを覗くと、訳のわからないファイルが大量に生成されていて面食らいますが、とりあえず何も気にせず、ビルド&実行してみます。
ビルド対象は先程生成したmygame1(-s mygame/mygame1)で、ターゲットはLinux向け(-p linux)です。初回のビルドはかなり時間がかかりますが、二回目以降は変更した部分だけビルドするため、非常に早いです。
$ cocos compile -s mygame/mygame1/ -p linux Building mode: debug running: 'cmake -DCMAKE_BUILD_TYPE=Debug -DDEBUG_MODE=ON ..' -- The C compiler identification is GNU 6.3.0 ...(初回だけかなり時間掛かります)... [100%] Building CXX object CMakeFiles/MyGame.dir/Classes/HelloWorldScene.cpp.o [100%] Building CXX object CMakeFiles/MyGame.dir/Classes/AppDelegate.cpp.o [100%] Linking CXX executable bin/MyGame [100%] Built target MyGame Build succeed. $ cocos run -s mygame/mygame1/ -p linux Building mode: debug running: 'cmake -DCMAKE_BUILD_TYPE=Debug -DDEBUG_MODE=ON ..' ... [100%] Built target MyGame Build succeed. Deploying mode: debug Starting application. running: '/home/katsuhiro/cocos/mygame/mygame1/bin/debug/linux/MyGame' /home/katsuhiro/cocos/mygame/mygame1/bin/debug/linux/MyGame: error while loading shared libraries: libfmod.so.6: cannot open shared object file: No such file or directory Error running command, return code: 127.
上記ではビルドだけするため、あえてcocos compileを使いましたが、実はcocos runがビルドと実行を同時にやってくれるので、cocos compileは使う必要がありません。
それは良いとしてcocos runが失敗してしまいました。libfmod.so.6が無いとか言っています。このライブラリはcocos2d-x/external/linux-specific/fmod/prebuilt/64-bit/libfmod.soに置いてあるようなのですが、名前がちょっと違っているので、libfmod.so.6という名前のシンボリックリンクを作ってあげて、ライブラリのパスも通してあげると動きます。
$ cd ~/usr/src/cocos2d-x $ cd external/linux-specific/fmod/prebuilt/64-bit $ ln -s libfmod.so libfmod.so.6 $ echo 'export LD_LIBRARY_PATH=$COCOS_X_ROOT/cocos2d-x/external/linux-specific/fmod/prebuilt/64-bit' >> ~/.bashrc $ source ~/.bashrc $ cd ~/cocos $ cocos run -s mygame/mygame1/ -p linux ... Build succeed. Deploying mode: debug Starting application. running: '/home/katsuhiro/cocos/mygame/mygame1/bin/debug/linux/MyGame' Ready for GLSL Ready for OpenGL 2.0 gl.supports_OES_packed_depth_stencil: false gl.supports_OES_depth24: false gl.supports_OES_map_buffer: false gl.supports_vertex_array_object: true gl.renderer: Gallium 0.4 on llvmpipe (LLVM 3.9, 128 bits) gl.version: 3.0 Mesa 13.0.6 cocos2d.x.compiled_with_gl_state_cache: true cocos2d.x.version: cocos2d-x-3.15.1 gl.supports_S3TC: true cocos2d.x.build_type: DEBUG cocos2d.x.compiled_with_profiler: false gl.vendor: VMware, Inc. gl.max_texture_units: 96 gl.max_texture_size: 8192 gl.supports_ATITC: false gl.supports_ETC1: false gl.supports_PVRTC: false gl.supports_NPOT: true gl.supports_BGRA8888: false gl.supports_discard_framebuffer: false libpng warning: iCCP: known incorrect sRGB profile cocos2d: QuadCommand: resizing index size from [-1] to [2560]
下記のように宇宙人のような顔が描いてある画面が出れば成功です。
そういえば何も考えずTigerVNC上で実行していますが、難無く60fps出て驚きました。画面サイズが小さくて、動きがほとんど無いから軽いだけかも知れませんけど、便利だし問題起きるまでVNC越しで開発してみようかなあ。
ひとまずLinux向けには作り始めることができそうです。今回はここまで。
大学生ぐらいの時から不思議だったのですが、飲み過ぎた日、もしくは次の日に「音が高く」聞こえる人居ませんか?
普段から聞き慣れた曲って頭の中で再生できるじゃないですか。あれをやりながら、実際にその曲を聴くと、普段は合っているのに、酒飲みすぎた日は実際の曲の方が音が高いんです。
頭の中で再生できるほど聞き込んでなくても、曲の始まりくらいは覚えてますよね。さあ、この音が鳴るぞ〜と思っている音と、実際に聞こえてくる音がズレていて、高く感じるんです。
そういえば、環境音とか雑音も普段より高く聞こえているはずですが、気になりませんね。私が音を覚えられないためか、高いのか合っているのか良くわからないからでしょうか……?
聞こえる音が高くなると書きましたが「聞こえる音が高くなる」ではなく「記憶していた音が低くなる」可能性もあります。
確かめるには、酔って音が変に聞こえている時に何かの音を覚えて、素面の時に聞いてみる方法があります。音が高く聞こえたら酔うと耳がおかしくなって記憶は正しく、同じ音に聞こえたら耳は正しくて酔うと記憶がおかしくなる、というように判断できるはずです。
しかし、酔ってるときにそんなことしたら絶対気持ち悪くなるので、確かめたくありません……。あと両方おかしくなる場合は判別できません。
飲み会で思い出す度に色んな人に聞いてますが、今のところ同意してくれる人が居らず。一体、何なんでしょう?何かの病気?
そういえばゲームをしばらく作っていなかったけれど、今時のゲームはどうやって作るんだろう?と調べていました。
今はスクラッチからガリガリ書くのではなく、ゲームエンジンとして3DならUnityで、2DならCocos2d-xを使うのが定番のようです。スマホゲームはAndroidとiOSに両対応することが普通だと思われてますよね。スクラッチから作ってAndroidとiOSに両方対応させるなんて、想像するだけで辛そうです。ゲームエンジン様々ですよ。
UnityはC# で書く必要があるみたいで、今時のゲームエンジンと3DとC# を同時に覚えようとすると間違いなく挫折するので、2DメインかつC/C++ で書けるCocos2d-xを試します。
いざ始めようとして、そういえばWindowsマシンを持ってない(潰してLinuxマシンにしてしまった)ことに気づきましたが、Linuxでのインストールガイド(公式ドキュメント)もちゃんと用意されていました。さすが。
どのバージョンを使えば良いのかわかりませんが、とりあえず現時点での最新リリース版っぽい3.15.1のタグをチェックアウトしておきます。
$ mkdir -p ~/usr/src/ $ cd ~/usr/src/ $ git clone https://github.com/cocos2d/cocos2d-x.git Cloning into 'cocos2d-x'... remote: Counting objects: 433999, done. remote: Total 433999 (delta 0), reused 0 (delta 0), pack-reused 433998 Receiving objects: 100% (433999/433999), 883.31 MiB | 1.47 MiB/s, done. Resolving deltas: 100% (294953/294953), done. $ cd cocos2d-x $ git checkout cocos2d-x-3.15.1
ビルドします。ビルドする前にcmakeやOpenGL系ライブラリの開発パッケージを入れる必要があります。公式ドキュメントさん曰く、UbuntuやDebianをお使いなら、
cd build
./install-deps-linux.sh
とすると楽にセットアップできるとのこと。私は使ったことがないです。
$ cd cocos2d-x $ cd build $ mkdir linux-build $ cd linux-build $ cmake ../../ ... -- SQLite3 include dirs: /usr/include CMake Error at cmake/Modules/FindPackageHandleStandardArgs.cmake:136 (message): Could NOT find FMOD (missing: FMOD_LIBRARIES FMOD_INCLUDE_DIRS) Call Stack (most recent call first): cmake/Modules/FindPackageHandleStandardArgs.cmake:343 (_FPHSA_FAILURE_MESSAGE) cmake/Modules/FindFMOD.cmake:48 (find_package_handle_standard_args) cmake/Modules/CocosBuildHelpers.cmake:44 (find_package) cmake/Modules/BuildModules.cmake:21 (cocos_find_package) CMakeLists.txt:98 (BuildModules) -- Configuring incomplete, errors occurred! See also "/home/katsuhiro/usr/src/cocos2d-x/build/linux-build/CMakeFiles/CMakeOutput.log". See also "/home/katsuhiro/usr/src/cocos2d-x/build/linux-build/CMakeFiles/CMakeError.log".
FMODなるモジュールが無いと怒られました。調べてみるとgitからソースコードを持ってきた場合は、依存ライブラリをダウンロードする一手が必要とのことです。ダウンロードは簡単です。
$ cd cocos2d-x $ ./download-deps.py ======================================================= ==> Prepare to download external libraries! ==> version file doesn't exist ==> Ready to download 'v3-deps-130.zip' from 'https://github.com/cocos2d/cocos2d-x-3rd-party-libs-bin/archive/v3-deps-130.zip' ==> WARNING: Couldn't grab the file size from remote, use 'zip_file_size' section in '/home/katsuhiro/usr/src/cocos2d-x/external/config.json' ==> Start to download, please wait ... ==> Downloading finished! ==> Extracting files, please wait ... ==> Extraction done! ==> Cleaning cocos2d-x/external folder ... ==> Copying files... ==> Cleaning... ==> Would you like to save 'v3-deps-130.zip'? So you don't have to download it later. [Yes/no]: Yes ==> Saving the dependency libraries by default
もう一度cmakeを実行します。成功しました、良かった良かった。あとはmakeするだけですが、gcc 6.3を使っているせいか、凄まじい量の警告が出ます。ドキュメントを見るとgcc 4.9でビルドするのが推奨みたい?ですが、gccのバージョンに関わらずWarning出るのはダメじゃないの……?
$ cd cocos2d-x $ cd build/linux-build $ cmake ../../ It appears you are building natively for Linux with GCC -- OpenGL include dirs: /usr/include -- GLEW include dirs: /usr/include -- PkgConfig found -- GLFW3 include dirs: /usr/include/GLFW -- SQLite3 include dirs: /usr/include -- FMOD include dirs: /home/katsuhiro/usr/src/cocos2d-x/external/linux-specific/fmod/include -- Fontconfig include dirs: /usr/include/freetype2 ... -- CURL add to include_dirs: /usr/include/x86_64-linux-gnu -- CURL libs added to 'cpp-tests': curl SPIDERMONKEY_LIBRARY: /home/katsuhiro/usr/src/cocos2d-x/external/spidermonkey/prebuilt/linux/64-bit/libjs_static.a -- Configuring done -- Generating done -- Build files have been written to: /home/katsuhiro/usr/src/cocos2d-x/build/linux-build $ make Scanning dependencies of target bullet [ 0%] Building CXX object external/bullet/CMakeFiles/bullet.dir/BulletCollision/BroadphaseCollision/btAxisSweep3.cpp.o ...(かなり時間かかります)...
やっと入り口に立てました。次回はゲームのプロジェクトを作ろうと思います。
< | 2017 | > | ||||
<< | < | 07 | > | >> | ||
日 | 月 | 火 | 水 | 木 | 金 | 土 |
- | - | - | - | - | - | 1 |
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 | - | - | - | - | - |
合計:
本日: