FlixelDebugger

トップに戻る

Flixelデバッガの使い方

このページではHaxeFlixelに組み込まれている、とても強力なデバッガの使用方法を紹介します。 最初は少しとっつきにくいですが、うまく活用すると開発効率がかなりアップします。



Flixelデバッガの機能概要

Flixelデバッガには以下の機能があります

  • GUI操作による、ゲーム実行の一時停止、再開、コマ送り、ゲームの再起動
  • 特定の機能を呼び出すGUIボタンの配置
  • ロードしている画像データの表示
  • 専用のログ表示
  • 変数のウォッチ
  • グラフィカルなパフォーマンス表示
  • コンソールによる特定の機能の呼び出し。インスタンスのパラメータ操作や関数の呼び出し
  • オブジェクトの当たり判定表示・ドラッグ&ドロップによる移動

Flixelデバッガの画面の説明

Flixelデバッガは、「-debug」でビルドを行い、「F2」「`(バッククォート)」「\(バックスラッシュ)」のいずれかで表示することができます。

Flixelデバッガの画面構成は以下のようになります。

debugger.png

番号に対応する説明は以下のようになります

  1. HUD(画面上部) : 中央にあるボタンで、ゲームの再起動や一時停止、コマ送りなどが行えます
    特にリアルタイムゲームではコマ送りをして、少しずつ動きを確認したりするのに使えます。
    またボタンを増やすと、ここのエリアに追加されます。
  2. BitmapLog?(左中央上) : ロード中の画像を確認できます
    読み込み中の画像をここで確認できます。
    これにより余計な画像をロードしていないかチェックすることが可能です。
  3. Log(左中央下) : ログ表示
    FlxG.logにより出力したログが表示されます。
  4. Watch(右下) : 登録した変数の値を確認できます
    FlxG.watchにより登録した変数が確認できます。
    特にリアルタイムゲームでは、ここの変数を登録し、
    コマ送りで数値の変化をチェックすることで効率なデバッグを行えます。
  5. Stat(右上) : FPSや使用メモリ量を確認できます
    パフォーマンスを確認できます。
    例えばFPSが極端に低くなっていたら、余計なオブジェクトを描画しているなどの可能性があります。
  6. Console(左下) : コマンドを入力してオブジェクト操作などが行えます

表示方法

まずビルドコマンドに「-debug」オプションをつけます。この設定をしないと有効になりません。

lime test neko -debug

Intellij IDEAの場合

プロジェクトファイルを右クリックして、「OpenModuleSettings?」を選びProject Structureウィンドウを開きます。

001.png

そこからHaxeタブを選び、「OpenFL Project XML」のところに「-debug」を指定します。

Project.xmlを編集する

Intellij IDEAの場合、上記の設定が終了時に保存されないようです。そのため Project.xml を直接編集して有効にしました。

	<!--Disable the Flixel core debugger. Automatically gets set whenever you compile in release mode!-->
	<!--<haxedef name="FLX_NO_DEBUG" unless="debug" />-->

FLX_NO_DEBUGの定数を直接無効化しました。ただしこの方法による有効化は、最終ビルドでデバッグ機能が有効にならないよう、忘れずに修正する必要があります。

表示キー

F2キーでデバッガの表示・非表示を切り替えることができます(USキーボードであれば「`(バッククォート)」「\(バックスラッシュ)」でも可能)

表示をトグルするキーの割り当て

別のキーに割り当てる場合は以下の記述をします。

    // ALTキーを表示用に割り当てる
    FlxG.debugger.toggleKeys = ["ALT"];

起動時にすぐ表示する

以下の記述をすると起動時にデバッガが表示されるようになります。

    FlxG.debugger.visible = true;

ログへの出力

    FlxG.log.add("trace log"); // 通常のログ
    FlxG.log.warn("warning!"); // 警告ログ (デバッガをポップアップする)
    FlxG.log.error("error!!!"); // エラーログ

Watchへの登録

Watchウィンドウへの登録は以下のように記述します。

class PlayState extends FlxState {

  // タイマー
  public var timer:Int = 0;

