[新型コロナウイルスによるバックアップCD発送遅延のお知らせ]
データエレメンツ (バイナリ) ガイド

はじめに

Clickteam Fusion 2.5 のガイドへようこそ! 本ガイドに記載されている情報の一部は、Multimedia Fusion 2 でも利用できます。 PDF 形式のチュートリアルやガイドはご自由に印刷してお読みください。 お好きな時間にご自身のペースで読み、学習していただけます。

Clickteam Fusion 2.5 では、ある結果を得るための方法は 1 つに限定されません。本ガイドでは、それらのうち、最も一般的かつ簡単で効果的と思われる方法をご紹介しますが、方法はそれだけだけではない、ということを頭の片隅に留めておいてください。

本ガイドは、ゲームであれ、アプリケーションであれ、 Clickteam Fusion 2.5 を使って開発を行おうとお考えの方に、知りたいことを丁寧に説明することを目指して作成いたしました。

本ガイドについてのご意見、ご感想をお待ちしております。 学習者のレベルに合わせたガイドを個別に作成するのではなく、初心者から中級、上級者まですべてのレベルの方が同じガイドで同じ目標を達成できればと考えております。

1. バイナリデータとは

バイナリデータと聞いて、それって何? とお思いになる方もいらっしゃるでしょう。 既にご存じの方もそうでない方も、データはバイナリに格納されています。バイナリとは文字通り、 0 と 1 の羅列です。 しかしながら、 Clickteam Fusion においては、そこまで文字通りの意味ではありません。Clickteam Fusion では、最終的なアプリケーションにファイルを追加することができます。 つまり、ファイルをアプリケーションファイル内に格納し、ランタイム時には、それらを別個のファイルとして使用することができるのです。

インディゲームクリエイター:バイナリデータ

簡単な例でご説明しましょう。 あらゆるプラットフォームで動作する、シンプルなゲームを作成しているとします。そして、ゲームと一緒に配布する設定ファイルも作成しました。

しかしながら、最終的なビルド (EXE) をコンパイルする際、このファイルをゲーム自身に含めたいと考えました。 普通に考えると、最終的なビルドはgame.exe と config.ini (設定ファイル) ですよね?

でもあなたはこの config.ini というファイルを game.exe の中に含めたいんです。 そうすればファイルは1 つだけになり、ゲームの配布が簡単になりますから。

ここで登場するのがバイナリデータです。 いかなるファイルもほとんどすべてアプリケーションの最終ビルド内に格納することができ、そしてこのファイルをゲームの外部にある、別個のファイルであるかのように使用することができます。

バイナリにはいかなる種類、サイズのファイルでも格納可能です。 Clickteam Fusion が行うのは、最終ビルド作成時にこのバイナリデータを実行ファイルの終わりに追加することです。最終ビルド内でファイルには "リンク" のようなインデックスが与えられるため、ランタイム時にバイナリファイルを呼び出す際、バイナリのどの部分を探したらよいかがわかります。これは Windows 以外のすべてのランタイムに適用されます。 Windows の場合は、バイナリを手動で抽出し、バイナリファイル名を参照する必要があります。

ちょっとわかりづらかったでしょうか? 取っ付きにくい部分もありますが、背後にある原理を理解してしまえば、簡単に利用できます。 次ページから詳しくご説明します。

2. プラットフォームにおける差異

バイナリデータの使用法には 2 種類あります。 Windows ゲーム/アプリでは、ランタイム時にアプリケーションからバイナリデータを手動で抽出し、それを直接参照する必要があります。

他のプラットフォーム (Flash、 iOS、 Android、 XNA、 HTML5) では、その必要はありません。 プラットフォーム毎に異なる一時フォルダーが、どこにあるかを探すのに無駄な時間をかける必要はありません。エクスポータではアプリケーションからバイナリデータを抽出したり、それを参照したりする手間が不要で、ファイル名を呼び出すだけで済むように扱いを簡略化しています。

Windows とその他のプラットフォーム (エクスポータ) で相違が発生する理由は、アプリのキャッシュと一時ディレクトリの設定が異なるためです。例えば、 Xbox 360 の一時フォルダーは、 Android に比べて深いフォルダー構造になる場合があります。 しかしながら、Windows でもなぜファイル名を参照するだけにできないのか、とお思いになるかもしれません。

その答えは極めて簡単で、開発者 (あなた) にファイルとデータを完全にコントロールできる自由を与えるためです。Windows でも他のプラットフォームと同様のやり方にできなくはありません。 ただそうすることで、開発者の自由を奪うことになります。

