夏のコミケ「コミックマーケット84」の準備を進行中。
月曜日 東地区“ポ”ブロック−33b「るてんのお部屋」
週末を利用して、ダイアログ管理システムを作成していました。
□コミケ84 サンプル 003
「ダイアログ管理システムとは何ぞや」ということですが、リスト ダイアログを使って、設定ウィンドウなどの、「ネストするメニュー」を実現するためのフレームワークです。
なぜそんなものを作ったかというと、これまでの経験からです。
私は基本的にシミュレーションゲームを作ることが多いです。そうなると、多くのダイアログ(それもネストする)ものを表示する必要があります。
分かりやすく言うと、初代ドラゴンクエストのツリー状のメニュー画面のようなものを、複数のダイアログで実現するわけです。
これまで、PC、iアプリ、Android、で様々なゲームを作って来ましたが、このメニューを実現するシステムをどう作るかが、シミュレーション系ゲーム開発の肝になってきます。
管理しやすいシステムを作ると、開発効率が上がります。
逆に、管理しにくいシステムを作ると、開発効率が下がります。
アクションゲームを中心に作る人には、あまりぶち当たらない悩みかもしれません。
というわけで、週末の時間を利用して、シミュレーション系ゲームの、開発効率を大きく左右する部分を実装していました。
このダイアログ管理を含む、ダイアログ部分全体のコードは、現在のコード全体の約1/4になります。いかに比重が大きいかが分かります。
というわけで、実際に作ったダイアログ管理システムを利用して、ネストするメニュー ダイアログを実装している部分のコードです。
かなりシンプルにできた方だと思います。
/**
* ダイアログ管理 構造
*/
// ダイアログ構造
var dlgTree = {txt: "ダイアログ構造", msg: "ルートです。", nst: [
{txt: "選択肢0 末端"}
,{txt: "選択肢1 項目2つ", nst: [
{txt: "選択肢1-0"}
,{txt: "選択肢1-1"}
]}
,{txt: "選択肢2 項目3つ", nst: [
{txt: "選択肢2-0"}
,{txt: "選択肢2-1"}
,{txt: "選択肢2-2"}
]}
,{txt: "選択肢3 非表示混じり", msg: "項目1,3を非表示", nst: [
{txt: "選択肢3-0"}
,{txt: "選択肢3-1", enbl: false}
,{txt: "選択肢3-2"}
,{txt: "選択肢3-3", enbl: false}
]}
]};
// 選択内容保持
var sel = 1;
var sel1 = 0;
var sel2 = 0;
var sel3 = 0;
// ダイアログ処理
dlgTree.fnc = {
pre: function(brnch, arg) {
arg.selDflt = sel;
arg.datArr[1] = brnch.nst[1].txt + " 選択" + sel1;
arg.datArr[2] = brnch.nst[2].txt + " 選択" + sel2;
arg.datArr[3] = brnch.nst[3].txt + " 選択" + sel3;
}
,pst: function(brnch, res) {
if (res != -1) {
sel = res;
console.log("sel - " + brnch.nst[res].txt);
}
}
};
dlgTree.nst[1].fnc = {
pre: function(brnch, arg) {
arg.selDflt = sel1;
}
,pst: function(brnch, res) {
if (res != -1) {
sel1 = res;
console.log("sel1 - " + brnch.nst[res].txt);
}
}
}
dlgTree.nst[2].fnc = {
pst: function(brnch, res) {
if (res != -1) {
sel2 = res;
console.log("sel2 - " + brnch.nst[res].txt);
}
}
}
dlgTree.nst[3].fnc = {
pst: function(brnch, res) {
if (res != -1) {
sel3 = res;
console.log("sel3 - " + brnch.nst[res].txt);
}
}
}
// ダイアログ設定
var dlgOpt = {
cnslBck: true, selBck: true,
btnDflt: crocro.game.Dialog.BTN_BCK
};
// ダイアログ管理
crocro.game.Dialog.Manager.start(dlgTree, dlgOpt);
さてと、次はリソースの管理システムを作らないといけないです。
サクサクと進めましょう。