HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2008
1219
海鮮丼ノベルゲーム作成について3解決


海鮮丼

リンク

2008/12/19(Fri) 20:10:08|NO.21726

こんばんは、海鮮丼といいます。
今、HSPでノベルゲーム作っていて、
分からないことがありましたので質問
させていただきます。

右クリックメニューや未読スキップ、ウインドウ消去
などの機能はなんとか作ることができたのですが、
既読スキップ、セーブ・ロード、回想モードの作り方
がよく分かりません。

既読スキップについては、
既読スキップと未読スキップを切り替えれるように
し、既読スキップにした場合、どうすれば読んだと
判定してスキップしてくれるのか分かりません。

セーブ・ロードは、今読んでいるところを保存して、
またロードした場合はそこから始める方法が分かりません。

回想モードは3つ表示するようにし、カーソルの↑↓で
表示を切り替えるようにしようと思っていて、
配列変数(文字列)に表示した文章を保存しているのですが、
それを複数行に分けて表示するにはどのようにすればいいのでしょうか?

お手数をおかけします。
宜しくお願い致します。



この記事に返信する


SYAM

リンク

2008/12/19(Fri) 21:33:14|NO.21728

一応、ここで出てきた機能名はおおよそどこでも使われてる?と思うので今回は問題ないと思いますが、
やりたいことを「機能名」だけで表現すると、通じなかったり誤解されたりすることもあるので注意してください。

>既読の判別

文章を表示するごとに、「ここは表示された」というフラグを立てることになると思います。
すべてのフラグを別々にするとか、
シーンごとに何ページ目まで読んだという情報にするとか。

>セーブ・ロード

極端な話、スクリプト中のありとあらゆる変数を全部保存したり読み込んだりする機能があれば、(乱数さえ使ってなければ)セーブしたときの状態に完全に戻せます。
画面は書き直したりとかする必要がありますが、それもBMPで保存しておくなんて力ワザもなくもありませんね。

実際には、必要な変数だけ保存すればよいでしょうが…
要不要の判断をミスってるのかロード後に動作がおかしくなるソフトなんてのもありますので注意してください

>回想モード
おそらく「こういう動作」というビジョンはお持ちなのでしょうが、よくわからなかったです(汗



ANTARES

リンク

2008/12/20(Sat) 00:45:35|NO.21729

○セーブ・ロード
 ある程度プレイして、セーブするのに適当なところを選んで
このシーンを再現するにはどうすればよいかを考えます。
ノベルゲームで一番多いのは、たぶん、シーン番号を記憶して、
シーン番号さえ決まればすべてを再現できるような仕組みを作ることでしょう。
最初にしなければならないのは、全体をシーンに分割し、
すべてのシーンに番号をつけること。
次に文章とシーン番号を対応させるようにします。
具体的な方法は、どのようなスクリプトを書いているかによって
全く違います。

 例えば、シーン1にはシーン1専用のスクリプト、シーン2にはシーン2
専用のスクリプトを書いているのであれば、各シーンのここに飛んでくれば
概ね再現できる、再現しやすいというところにラベルを付けます。
ラベルを変数に記憶できるので、この場合はシーン番号のかわりにラベルを
セーブしておくといいでしょう。ロードしたらそのラベルにジャンプするだけ
ですが、その前に変数の調整をしなければならない場合もあります。
これもどのようなスクリプトを書いているかによって変わってきます。

 シーン1用の文章、シーン2用の文章というようにシーンごとの文章を
用意して、シーンに関わらず、ある程度共通のスクリプトを書いている場合は、
ロードしたシーン番号まで文章を読み飛ばしてやればすみますが、
文章の記憶の仕方によっては読み飛ばす必要すらない場合もあります。
この辺もどのようなスクリプトを書いているかによって変わってきます。

 画像を使っている場合は、画像にも番号をつけます。1シーン1画像なら
画像番号がそのままシーン番号になりますから管理しやすいでしょう。
シーンによって画像数が異なる場合は、各シーンがどの画像番号から始まる
かを配列に記憶するのが普通ですが、ほかにも方法があるかもしれません。
画像番号と画像ファイルの対応づけも考えなければなりませんが、
これもいくつかの方法があります。画像番号をそのままファイル名に
してしまう方法、画像番号を添え字とする配列にファイル名を記憶する
方法などです。

 このように、シーン番号を使う方法1つをとっても非常に多くの
バリエーションがあり得ますので、全体としてはほとんど無限といって
いいくらいのバリエーションがあります。一方、その大部分は
既に書かれたスクリプトと相容れないものになります。
したがって、こうすればできるという定型的な方法はありません。
既に書かれたスクリプトに合うような方法を自分で考え出すしかないのです。

 もっとも、場合によっては、セーブ・ロードをしやすくするために、
既に書かれたスクリプトの一部を書き直すことも考えた方がいいかもしれません。
セーブ・ロードのことを考えずに書かれたスクリプトは、そのままでは
セーブ・ロードを実現できない、あるいは実現は可能だとしても
非常に面倒くさくなったり無駄が多くなったりするので書き直した方が
いいということも多いのです。



海鮮丼

リンク

2008/12/20(Sat) 22:07:48|NO.21757

お二人とも詳しく解説していただき、有難うございました。
とても参考になり、助かりました。
お二人の回答を参考にして、製作していこうと思います。

>「機能名」だけで表現すると、通じなかったり誤解されたりすることもあるので注意してください。

はい。以後気をつけます。



ONION software Copyright 1997-2023(c) All rights reserved.