3. バイナリデータを挿入するには

Clickteam Fusion では、マウスで 2、3 回クリックするだけでバイナリファイルを挿入することができます。Clickteam Fusion を起動し、新規アプリケーションを作成したら、ツールバーで下図のアイコン (データエレメンツ) を見つけてください。

インディゲームクリエイター:バイナリファイルアイコン

見つかったらクリックします。 データエレメンツ ダイアログが表示されます。 ここでは、プロジェクト内にすでに含まれているファイルの概要が確認できます。したがって、サウンド、音楽、バイナリデータ、外部ファイル、エクステンション、エフェクトファイルなどを挿入したら、すべてこのダイアログに表示されます。

それでは、バイナリデータ タブをクリックしてください。

ここにアプリに含めたい 「バイナリデータ」 がすべて表示されることになります。 このダイアログはこれで閉じて、続いてバイナリとして含めるINI ファイルを作成します。 メモ帳などのテキストエディタをシンプルなテキストを作成します。 次の内容を記述してください:

             [testgroup]

             testnumber=101

完了したらファイルを保存します。 名前を付けて保存 ダイアログで、ファイルの種類に すべてのファイル を選択し、C ドライブのルートにtest.ini という名前で保存します (C:\test.ini)。 保存するアクセス許可がない場合は、他のフォルダー(ドキュメント フォルダーなど) でも構いません。

Clickteam Fusion に戻り、さきほどの データエレメンツ アイコンをクリックし、ダイアログでバイナリデータタブをクリックします。 「追加」 ボタンをクリックし、さきほど作成した test.ini ファイルを選択します。 これで INI ファイルがバイナリデータタブに挿入され、下図のように表示されるはずです。

インディゲームクリエイター:データエレメンツ ダイヤログ

ファイルが挿入されたら、ダイアログは閉じてください。 Clickteam Fusion はアプリケーションのコンパイル時に初めてこのファイルを格納し、コンパイル前に格納することはありません。

それでは、フレームに INI オブジェクトを追加しましょう。

インディゲームクリエイター:フレーム に INI追加

INI オブジェクトを追加したら、それをクリックし、プロパティで 「Application Data フォルダにINI ファイルを作成する」 のオプションを無効にします。 今回は INI ファイルを作成しません。 INI ファイルはさきほど作成し、すでにアプリケーションに含めるよう設定していますので、このオプションは無効です。必要なのはランタイム時にバイナリからそれをロードすることです。

続いて、カウンター オブジェクトを追加します。

インディゲームクリエイター:カウンターオブジェクト 追加

これで INI ファイルを使用する準備が整いました。 次のページに進みましょう。

4. Windows でバイナリデータを呼び出すには

ここでは、 Windows から INI ファイルを呼び出す一般的な方法をご紹介します。

アプリケーションのテスト中は、INI ファイルは C:\test.ini から直接ロードします (このファイルは最終ビルドを作成するまでバイナリには含められないため)。

もう一つの注意点は、INI オブジェクトのプロパティでファイル名を指定する必要がない、ということです。 これはイベントを使って行います。Ctrl + E を押して、イベントエディタを表示してください。

まずはじめに、使いたいバイナリファイルを抽出する必要があります。 ファイルを使う必要がなければ、ファイルをユーザーの一時ディレクトリーに抽出する意味もありません。早速抽出します。

インディゲームクリエイター:フレーム開始 INIイベント

イベントエディタで、フレームが開始した時、という新しい条件を作成します。 INI ファイルはすぐに使用しますので、フレームの開始時に抽出します。条件が作成できたら、特別オブジェクトのセルを右クリックして、バイナリファイル -> バイナリファイルを抽出 を選択します。 数式エディタでは"c:\test.ini" とタイプして OK をクリックします。

これでアプリケーションからバイナリを抽出してユーザーのコンピューターの一時フォルダーに保存します。 Windows の場合、test.ini という一時バイナリファイルを解凍しても、 test.ini という名前では解凍されません。 一時フォルダーに解凍されると、通常は難解なファイル名になりますが、心配は無用です。簡単な数式でファイル名を取得することができます。

MFA ファイルをわかりやすくするために、フレームが開始した時 という条件をもう一つ別に作成しましょう。 新しく作成した条件では、INI オブジェクトのセルを右クリックして 「現在のファイルを変更」 を選択します。

インディゲームクリエイター:フレームに ファイル変更

数式エディタが起動し、ファイル名を入力しますが、ここに “c:\test.ini”と入力しても意味がありません。 実際のファイル名は異なります。 ここでは、簡単な数式で一時ファイル名を取得します。

