MonacoScheduler

もなこSOSから学ぶスケジューラー



むずでょ(@muzudho1)
@shachi_you なんとなくつかめてきたぜ☆ 1フレーム毎に1命令進む、といった感じにプログラムカウンターを命令の頭に留めたり、進めたり、戻したり止めたりする仕組みが Lua にはないからスクリプト内スクリプトを自作するんだぜ☆ http://grayscale.wiki.fc2.com/wiki/MonacoScheduler

むずでょ(@muzudho1)
アクター1体1体の挙動は フレーム単位で _OnStepする .lua言語 でいいんだが、何フレーム目にアクターが登場するか指示する台本じたいは 非統一別系統でシステム欲しい感じだぜ☆ grayscale.wiki.fc2.com/wiki/MonacoSch… #GE_AIMS



参照『もなこSOS』
s/scene/game.lua
s/scheduler.lua




進行表の上を 一時停止、再開、回数指定巻き戻し、頭出し できるテープレコーダーみたいなもの。
ボス戦が終わるまで進行待ってろ、ボス戦が終わったから再開、といったことができる。


 ▲再生    ■■一時停止   ▲再開    ←巻き戻し    (JUMP)頭出し



急所① cmd[1](cmd[2])

Lua では cmd[1](cmd[2]) という書き方ができる。

cmd[1] は関数名。
cmd[2] は引数のテーブル。


急所② スタック構造


ループの中に、ループを入れることができる。その仕組みは V.scheduler.loop テーブル(スタック)。


急所③ WAIT は2種類。


(1)待ち時間を足す。
(2)指定した時間まで待つ。

WAIT カウンターが 0 になるまで次の処理を無視する。WAITカウンターは、1フレームで1消費する。


急所④ イベント


V.scheduler.event テーブルには関数が入っている。
 (例)
   "TELOP_WARNING" → createTelopWarning
   "BOSS_HP" → createBossHP


イベントに入ったら、スケジューラーを止めたい場合は この関数の直後に WAIT(cmd_pause関数)を入れて、
スケジューラーを無制限停止させることができる。
 (例)
   ボス戦。
   ボスを倒したら RESUME(cmd_resume関数) でスケジューラーを再開させている。

スケジューラーを止めなければそのまま続く。

参照
scheduler_setEventFunc
cmd_pause()
cmd_resume()



変数調査




V.scheduler = {}


      • -----------------------------------------------------------------------------
■ 定義テーブル
      • -----------------------------------------------------------------------------
V.scheduler.command = {
      EVENT = cmd_createEvent,
   }


      • -----------------------------------------------------------------------------
■ プログラム・カウンター1
      • -----------------------------------------------------------------------------
V.scheduler.count = 0


      • -----------------------------------------------------------------------------
■ ジャンプ先行番号
      • -----------------------------------------------------------------------------
V.scheduler.coda = 1


      • -----------------------------------------------------------------------------
■ コマンド,引数配列のペアになっている要素のリスト
      • -----------------------------------------------------------------------------
V.scheduler.data = {}


      • -----------------------------------------------------------------------------
■ 関数の配列
      • -----------------------------------------------------------------------------
V.scheduler.event = {}


      • -----------------------------------------------------------------------------
■ プログラム・カウンター2 (関数の配列のindex)
      • -----------------------------------------------------------------------------
V.scheduler.index = 1


      • -----------------------------------------------------------------------------
■ 関数の配列のサイズ
      • -----------------------------------------------------------------------------
V.scheduler.length = 0


      • -----------------------------------------------------------------------------
■ for文用の配列で、back,count,maxの属性を持つ要素を入れる。スタック方式。
      • -----------------------------------------------------------------------------
V.scheduler.loop = {}


      • -----------------------------------------------------------------------------
■ スクロール用の設定
      • -----------------------------------------------------------------------------
V.scheduler.mapchip = {


      • -----------------------------------------------------------------------------
■ 一時停止の有無か?
      • -----------------------------------------------------------------------------
V.scheduler.pause = false


      • -----------------------------------------------------------------------------
■ スケジューラーの状態を保存か?
      • -----------------------------------------------------------------------------
V.scheduler.save = {
  V.scheduler.save.mapchip
   V.scheduler.save.index
   V.scheduler.save.slot


      • -----------------------------------------------------------------------------
■ 数値を持っている配列。変数用途か?
      • -----------------------------------------------------------------------------
V.scheduler.slot = {


      • -----------------------------------------------------------------------------
■ ウェイト。実行を無視するフレーム数。
      • -----------------------------------------------------------------------------
V.scheduler.wait = 0













  • 最終更新:2013-09-26 10:50:23

このWIKIを編集するにはパスワード入力が必要です

認証パスワード