Arduboyのコミュニティサイトを見ていたら、Arduboy用のスケッチをVisual Studioでコンパイルして動作させるシミュレータがあったので試してみました。
Proton Arduboy Simulator (for Windows Visual C++ 2005) – Arduboy / Development – Community
Protonというクロスプラットホームのゲーム開発プラットホームを開発されている方が作られたようです。
エミュレーションではなくシミュレータなので、ArduboyのライブラリのAPIと互換のライブラリをWindows上に作成し、Arduboy用に書かれたスケッチファイルをコンパイルしてWindows用のアプリを生成します。
Proton Arduboy SimulatorをダウンロードするにはSVNクライアントが必要です。
以下の説明にあるように「TortoiseSVN」をインストールし、ダウンロード先のフォルダで右クリックから「SVN Checkout…」を選択します。
するとリポジトリのURLを入力するウインドウが出るので、下記のリンク先にあるとおり「svn://~」のURLを入力します。
ファイルにはArduboyのサンプルにあるブロック崩しが最初から含まれています。
プロジェクトファイルは「ArduboySim\windows」の中にあります。
Visual Studio 2015 Communityで問題なく実行できました。
次に、自分で作ったブロック崩しを動作させてみました。
設定の仕方は以下のページに書かれています。
proton:arduboysim [RTsoft Wiki]
スケッチファイルは「ArduboySim\Arduboy」フォルダの中に、「ardu_main.cpp」というファイル名で入れます。
そして、スケッチファイルの「setup()」と「loop()」をそれぞれ「main_setup()」「main_loop()」という名前に変更します。
次に、Visual Studioでプロジェクトファイルを開き、プロジェクトエクスプローラで「ardu_main.cpp」ファイルを探します。
そして、右クリックで「プロパティ」を選択します。
プロパティウインドウが開いたら、「C/C++」の「プリコンパイル済みヘッダー」を「使用しない」に設定します。
なお、もともとのサンプルに含まれていた「bitmaps.h」「bitmaps.cpp」はプロジェクトから削除しておきます。
これで準備OKです。実行するとシミュレータ上でArduboy用スケッチが動作します。
カーソルキーとCTRLとZが十字ボタン・Aボタン・Bボタンに対応します。
実際にはWindows用のプログラムとして動作していますので、ブレークポイントの設定や変数値の確認なども、下図のように通常のWindowsでのデバッグと同様に行えます。
これは素晴らしいですね。
ちなみに、SDL Debug GLの構成で動作しない場合は、ソリューションエクスプローラーのwinArduboySim上で右クリック→プロパティ→全般 で出力ディレクトリが「..\bin\」になっているかどうか確認してください。
なお、「App.cpp」ファイルの「#define RT_ARDU_LANDSCAPE」の行がコメントアウトされているのを有効にすると、Arduboyを横にした状態で動作を確認することができます。
(ただ、残念ながらカーソルキーの動作までは回転してくれませんでした。)
さらに、この実行コードをHTML5ファイルに変換することができます。
さすがクロスプラットホーム用ツールです。
方法は下記のページに書かれています。
proton:html5_setup [RTsoft Wiki]
まずEmscriptenをインストールします。
Download and install — Emscripten 1.36.5 documentation
インストールしたらスタートメニューのEmscriptenから「Emscripten Command Prompt」を開き、「emsdk」と入力して応答があればインストール完了です。
環境変数PATHにEmscriptenのフォルダが追加されているので、いったんPCを再起動します。
HTMLファイルの生成コマンドは、「ArduboySim\html5」フォルダの中の「build_release.bat」です。
ただし、最初から入っている「build_release.bat」はサンプルのブロック崩しのソースファイルに合わせてありますので、編集が必要です。
現時点では56行目あたりからがその場所になります。
REM **************************************** APP SOURCE CODE FILES
REM set APP_SRC=%APP%\App.cpp %ARDUBOY%\ardu_main.cpp %ARDUBOY%\breakout_bitmaps.cpp
set APP_SRC=%APP%\App.cpp %ARDUBOY%\ardu_main.cpp
REM **************************************** END SOURCE
ソースファイルのリストにbreakout_bitmaps.cppというファイルが含まれていますので、これを取り除いています。
また、現在のバージョンはコンパイル時にSDLのインクルードファイルが見つからないというエラーが出ました。
やむなく音声は無しの指定にしました。(下記引用の赤い部分を削除)
2016/9/15:作者さんが修正してくれました。
SET CUSTOM_FLAGS= -DHAS_SOCKLEN_T -DBOOST_ALL_NO_LIB -DPLATFORM_HTML5 -DRT_USE_SDL_AUDIO -DNDEBUG -DC_GL_MODE -s LEGACY_GL_EMULATION=1 –memory-init-file 0 -Wno-switch -D__AVR_ATmega32U4__ -DRT_ARDUDEV -DRT_RUNS_IN_BACKGROUND -DRT_EMTERPRETER_ENABLED -s EMTERPRETIFY=1 -s EMTERPRETIFY_ASYNC=1
これで、「build_release.bat」ダブルクリックすればHTML5ファイルが生成されます。
(結構時間がかかります。)
結果、こんな感じのHTMLファイルが生成されました。
ちゃんと遊ぶことができます。(実物は→こちら)
一緒に生成されたJavaScriptのファイルは3.6MBほどありました。
Arduinoのシミュレータは世の中にはあまりありません。
開発ボードも周辺ボードも数が多いので、実際問題、サポートが困難なのでしょう。
関連のトピックが下記にありました。
Arduino simulator for debugging
しかし、ArduboyはArduinoベースとはいえ、ハードウェアのスペックは固定されており、外付けの機器も無く、用途もゲームのみ、ということでシミュレータが作りやすい条件だったのかもしれません。
かなり実用的なので、ありがたく使わせて頂こうと思います。
コメント