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

ご無沙汰しています。
潜水生活の方は順調に進んでおり、夏コミに向けて日々頑張っています。

今回は久しぶりの吉里吉里プラグインです。
前作、『姫百合の乱』では、難しいという意見を少なからず聞きましたので、潜水生活では難易度を設けています。
昨今のゲーム事情を省みて、難易度はいつでも変更可能な設定にしてみました。

そんな訳で、今回はメニューに難易度を追加するプラグインです。
メニューに簡単に項目を追加するプラグインが思いの外少なかったので、私が作った物を公開しようと思ったわけです。
デフォルトでは『難易度』となっていますが、文言等を改良すれば、簡単に他のメニューとしても使えます。

メニュー機能自体は、吉里吉里Zではオミットされてしまったレガシー機能ですが、同人では大変便利なので、
悪い機能ではありません。
◆サンプルダウンロード◆


■プラグイン解説

・008_NanidoMenuPlugin
難易度メニューを追加するプラグインです。サンプルのscenarioフォルダにはいっています。
今回は、このプラグインのソースに手を入れることが前提です。


難易度選択

var menu_name = "難易度"; //メニューの名称
var menu_koumoku_ary = []; //メニュー項目
menu_koumoku_ary.add("ハード");
menu_koumoku_ary.add("ノーマル");
menu_koumoku_ary.add("カジュアル");

var control_ary = []; //メニューコントロールID
control_ary.add("kou");
control_ary.add("otu");
control_ary.add("hei");

menu_nameが実際のメニューに表示される名前です。
難易度以外の項目にしたい場合、ここの名称を変えましょう。

menu_koumoku_aryには、それそれのモードが入ります。
control_aryは上のモードと対になるIDだと思ってください
今回は、3つですが、増やしたければ増やせます。
menu_koumoku_ary.add("ナイトメア");
menu_koumoku_ary.add("ハード");
menu_koumoku_ary.add("ノーマル");
menu_koumoku_ary.add("カジュアル");

var control_ary = []; //メニューコントロールID
control_ary.add("mea");
control_ary.add("kou");
control_ary.add("otu");
control_ary.add("hei");


こんな感じ


メニュークリックの所で、メニューをクリックした時の処理を追加します。
それぞれハード、ノーマル、カジュアルを選んだ時の設定が記載されてます。
サンプルでは、sf.nanidoで難易度を制御していますが、ゲームに合わせて変えて下さい。
セーブデータ事に難易度を変えるなら、セーブデータに入れる必要がありますね。
//------------------------------------------
// メニュークリック
//------------------------------------------
function onMenuClick(menu)
{
//=============================================
//ここにはメニューをクリックした時の処理を書く
//=============================================
//ハードが選択された
if(menu.control === 'kou')
{
sf.nanido = 1;
}

//ノーマルが選択された
if(menu.control === 'otu')
{
sf.nanido = 2;
}

//カジュアルが選択された
if(menu.control === 'hei')
{
sf.nanido = 3;
}

//メニューにチェックをつける
menu.checked = true;
}



