スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
[ --/--/-- --:-- ] スポンサー広告 | TB(-) | CM(-)

ノベルゲームコード生成機 その2

コード解説です。
ノベルゲーム本体の解説が中心で、コード生成機の解説は特にはしません。あしからず。

まず、ノベルゲーム本体のコードです。



文字化けするのはコード生成時のための仕様です。
初めの方の
meta http-equiv="Content-type" content="text/html; charset=Shift-JIS"

meta http-equiv="Content-type" content="text/html; charset=UTF-8"
に変更すれば解消されます。
コード生成機のコードもここに載せようとしたところ、それがうまく表示されなかったので、ブラウザでhtmlファイルを開いてソースを表示させて見てください。

コード生成機は、スクリプトなどの書いてほしいところを書いてもらい、 それをノベルゲーム本体の該当箇所に組み込むだけのコードです。
なので、作りはちょっと荒いです。
(「script」を「sct」と略した謎の行為もあります(笑) 「select」の略と捉えられかねませんね)


さて、ノベルゲームなのですが、これは自分のアイデアであって本に書いてあるような最適な考えだとは限らないということだけまず述べておきます。

で、そのアイデアなのですが、いたって単純。
スクリプト用の配列と分岐点用の2次元配列を用意し、stateを操作してそれらを順次表示・動作させていくだけです。
スクリプト用の配列は
var script = ["Fst", "A", "B", "C", "D", "E"];
分岐点用の配列は
var junc = [ [,,,,,,], [1,,,,,,1], [2,4,5,,,,], [4,,,,,,2]];
のように用意します。(空要素は別のところで0に置換)
なお、script[0]は、スクリプト番号(1から始まる)と対応させるためにわざと捨てました(意味のない要素を入れる)(ついでにjunc[0]も同じく)

さて、内容表示の基本なのですが、int型変数用としてstateを用意します。
そしてstateが1だった場合はscript[1]の内容、2だった場合はscript[2]の内容を表示するようにします。
こうすればstateがどこへ行くかだけ見ればいいことになります。
分岐点でない限りstateはただ+1されていくだけです。


では、分岐点だった場合です。
先ほどのjunc配列の各要素の配列とstateを関係させて分岐点を作ります。

分岐点かどうかからの判定から説明していきます。
junc配列はその各要素の配列がこのような感じで入れらています。
[分岐点スクリプト番号,分岐先1,同2,同3,画像番号,SE番号,BGM番号]
stateが分岐点スクリプト番号と同じになったことを確認したらそれ相応の処理を行います。

例えばstateが2になったとしましょう。
このとき、junc配列内の各要素を見ていき、junc[][0]が2のものを探します。
先ほど用意したものの場合はjunc[2]:[2,4,5,,,,] が該当します(junc[2][0]がstateの2と一致)

このとき分岐先1と分岐先2の要素にそれぞれ4と5が入っています。
ここで分岐先用の処理を行います。
具体的には、選択肢ボタンを表示させ、それぞれのボタンを押したらそれぞれのstateへ移動するようにします(選択肢1だった場合はstate=4、選択肢2だった場合はstate=5)


このとき、画像番号の要素になにか入っていたら、それに対応した画像を表示させるようにします(SE、BGMも同様)

これだけです。


では、全体の流れを見ていきましょう。

・・・→ボタンが押される→stateの移動→stateに応じたスクリプトの表示→stateが分岐点かチェック(junc[][0]と比較)→分岐点だった場合はボタン表示などの処理を行う(画像、音声処理もここ)→ボタンが押される→・・・(繰り返し)

細かいこととしては、スクリプトがアニメーション中だった場合にボタンが押されたときはスクリプトを全文表示にすることくらいでしょうか。



アイデアとしてはこんな感じです。
作っている途中から画像やら音声やらを組み込んだので、コード全体がちょっとからまってるような気がしますが、今さら直す気ないです(苦笑)
あと、onload時の処理にやたら手間がかかったのは意外でした。
とりあえず動作するようにはしたのですが、もうちょっとすっきりしたやり方はなかったもんですかね・・・。

えっと、以上で解説は終わります。
その他聞きたいことがあったらまた聞いてください。
バグなど発生しましたら、対応できる範囲で対応していきたいと思います。

それでは!

関連記事
[ 2012/01/06 20:04 ] プログラミング JavaScript | TB(0) | CM(0)

コメントの投稿













管理者にだけ表示を許可する

トラックバック

この記事のトラックバックURL
http://kiyoshiroom.blog.fc2.com/tb.php/89-172a84f9









上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。