#author("2016-05-13T11:35:44+09:00","","") [[Android/Cocos2Dx]] *C言語の開発で従来のスプライトリクエスト式を実装できるか? [#o88c06f9] &ref(http://static1.squarespace.com/static/52aa8827e4b04dd8c2598a98/t/530180d1e4b06573bf2afb45/1392607465228/default_download.jpg); *Cocos2Dxの構造 [#y4f09d96] 「OS/ハードウェア層 > アプリ層 > ゲーム層」というような感じで3層あるイメージ マシン ↓ OS/ハードウェア層 { // アプリの生存管理(起動、終了)OS,機種依存 アプリ層() { //アプリのアクティブ・非アクティブの管理(生存が前提) //ゲームの管理(OS、機種依存) ゲーム層() { //アクティブ時の処理 //ここが共通部分 } } } **Cocosのメインループ(ハードからアプリ、ディレクターまで) [#hc8ac661] 起動後、アプリから「ディレクター」というゲームを管理する役割のクラスに 処理を移し、ディレクターがmainLoopの中でwhileの無限ループを進行させている。 また、その前に1度だけゲームの初期化を行うための「applicationDidFinishLaunching()」関数でゲームの初期化を行っている simulator\frameworks\runtime-src\proj.win32 int APIENTRY _tWinMain(HINSTANCE hInstance, { int SimulatorWin::run() { int Application::run() { applicationDidFinishLaunching(); //起動後1度だけ来る初期化 while( Windowがクローズしていなければ回る ) { director->mainLoop(); ※1 } } } } ***ディレクター(Director)とは? [#j9df5be9] -自分のアプリはディレクターに管理してもらう。 -ゲーム(Scene)を「Director」に登録することで呼び出してもらう -呼び出してもらう頻度はスケジューラーをつかってディレクターに伝えておくこと -ディレクターはシングルトン -Sceneは複数持てる D:\dev\cocosPrj\sample3\cocos2d\cocos\platform\android AppDelegate::applicationDidFinishLaunching() { //1度だけ通る初期化 auto scene = HelloWorld::createScene(); // sceneをdirectorに登録 director->runWithScene(scene); } ***ディレクターのメインループとスケジューラー[#s27601e4] 描画するためのrender()は呼び出されているがゲーム本体を更新するための いわゆるaction()が見つからなかった。追いかけて行くとスケジューラーの updateで、時間に応じて複数の関数が呼び出されるべく関数ポインタが 設定されていた。なので、既定のactionはないのでディレクターを通じて 必要なActionを適宜設定する作法なのだと思われる つまりディレクターはスケジューラーというメモを持っていますので、 そのメモに自分のゲームを登録してもらって、毎フレーム呼び出してもらうことに するわけです。 DisplayLinkDirector::mainLoop() { drawScene(); } void Director::drawScene() { //時間に応じてゲームを呼び出す _scheduler->update(_deltaTime); //描画する _renderer->render(); //描画した絵をメイン画面にフリップする _openGLView->swapBuffers(); } ***スケジューラーにゲームのactionを登録する [#aa413430] -毎フレーム「update」という関数を呼び出すようにする this->scheduleUpdate(); -action関数を追加する void HelloWorld::update(float delta) { 毎フレーム更新することをかく } -できた!1秒毎に右に移動している void HelloWorld::update(float delta) { count ++; m_pSpr->setPosition( count/60 , 128 ); } ***基本的な考え方 [#sd77877b] -Sceneをディレクターに登録する、Sceneは複数持てる -Sceneにスプライトを登録する -登録されたスプライトは毎フレーム自動で描画される -描画をしてほしくない時は登録から外すか、非表示にする --この辺りの考え方はリクエスト方式と異なり、Unityなんかと一緒 *FAQ [#r45eb4cb] ***ゲームのソースはどこに置くのか? [#s2227160] HelloWorldScene.cppをみるにプロジェクトのルートに「Classes」フォルダがあってそこにおかれている。色んなバッチファイルの対象に入ってるかもしれないので、他の場所に置く勇気がない。 ***Sprite型の変数をHelloWorldScene.hでメンバー変数にできない [#rdd5adea] ネームスペースに含まれていない。cppファイルで記載されているマクロのおかげで cocos2dライブラリの型を使用できるがヘッダーには含まれていない。以下のように 定義されている。 #define USING_NS_CC using namespace cocos2d ヘッダーにもマクロを追加してみるのでどうか ***NDKのソースをデバッグしにくい [#rffb6a75] コマンドプロンプトでエラーを確認して、該当のファイルを開くのは正直めんどう。 だからこそ、そんな時は!せっかくのCocosなんで好きなOSで好きなIDEでデバッグしたらいいんじゃないかな。 -Win32環境ではあっさり動いて少しビビった。VCの環境設定が既に出来ていたこともある。この環境さえアレば解析がずっと楽だったのになあ。 -逆にWindows10ではWindowsSDKがインストールされてないので、この辺りから再出発の必要がありそう ***Visual Studioが2015になったら英語になった [#db5072b5] -そもそもVCのプロジェクトを開いたらVC2015にアップデートすることになった -Visual Studio 2015 Community の日本語化 [[http://qiita.com/tadnakam/items/8d89dc17d3f1733c1a56]] 以下抜粋。 --以前の Express 版(日本語版)は最初から日本語が使えましたが、Community 版は英語版しかありませんね。 --でも、Language Pack というのを入れれば日本語が使えるようになります。 --ここからダウンロードできます。 [[Microsoft Visual Studio 2015 Language Pack>https://www.microsoft.com/ja-jp/download/details.aspx?id=48157]] --あるいは、"Microsoft Visual Studio 2015 Language Pack" でググってください。 vs_langpack.exe というファイルがダウンロードできるので、実行するだけです。もし、 Visual Studio が立ち上がっていたら閉じておいた方がいいかもしれません。 完了したら、Visual Studio 2015 を起動します。このときは、まだ英語版のままです。 メニューバーの Tool / Options で Options ダイアログを開き、International Settings を変更します。これは Visual Studio 2013 Community と同じですね。 結局、違うのは Language Pack のダウンロード先だけということです。 Visual Studio 2013 Community の日本語化については、たくさん記事があるので適当なものをググってみてください。例えば、下のような記事とやり方は同じです。 ***Visual Studioのビルド時のショートカットがF7じゃない [#m88c4f24] -Shift + Control + Bがデフォになっています -Tool > Option > キーボードから、キーバインドをVisual Studio 6形式にすれば期待するキーバインドにできます --しかしCtrl + F7になってるので注意 ***Visual Studio Communityってなに?Expressはどこいった? [#n4d6c0a9] -Expressにかわる無料の開発環境で無料のVisual Studioのようです -ぱっとみてパフォーマンスアナライザー的なものがついてる、いいね! [[http://www.buildinsider.net/hub/insidersbreak/2014112101]] [[http://www.buildinsider.net/mobile/xamarinvisualstudio/01]]