WIZ-CODE.blog

JavaScriptやAjaxをテーマとしたブログです。

*

JS ADV.js イベントで使う変数を初期化する

   

JS ADV.jsではゲームで使用する変数を大きく三つに分類しており、this.MDataオブジェクトにこれらの変数が登録されるようになっています。 具体的にはゲーム内容にかかわる変数はgameVarsオブジェクトに、システムに関する変数はsystemVarsオブジェクトに、テンプレート用のデータは配列templateに格納します。たとえば、プレイヤーの名前を格納する変数playerNameは、ゲーム内容に関係するのでgameVarsに入れます。デフォルトのgameVarsオブジェクトはただの空のオブジェクトです。
//変数playerNameをgameVarsオブジェクトに登録したところ
gameVars: {
	playerName: 'DORAEMON'
}
次にsystemVarsオブジェクトには効果音などシステム関係のデータを入れます。SEオブジェクトが一つだけ登録されており、ここにはメッセージ・ウィンドウをクリックしたときの効果音をonContinueプロパティに、選択肢を回答したときの効果音をonSelectChoiceプロパティに設定できます。値はgame_data.adv.jsに登録した効果音名を入れます。
//SEオブジェクトに各種効果音を登録したところ
systemVars: {
	SE: {
		onContinue: 'beep01',
		onSelectChoice: 'beep02'
	}
}
templateプロパティはPrototype.jsライブラリのTemplateクラスを利用するために使用し、テンプレートにしたいデータの集まり(オブジェクト)を追加します。
//配列templateにテンプレート用オブジェクトを登録したところ
template: [
	{ name: 'WIZARD-CODE', favorite: 'JavaScript game' },
	{ name: 'DORAEMON', favorite: 'dorayaki' }
]
そしてinitVarsはゲームで使う変数を初期化するメソッドです。paramプロパティに入れるデータは、これらの三つのデータをまとめたオブジェクト({}で閉じられたデータ)で、上記の三つのデータをイベント・オブジェクトのparamプロパティに設定すると次のようになります。
.........
.........
{ type: 'initVars', param: {

	gameVars: {
		playerName: 'DORAEMON'
	},

	systemVars: {
		SE: {
			onContinue: 'beep01',
			onSelectChoice: 'beep02'
		}
	},

	template: [
		{ name: 'WIZARD-CODE', favorite: 'JavaScript game' },
		{ name: 'DORAEMON', favorite: 'dorayaki' }
	]

} }
.........
.........
下にこのあいだのクイズ問題のイベントデータを抜粋してみました。gameVarsオブジェクトに登録できるデータは文字列、数字、配列と様々です。ちなみに関数/メソッドも登録できますが、そのままでは返り値などが利用できません。Prototype.jsの説明によると、関数/メソッドを機能させるには、toTemplateReplacementsメソッドをgameVarsオブジェクトに設定しなければなりません。詳しくは後述します。 もしくは、こちらを参照ください⇒日本史クイズのイベントデータ
//QUIZ SAMPLE
		{
			name: 'quiz001',
			flag: null,
			story: null,
			data: [
				{ type: 'initVars', param: {
					gameVars: {

						//名前はプレイヤーに入力させるため、始めは空にしておく
						playerName: '',

						//正解数をここに入れる
						rightAnswers: 0,

						//全問題数をここに入れる
						totalQuestions: 3,

						//正解数に応じてコメントを用意
						//正解数をそのまま配列のインデックスに使えるように並べている
						evaluation: [
							'おお勇者よ、全問不正解とは情けない',
							'ひっかけ問題に引っかかったのかな?',
							'惜しい、あと一問!',
							'全問正解、すばらしい!'
						]
					}
				} },
.........
.........

 - JavaScript/Ajax, ゲーム , ,