最後に現在の値に合わせてメニューの表示を変えるファンクションです。
サンプルでは、ゲーム機動後に選択肢で難易度を選んだあとに呼ばれて、選択した難易度をメニューに反映しています。
セーブロードに対応させたい場合は、ロード後にファンクションを呼ぶ事で、メニューを現在の難易度に設定します。
//------------------------------------------
// メニューの設定
//------------------------------------------
function setMenu()
{
//=============================================
//ここにはロード時や、初回設定時などのときに、メニュー内容を
//設定する為の処理を書く
//ここでは、フラグに合わせて、メニュー項目にチェックを入れている
//=============================================

//一旦メニュー項目のチェックを初期化
var i;
for(i=0; i {
subMenu[i].checked = false;
}

//フラグに合わせて、メニュー項目にチェックをつける
if(sf.nanido == 1)
{
subMenu[0].checked = true;
}

if(sf.nanido == 2)
{
subMenu[1].checked = true;
}

if(sf.nanido == 3)
{
subMenu[2].checked = true;
}
}


難易度選択後
難易度を選択後、メニュー設定ファンクションが呼ばれ、この様にメニューの表示が選択した難易度になる。






◆つぶつぶ主人公HP◆  ◆サンプルダウンロードの一覧◆
スポンサーサイト
2016.03.14 / Top↑
すっかり、月一更新が普通になってしまった猫ダマシです。
定期的に月2回更新してたのが嘘の様です。

さて、今回はイベントとフラグの制御サンプルをアップします。
ちょっと複雑になってますので、なるべく簡単に解説しようと思います。

いつも以上に分かりにく仕様になっております。
アップしたサンプルを見ながら読み進めて頂けると幸いです。
◆サンプルダウンロード◆

以前の記事も確認いただけると、より理解が進むと思います。
◆第23回「フラグの管理方法」◆
◆第10回「イベント制御について」◆


■プラグイン

・000_CustomLayer
 カスタムレイヤープラグイン、じゃんけんぼたんを表示する為に必要。

・001_ImageLayPlugin
 イメージレイヤープラグイン、上記同様。

・002_ImageListLayPlugin
 イメージリストレイヤープラグイン、上記同様。

・003_WinButtonLayerPlugin
 ウィンドウボタンプラグイン、ジャンケンボタンはこれを使ってます。

・004_JyankenPlugin
 ここで、ジャンケンボタンを作って、表示してます。

・033_GameFlgPlugin
 フラグ管理用プラグイン
 800_GAME_FLG.datのCSVファイルを読み込んでます。

・051_EventPlugin
 イベント制御用プラグイン。
 852_EVENT_DATA.datのCSVファイルを読み込んでます。


■フラグ管理

033_GameFlgPluginの機能を簡単に紹介しておきます。
このプラグインは、800_GAME_FLG.datを読み込みフラグの管理をしています。
800_GAME_FLG.datは、CSVデータ設定(Ver1.01).xlsの「800_フラグ」シートをCSV化してます。

★シートの中身
・フラグID
 管理するフラグの名前です。

・初期フラグ
 フラグの初期値です。

・フラグタイプ
 前回お話した、フラグタイプです。

・コメント
 このフラグのコメントで、情報としては取り込みません。


■イベント管理

051_EventPluginの機能を簡単に紹介しておきます。
このプラグインは、852_EVENT_DATA.datを読み込んでイベントの管理をしています。
852_EVENT_DATA.datは、CSVデータ設定(Ver1.01).xlsの「852_イベント」シートをCSV化してます。

★シートの中身
・ID
 管理しているイベントのIDです。

・タイミング
 どこで発生するかです。

・条件フラグ
 ここに設定されているフラグが全てON(1)なら、イベント発生条件を満たします。
 未設定は出来ません、DUMMYを設定する事で擬似的に未設定にします。
 ※DUMMYは常にONなので。

・否条件フラグ
 ここに設定されているフラグが1つでもONなら、イベントは発生しません。

・ターン
 SLG時に特定ターンを条件にする為に設定してます。今は使ってません。

・終了タイプ
 イベントが何度も発生するかを表します。0なら1度きり、1なら何度も発生します。

・storage
 イベントの発生条件を満たした時に、実行されるイベント用のKSファイル。
 つまり、イベント本体です。

・target
 上記ファイル内のジャンプ先のラベル。
 私はイベント事にファイルを分けるので、基本は同じです。

・セットフラグ
 イベントが発生した時に、立つフラグです。
 イベントの発生をキーにして、次のイベントを発生させたいなら、ここにそのフラグを設定する事で可能です。

・オフフラグ
 イベントが発生した時に、オフになるフラグです。
 イベント発生で、次のイベントを発生させなくするのに使います。


■サンプルの流れ

まず、サンプルの吉里吉里を実行すると、firstが読み込まれ、プラグインがロードされます。
その後、jyanken.ksmainラベルに飛びます。

まずは、jyanken.ksの中身を見てみましょう。

;********************************************************
;じゃんけんメイン
;
;********************************************************
*main
;メインイベント処理
[eval exp="event.exeEvent('MAIN')"]

;じゃんけん結果フラグをクリアします
[eval exp="global.game_flg.clearFlgType('J')"]

;じゃんけんボタンを表示します。
[eval exp="jyanken_win.openWin('fore')"]



;********************************************************
;じゃんけん後に飛ぶラベル
;
;********************************************************
*jyanken_go

;じゃんけんの結果はイベントに飛んでお知らせします
[eval exp="event.exeEvent('JYANKEN_GO')"]
[s]

物凄いシンプルですね。
では、実際に起動してみるとどうでしょうか。
E001_最初のイベント.ksが実行されましたね。

;メインイベント処理
[eval exp="event.exeEvent('MAIN')"]

このイベントの実行は、この部分で行われています。

エクセルのイベントシートを見ると、「最初のイベント」は条件が全て、DUMMYです。
更にタイミングが、MAINです。
DUMMYは、必ずONの状態なので、最初のイベントは、発生条件を満たしてます。

このサンプルでは、以下の様な少し分かりにくい方式でイベントを実行してます。
まず、003_イベント.ksMAINラベルに飛びます。
そして、E001_最初のイベント.kseventラベルに飛びます。
どうして、この様な面倒な事をしているかは、後述の003_イベントの役割で解説します。
ここで大事なのは、イベントが終わったら、再び、jyanken.ksMAINラベルに飛ぶと言う事です。

再びmainラベルに飛んだので、イベントチェックが発生します。
;メインイベント処理
[eval exp="event.exeEvent('MAIN')"]


ここで、E001_最初のイベント.ksは既に実行され、更に終了タイプが0なので、もう実行されません。
その下にある、2回目のイベントが発生します。

ここで、イベントの発生条件にもう1つ条件がある事が分かりますね。
最初のイベント」と、「2回目のイベント」は同じ条件です。
つまり、どちらも条件を満たしていました。
条件を満たしているイベントが複数あった場合、上から順番に優先されます
ですので、2回目イベントは同条件でありながら、2回目の発生なのです。

2回目イベントが終わると、ジャンケンウィンドウが開きます。
じゃんけんウィンドウ

ぐーが勝ち、ちょきが負け、ぱーがアイコです。

この時、ぐー、ちょき、ぱーのボタンを押すと、どれも同じ場所である、jyanken.ksjyanken_goラベルに飛びます。
そして、それぞれのボタンを押した時に、KATI、MAKE、AIKOのフラグをそれぞれ立てています。

004_JyankenPlugin.ksのこの部分ですね。
//===============================================
//ぐーボタンを押下
//===============================================
if(i_id == "GU")
{
  //勝ちフラグON
  global.game_flg.setGameFlg("KATI", 1);
}

//===============================================
//ちょきボタンを押下
//===============================================
if(i_id == "TYOKI")
{
  //アイコフラグON
  global.game_flg.setGameFlg("AIKO", 1);
}

//===============================================
//ぱーボタンを押下
//===============================================
if(i_id == "PAA")
{
  //負けフラグON
  global.game_flg.setGameFlg("MAKE", 1);
}

;じゃんけんの結果はイベントに飛んでお知らせします
[eval exp="event.exeEvent('JYANKEN_GO')"]

ボタン押下時に立てたフラグを元に、この部分でそれぞれのイベントを発生させてます。
発生後は、再びjyanken.ksmainラベルに飛びます。
勝ち負けアイコのイベントは終了タイプが1なので、ボタンを押せば何度でも発生します。


■ジャンケン結果のフラグ制御

ここで、ちょっと疑問を感じませんか?
それは、ジャンケン結果の、勝ち、負け、アイコのイベントは、何度押しても正しいイベントに飛ぶという事です。
当たり前じゃないかと思うかも知れませんが、良く考えて見て下さい。
例えば、1度ぐーのボタンを押すと、KATIフラグがONになります。
そうなると、次は何度イベントチェックをしても、一番上の勝ちイベントが実行される筈です。

では、何故そうならないかと言うと、jyanken.ksmainラベルにある、これが原因です。

;じゃんけん結果フラグをクリアします
[eval exp="global.game_flg.clearFlgType('J')"]


もう一度、フラグのエクセルシートを見てみましょう。
フラグタイプがKATI、MAKE、AIKOは、Jになってますね。
そうです、ここで、フラグタイプがJのフラグは、全てOFF(0)に一度クリアされてます。
ここは、前回も少しお話しましたね。

これにより、戦闘に参加したキャラクターイベントや、敵イベント等が起こせます。


■003_イベントの役割

先ほど記載した通り、イベントは一度、003イベント.ksと言うファイルを通してからそれぞれのイベントに飛ぶ様にしてます。
なぜこの様な、面倒な真似をするかというと、理由は2つあります。

・発生タイミング事の処理を統一
 例えば、戦闘中に発生するイベントなら、終わった後に戦闘に戻る必要があります。
 また、戦闘用のコマンドボタン等を操作出来なくするなど、イベント中に不具合が発生しない様に処理が必要です。
 これらの処理を、各イベントファイルに記載するのはバグの元になります。
 統一する事で、バグの発生を抑え、修正も容易にします。

・イベントの発生場所を自由に出来る
 イベントの発生タイミングをある程度変える事が出来ます。
 つまり、発生タイミング固有の問題を、003_イベント.ksで吸収しているので、戦闘中に起こっていたイベントを、戦闘後にするなど、イベントの発生タイミングを変えても殆ど改修が必要ありません。


■まとめ

今回は、イベントとフラグの制御用のプラグインをアップしました。
動的ゲームを作成するためには必須の機能です。
また、ノベルでも分岐の多いアドベンチャーに近いゲームを作る場合は、使えるかと思います。







◆つぶつぶ主人公HP◆  ◆サンプルダウンロードの一覧◆
2014.11.20 / Top↑
お疲れ様です。
ゲーム素材も揃ってきて、レベルデザインとマップ製作を交互に行う毎日です。

そんな訳で、本日はゲーム製作の肝、フラグの管理方法について記載します。
今回紹介するフラグ管理方法は、姫百合で出た問題をベースにブラシュアップした物で、吉里吉里での製造に関わらず使える概念だと思います。

それなりのサイズのサンプルをアップする予定ですので、久しぶりに2回に分けて、概念、サンプルソースの解説と言う形で紹介していこうと思います。

コンセプトとしては、以下3点に重点を置いています。
・フラグ関係でのバグや問題の解決しやすさ
・開発中、リリース後での変更対応力
・フラグ制御の寛容性


このフラグ管理システムは、こちらで紹介した「イベント制御」と組み合わせる事で強力な力を発揮します。
次回紹介するサンプルも、こちらとのタッグで作っておきます。これを丸々導入する事で、簡単にフラグシステムとイベントシステムを追加可能ですよ。


■データの持ち方

まず、フラグテーブルを用意します。私の場合は、エクセルで管理して、そのままCSVで取り込む方式です。
テーブル管理については、こちらで紹介しています。
データの持ち方
※フラグデータの持ち方

テーブルデータとしては、以下3項目です。
・フラグID
 フラグのIDです。
 分かり易い名前を付けましょう。例えば、ボスAが死んだ時に立てるなら、BOSS_A_SIとか。

・フラグタイプ
 そのフラグが属しているタイプです。
 タイプの使い方は、後で説明します。

・初期値
 フラグの初期値です。ON(1)かOFF(0)を設定しておきます。基本的には0になりますね。


■ONOFFの制御

ゲーム内でのON、OFF制御は、IDを指定して1か0を設定する方式を取ります。
この時、大事なこととして、テーブルに無いフラグを立てに行ってもエラーとならない様にします。
同様にゲーム内に無いフラグを見に行った場合、自動的にOFFが帰る様にします。

例えば、ゲームなどで特定の敵が死んだ時点でイベントを起こしたいと言う事は良くあると思います。
この場合、敵が死んだら、敵のID+_SIと言う形で自動的にフラグを立てに行くようにすれば、全ての「敵が死んだ」イベントを作成出来ます。
しかし、無いフラグが立てられないなら、エネミー全ての死亡フラグをテーブルに載せる必要があるのです。
テーブルには必要なフラグだけ載せた方が可読性が高まります。


■IDによる制御

フラグには、IDを付けます。上で紹介した様に何のフラグか分かる様にしておきます。
また、明確なルールを設けると良いです。
例えば、イベント終了のフラグなら、イベント番号+ENDの様な形にします。
これにより、フラグ関係のデバックが大変楽になります。


■フラグタイプでの制御

タイプは、特定の状況で、同一タイプのフラグを全部OFFにするのに使います。

例を出して見ましょう。
SLGなどで、特定のキャラクター同士が戦闘に参加したら会話イベントを起こしたいとします。
この場合、戦闘に参加したキャラクターのID+_BTなどとしてフラグを立てれれば制御は楽です。

所が、ここで1つ問題になります。
例えばAとBのキャラが揃ったら会話イベントをさせたいのに、1戦目でBのキャラだけだして、2戦目でAのキャラだけ出しても、フラグ上は2つが立った事でイベントが発生してしまうのです。
なので、これらのフラグを1つのタイプとして設定し、戦闘開始時に全部まとめてクリアしてしまいます。
その後、今現在戦闘に参加したキャラのフラグを再び立て直すのです。


■セーブとロード

フラグを保存する時は、立ってるフラグのIDだけを保存します。
そして、ロード時には、セーブデータのフラグIDと一致したものだけ、フラグをONにし、それ以外は全てOFFに設定します。

これらの意図として、製作途中でフラグを消したり、増やしても、セーブデータがエラーにならない。
リリース後の追加でも同様の事が言えます。これにより購入者のセーブデータが駄目にならないと言う訳です。


■総括

とりあえず、フラグの管理方法について紹介しました。
次回は、これらを使ったサンプルをアップロードする予定です。
イベント機能+テーブル機能+フラグ機能のサンプルなので、別途解説用の記事を書きます。







◆つぶつぶ主人公HP◆  ◆サンプルダウンロードの一覧◆
2014.10.14 / Top↑

すっかり、月1の更新も難しくなっておりますが、前作は2年放置したんだから凄い進歩だと開き直っている猫ダマシです。

今回は、同人ゲーム作成である意味一番「繊細」な部分である、外注さんについて書いて行こうと思います。
例によって、同人作成を目指す人や2作目の人をターゲットに記載します。
動的ゲームは、多数の素材を必要とします。
また、色々なタイプな素材が必要になりがちなので、外注さんは大変力になってくれます。


■外注とは

ここでの外注の定義は以下にしたいと思います。
①金銭を報酬とする
 無報酬や、売上山分け等は含まないものとします。

②友人など親しい人物以外
 厳密には友人でも外注なのですが、ここでは分かりやすくこうしたいと思います。

③サークルメンバー以外
 金銭のやり取りがあっても、サークルメンバーは除外とします。


■外注さんを雇おう

いざ、外注さんにお願いしようと思うと、色々と障害にぶつかります。
恐らく、全ての人が以下の情報を取得しようとして苦労すると思います。

①平均的な報酬額
 この作業を頼むとして、平均的にはどの程度かかるのか。
 予算を立てる上でも、失礼の無い依頼をする上でも、欲しい情報ですよね。

②依頼方法、相手を探す場所
 依頼を受けてくれる人を探せる場所や、依頼方法。

腐るほどある、同人製作のノウハウで、これら二つな中々良い情報が見つからない。
理由はひどく簡単で、具体的なノウハウが無いからです。

因みにキャラクター絵師さんについては、②のノウハウが確立されて来ました、ピクシブやツイッターです。
ここでは、モバイル系ゲーム企業も依頼をかけるのに使用する為、仕事を募集してる人を簡単に見つけられます。

そのほか、ドット絵や曲、エフェクト等の依頼先を探すなら、「仕事を募集している」サイトを探すと良いでしょう。
Mixiやピクシブなどでも見つけられるかも知れませんが、体験談として非常に難しい感じでした。


■外注さんに依頼を出そう

仕事を請けてくれそうな外注さんが見つかったら、依頼を出しましょう。
この時、重要な事は、具体的な指針が無い状態では、向こうも金額が言えないという事です。
そこで、やって貰いたいリストを書いて、見積もりをお願いしましょう。
見積もりに必要なのは、以下3点です。
①やって貰いたいリスト
 なるべく具体例を書きます。
 ドット絵なら、64×64ドットで、剣士キャラクターの左右移動アニメ。移動コマ数は左右それぞれ4コマなどです。
 出来れば、どんなゲームでどの様に使用するかも書きましょう。
 サンプルとなるゲームのスクリーンショットや、イメージ画像があるとベストです。
 ◆依頼書のサンプル◆

②納期
 完成品を納めて欲しい時期です。○月中旬などの文言でOKかと思います。
 デットラインがあるなら、○月後半までなら伸ばせますも書くと良いかと。

③納品方式
 ファイル形式(PNG)など、αブレンドの使用がOKか等です。


■外注さんとのやり取り

意外に思うかも知れませんが、外注さんに依頼を出してからも、結構な時間を取られます。
もちろん自分で作成するよりは、ずっと作業時間は空くのですが、それでも細かいやり取りや、資料作成にかなりの時間がかかります。
スケジュールを作る際に、外注さんに頼んだ分を「0」とするのは大変危険な行為です。
「打ち合せ」として、それなりの時間を想定しましょう。

◆想定されるやり取り
①ラフの確認
 まずラフ的なものから作って頂きましょう。
 複数頼む場合は、ここでテイストや色味等が決まります。
 ここでシッカリと確認する事で、後々の手戻りやリテイクが減っていきます。
 お互いの為に、しっかり意見を伝えましょう。

②動作確認
 動的ゲームを作る以上、作ってもらった素材は、ゲームに取り込んでコソ意味があったりします。
 単体で見ると全く問題ないけど、ゲームに取り込むと、背景やウィンドウに埋もれて見辛い等、さまざまな問題が生じます。
 素材の取り込みと、テスト。発生した問題への対処法検討と、確認作業は多岐に渡ります。

③イメージ用資料
 人間の頭の中は人によって様々です。
 自分にとって明確なビジョンがあっても、人には伝わらない事も多いものです。
 その為、思っていたものと大きく違うモノが上がってくる事もあります。
 これを防ぐ為にも、やって貰うリストの段階で、なるべくイメージ画像を付けましょう。
 それでも、この問題は発生します。その場合は、さらに詳しい資料を作成するか、イメージと違う部分を明確にする資料を作って送りましょう。


■外注さんの力

 クオリティを求めると、どうしても外注さんに頼らざる得ない部分が出てきます。
 特に私は絵が全くかけない人間なので、同人ゲームを作る以上、素材の依頼は不可避になります。
 しかも、作成して貰った素材が自分のゲームで動くと、楽しいしモチベーションも上がります。
 完成への責任も上がり、未完成になる可能性が上がるかもしれません。

 ◆外注さんパワー
  外注さんパワー
  こんなサンプルからも、素敵がエフェクトが完成します。







◆つぶつぶ主人公HP◆  ◆サンプルダウンロードの一覧◆
2014.08.17 / Top↑
突然ですが、吉里吉里のデバックモードをご存知でしょうか。
吉里吉里のコンフィグツールにて設定できます。
設定方法はこちらを参照して下さい。

今回はちょっと踏み込んだ所で、動的ゲーム制作における、デバック機能活用を考えてみます。
具体的には、処理情報をコンソールへ出力し、バグの原因を解明する方法と言った感じです。


■コンソールへの出力

スクリプト内に以下の記述をする事で、
Debug.message("この内容がコンソールに出力されます");
Ctrl+F4で開くコンソールウィンドウに情報を出力する事が出来ます。

当然ですが、変数も使用可能です。
Debug.message("表示位置:" + left + "/" + top);
この場合、leftとtopが変数です。これにより以下の様な文字がコンソールに出力されます。
表示位置:100/95

ここで、更にでバックモードの時だけコンソールに出力する様に設定できます。
//デバック対応
if(System.getArgument("-debug") == "yes")
{
Debug.message("表示位置:" + left + "/" + top);
}
これで、デバックモード中のみ、コンソール出力します。


■動的ゲーム用のデバック機能

ノベルゲームとの違いとして、動的ゲームはシーケンシャルな処理とはならず、通常にデバックメッセージを出力すると、過剰に出力され、結果がわかりにくくなりがちです。
特にコンティニュアスハンドラでの処理でエラーが発生すると、原因特定に時間がかかります。
何せ、高速で処理を回転させているので、普通に出力すると、何百行とデバックメッセージが出力されてしまいます。
これらを解決する方法として、私がやっている方法を紹介します。

コンティニュアスハンドラについては、当ブログでも紹介しました。こちらをご覧下さい。
◆第12回「コンティニュアスハンドラの利用」◆


//------------------------------------
// コンティニュアスハンドラ
//------------------------------------
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;
  }
}
コンティニュアスハンドラ内でエラーが出るとcatch(e)に処理が飛びます。
これを利用して、配列に出力内容を入れておき、エラー時にそれを出力します。
出力内容としては、直近5個のファンクションの開始と終了を入れておきましょう。

●改造後(出力箇所)
  catch(e)
  {
    //デバック対応
    if(System.getArgument("-debug") == "yes")
    {
      var i;
      for(i=0; i<start_function.count; i++)
      {
        Debug.message("★スタートファンクション[" + i + "]:" + start_function[i]);
        Debug.message("★エンドファンクション[" + i + "]:" + end_function[i]);
      }
    }
    throw e;
  }

これで、どこで何が原因で落ちたのか一目瞭然。レアケースのバグにも非常に対応しやすいです。







◆つぶつぶ主人公HP◆  ◆サンプルダウンロードの一覧◆
2014.04.16 / Top↑