  overrid public function create():Void {
    FlxG.watch.add(this, "timer");
}
 

第一引数がオブジェクトで、第二引数にそのオブジェクトのフィールドを指定します。

コマンド

最初から用意されているコマンドには以下のものがあります。

コマンド名省略説明
helphコマンドのヘルプを表示しますhelp set
closeclデバッガを閉じますclose
clearHistorychコマンド履歴を削除しますchearHistory
clearLogclearログを消しますclearLog
resetStaters現在のStateをリセットしますresetState
switchStatess別のStateに遷移しますsw MenuState
resetGamergゲームをリスタートしますrg
createcrFlxObjectを生成し登録しますcr Player
sets登録したオブジェクトに値を設定しますs state.timer 100
callc登録したオブジェクトの関数を呼び出しますc state.trace message
fieldsf指定のクラスまたはインスタンスのフィールドをリスト表示しますf FlxG
listObjectslo登録したオブジェクトをリスト表示しますlo
listFunctionslf登録した関数をリスト表示しますlf
watchMousewmマウス座標の情報をWatchに追加しますwm
trackt指定のオブジェクトをトラッカーウィンドウに登録しますt FlxG.state
pausep一時停止、再開をトグルしますp
clearBitmapLog?cblBitmapログの情報をクリアしますcbl
viewCachevcBitmapのキャッシュログを表示しますvc

ボタンの配置

デバッグ用のボタン配置をすることもできます

    /**
     * 生成
     **/
    override public function create():Void {

        var spr = new FlxSprite();
        spr.makeGraphic(8, 8, FlxColor.HOT_PINK);
        // hogeとログに表示するボタンを左側に配置
        FlxG.debugger.addButton(ButtonAlignment.LEFT, spr.getFlxFrameBitmapData(), hoge);

        spr = new FlxSprite();
        spr.makeGraphic(8, 8, FlxColor.LIME);
        // piyoとログに表示するボタンを中央に配置
        FlxG.debugger.addButton(ButtonAlignment.MIDDLE, spr.getFlxFrameBitmapData(), piyo);

        spr = new FlxSprite();
        spr.makeGraphic(8, 8, FlxColor.AQUAMARINE);
        // momoとログに表示するボタンを右側に配置
        FlxG.debugger.addButton(ButtonAlignment.RIGHT, spr.getFlxFrameBitmapData(), momo);
    }

    // 以下、ボタンを押した時のコールバック関数を定義
    public function hoge():Void {
        FlxG.log.add("hoge");
    }
    public function piyo():Void {
        FlxG.log.add("piyo");
    }
    public function momo():Void {
        FlxG.log.add("momo");
    }

実行すると左側にピンク色のボタン、中央に緑色のボタン、右側に青色のボタンが配置され、それぞれをクリックすると、"hoge" / "piyo" / "momo" と出力されます。

button.png

注意点

なおゲームの途中でボタンを配置するときは、2重に配置しないようになんらかの対処が必要となります(間違って配置すると重複したボタンがどんどん増えていきます)。 1つの方法としては生成時にインスタンスを保持して、removeButton()で削除する方法です。

class PlayState extends FlxState {
    private var _dbgButton:FlxSystemButton;

    /**
     * 生成
     **/
    override public function create():Void {
        super.create();

        _dbgButton = FlxG.debugger.addButton(ButtonAlignment.MIDDLE, _player.getFlxFrameBitmapData(), FlxG.resetState);
    }

    /**
     * 破棄
     **/
    override public function destroy():Void {
        super.destroy();
        // 破棄時にボタンも消しておく
        FlxG.debugger.removeButton(_dbgButton);
    }
 

コリジョンの表示

コリジョンを表示する機能もあります。

   // 当たり判定を表示する
   FlxG.debugger.drawDebug = true;
hit.png

当たり判定が赤い線で表現されるようになりました。

なお、FlxObject.immovableをfalseにする(衝突しても反動で動かなくする)と、緑色の線で表示されるようになります

コリジョンの表示とオブジェクトの操作

v4.2.0から、デバッガからコリジョンの表示とオブジェクトの操作ができるようになりました。

objctrl1.png

デバッガを表示したら、一時停止ボタンでゲームを停止します。

objctrl2.png

次に、Toolsから+をクリックして、動かしたいオブジェクトをクリックすると、コリジョンが赤色の枠で表示されます。

objctrl3.png

最後に、Toolsの十字矢印をクリックすると、オブジェクトをドラッグ&ドロップで自由に動かすことができます