インディゲームクリエイター:テンポラリファイル名

特別オブジェクトを右クリックして、ファイル名 -> バイナリファイルのテンポラリファイル名 を選択します。ここでは “c:\test.ini” を参照したいので、数式エディタに次ページの図のように入力します。

インディゲームクリエイター:テンプレート指定

上図のように入力したら OK をクリックします。

続いてこれをテストします。 フレームが開始した時 という条件をもう一つ作成し、作成した INI ファイル内の値(101) をカウンターにロードします。 新しい条件行でカウンターオブジェクトのセルを右クリックし、カウンターをセット を選択します。

インディゲームクリエイター:開始にカウンターセット

数式エディタが表示されたら、 INI ファイルの値をカウンターにロードする必要があります。 INI オブジェクトを右クリックして「値 (グループ - 項目) を取得」 を選択します。

インディゲームクリエイター:カウンター 値 (グループ - 項目) を取得

続いて下図のようにパラメータを入力します。

インディゲームクリエイター:カウンターセット

ここでは、 INI ファイル内のグループ "testgroup" の"testnumber" という項目から現在の値を抽出しています。 さて、もうすぐ完成です。

F8 を押してアプリケーションを実行してみましょう。 アプリケーションが起動し、カウンターが 101 と表示するはずです。成功したでしょうか。 今はまだアプリケーションを最終的にビルドしていませんので、テストには実際のファイル、 c:\test.iniを使っています。 最終的な EXE ファイルをビルドすると、 ファイル test.ini をバイナリとしてビルドに含め、アプリケーションはそのファイルを参照することができるようになります。

以上で、バイナリファイルを含め、それを抽出し、さらにそれを読み取ることに成功しました。 最後にバイナリファイルを 「解放」する必要があります。 アプリケーションを終了する前にバイナリファイルを解放しないと、ファイルはそのまま一時フォルダーに残り、ユーザーのハードドライブを無駄に消費してしまいます。

バイナリファイルを解放する方法としては、アプリケーションイベントの最後でそれを実行するやり方があります。 そのための条件を新規に作成しましょう。アプリケーションが終了 という条件です。

インディゲームクリエイター:終了時 ファイルを開放

特別オブジェクトのセルを右クリックし、バイナリファイル -> バイナリファイルを解放 を選択します。

数式エディタで下図のように設定します (特別オブジェクトを右クリックし、ファイル名 -> バイナリファイルのテンポラリファイル名を選択して、 c:\test.ini を指定します)。

インディゲームクリエイター:終了時 バイナリファイルのテンポラリファイル名

ファイルを解放するには、どのファイルを解放するかを指定しなければなりません。 解放したいファイルは c:\test.ini ですが、ユーザーの一時フォルダーに格納されると、ファイル名は難解になります。 したがって次の簡単な数式で"実際の" ファイル名を取得します。

BinFileTempName$("c:\test.ini")

Clickteam Fusion でバイナリデータとその抽出に関して知っておくべきことは以上です。

続いてエクスポータでのバイナリデータの使用について説明します。 実はこちらは Windows の場合より 100 倍簡単です。

5. エクスポータでバイナリデータを呼び出すには

Windows での場合に比べ、エクスポータでバイナリデータを呼び出すのは簡単です。 エクスポータではデータを抽出したり、解放したりする必要はありません。

例えば Android 用のゲームをコンパイルする場合、ファイルの指定は、データエレメンツダイアログのバイナリデータ タブに表示されたまま行います。タブに c:\test.ini と表示されているなら、そのままを指定します。

インディゲームクリエイター:エキスポーター 設定変更しない

INI ファイルをロードしたいイベントで、 INI オブジェクトを右クリックし、現在のファイルを変更 を選択したら、数式エディタで“c:\test.ini” と指定するだけです。

インディゲームクリエイター:エキスポーター ファイル名 変更しない

簡単ですよね。 この方法は、 XNA、 Android、 iOS、 Flash および HTML5 のすべてのエクスポータで共通です。

6. まとめ

本ガイドでは、バイナリデータを使用する方法について学びました。

バイナリデータは非常に強力な機能です。 時間があれば、画像やサウンドファイルなど他のファイルでもいろいろ試してみることを強くお勧めいたします。忘れてはいけないのは、アプリケーションをビルドするまでは常にローカルファイルを参照している、ということです。 アプリケーションをビルドして初めて、バイナリデータがファイルに含められます。

本ガイドをあなたのアプリケーション/ゲーム作成にお役立ていただければ幸いです。