Unityと吉里吉里でSLGとかRPGを作るブログ

今回は、コンティニュアスハンドラの利用についてです。
何故、コンティニュアスハンドラかと言うと、このキーワードでこのサイトに来る方が多いからです。
折角来て貰えたのに、ろくな情報が無いのでは申し訳ないので、使い方を含めて解説したいと思います。
無い文章力を補うために、今回もダウンロード出来る簡単なサンプルを用意しました。

動的ゲームに利用する場合、最も効果的なのがエフェクトです。
ノベルでもエフェクトを使用したゲームは多数出てますが、状況に応じて出すエフェクトを変更したり、エフェクトからエフェクトの連携をしたりと言った、複雑なエフェクトを実行するには、このコンティニュアスハンドラを使用する以外にはありません。

しかしながら、エフェクトの実行などはちょっと複雑になり過ぎますので、今回は秒間50フレームで実行されるコンティニュアスハンドラを参考に作りました。

■ダウンロード■


■コンティニュアスハンドラとは

簡単に言うと継続的に繰り返し実行されるイベントです。
特徴としては、可能な限り多く実行されると言う点でしょうか、この可能な限りと言うのは、実行されてるPCのリソースを元にと言う事です。
つまり、PCが複雑な処理をして重くなっている時は少なく、軽い時は多く実行されます。

※コンティニュアスハンドラの詳しい説明はこのサイトで確認出来ます。
■TJSに挑戦!■


■サンプルの解説

今回のサンプルは、コンティニュアスハンドラ内で20ms(50分の1秒)に1回、実行回数をを計測し、1秒ごとに表示しています。
コンティニュアスハンドラが1秒間に50回以上実行されていれば、表示は50を表示し続ける訳です。
これは何を意味するかと言うと、PCのリソースが足りていれば、等間隔にアニメーションを実行したり出来ます。
アニメーションはパラパラ漫画で言うコマを送る訳ですが、10コマなら20msに1回ずつ、200ms(5分の1秒)で終わるアニメーションを実行出来る訳ですね。


■003_ImageNumbersPlugin

ニューカマー。ゲームではよく使う数値の羅列画像を表示出来ます。
数値画像は、「0123456789」で保存されている必要がありますが、桁数を入れる事で自動的に右寄せにしてくれます。
つまり、3ケタなら[12]の場合は、[ 12]と言う形です。
また、1つ1つの数値は同じ大きさで無くてはなりません。

使い方は、下の004_HandlerPluginを参照の事。


■004_HandlerPlugin

コンティニュアスハンドラのサンプル。003_ImageNumbersPluginの使い方もこちらで解説してます。

003_ImageNumbersPluginの使い方
番号イメージ画像をロードしています。
//番号イメージロード
number_lmage = new CustomLayer(kag, kag.fore.base);
number_lmage.loadImages("number_image");
number_lmage.visible = false;


秒間50フレームなので、2ケタをしてしてます。
//FPS表示レイヤを設定(2ケタ表示)
fps_lay = new ImageNumbersPlugin(2);


先程ロードしたイメージを共有してます。
//イメージの共有
fps_lay.setAssignImages(number_lmage);


ここでは、数値1つの大きさを指定してます。
//サイズの設定
fps_lay.setSize("all", 33, 41);


Absoluteを設定してます。
//描画深度の設定
fps_lay.setAbsolute(10000);


コンティニュアスハンドラのファンクションです。
20ms(50分の1秒)に1回、count++を実行し、実行回数を測定してます。
1000ms(1秒間)に1回、showFpsでその時の実行回数を表示しています。
  //------------------------------------
  // コンティニュアスハンドラ
  //------------------------------------
  function handler(tickCount)
  {
    try
    {
      //エフェクトの実行
      if(tickCount >= nextTime)
      {
        //次の稼働を20ミリ秒後に設定
        //20ミリなので、秒間50fps
        nextTime = tickCount + 20;
        count++;
      }

      if(tickCount >= time_d + 1000)
      {
        showFps(count);
        time_d = tickCount;
        count=0;
      }

    }
    catch(e)
    {
      // try ブロック内で例外が発生した場合はレイヤの移動を停止します
      // 再び例外を投げます
      throw e;
    }
  }


実行回数を表示するファンクションです。
実行回数を003_ImageNumbersPluginの機能で表示しています。
  //------------------------------------
  // FPS表示
  //------------------------------------
  function showFps(i_count)
  {
    fps_lay.showNumbers("all", i_count, 0);
  }



■総括

かなりサンプルに丸投げしてますが、今回はこんな感じです。
最初、コンティニュアスハンドラを使ったアニメーションの実行を解説しようと思いましたが、複雑になりすぎるので段階を踏む事にしました。
また、コンティニュアスハンドラで検索して、このサイトに辿り着いた人は、ノベルゲームを作ってる人も多いだろうと思い、ノベルゲームでも使いやすいサンプルにしました。
このサンプルを元にすれば、特定期間のクリック回数や、ゲームプレイ時間などを表示する事が出来ます。
この辺りは、ノベルゲームでも面白いギミックとして使えるのでは無いでしょうか。

アニメーションエフェクトについては、追々解説する予定ですが、興味のある方は、当サークルのゲーム「姫百合の乱」でソースを公開しておりますので、そちらで体験して見ては如何でしょうっと。最後に宣伝を入れて今回は終了します。





◆つぶつぶ主人公HP◆
スポンサーサイト
2012.09.25 / Top↑
Secret

TrackBackURL
→http://nekodamasi.blog79.fc2.com/tb.php/72-b2e6a9e3