またまた自作メニューのセーブとロードの処理で問題にぶち当たった。自分用と誰か見てくれている人用にメモを残しておきます。



セーブをした後にメニューからロードを選んだら、自作メニューのピクチャが消えない問題が発生。


じゃあロードした後にピクチャを消す処理をしてみる・・・が消えない!?



ダメな例

39のPhoto



当たり前と言っちゃあ当たり前なんですが、ロードした瞬間にセーブした直後の所まで飛んで行ってしまうんですよね。



39のPhoto



じゃあロード前に・・・、同じ事です。今現在のピクチャや変数などを変化させても、どうせ変化させてないセーブの所まで戻ってしまいます。


じゃあセーブする前に、その自作メニューのピクチャを消せば良いんじゃあ・・・そうもいきません。


自作メニューでセーブの処理をする時、セーブの画面が表示されていないと、ちゃんとセーブされたかゲームをプレイする人が解らなくなります。



つまり
セーブをした直後はセーブ画面が表示されていて、ロードした直後はセーブ画面が消えてなければいけない、という処理になります。



ここで色々とネットで情報を調べながら、自分でも色々実験しました。

そしたらこんなのをネットで発見


https://twitter.com/#!/hakase_wbot/status/191800195229556736
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1484241069


ふむふむ、なるほど


そして実験結果で以下のような事が判明



39のPhoto


この場合はピクチャは消去されません。ロードコマンドの後のコマンドは全て実行されません。セーブされた所に飛んで行ってしまいます。※セーブデータがなかった場合は処理が続きます。


39のPhoto



セーブコマンドでセーブをすると、セーブをした時はその後のコマンド(ここだとキー入力後テキストが表示される)が実行されます。つまりそのまま処理が続くという事になります。


という事は、そのままセーブをした後の画面の処理ができる事が解りました。



別な実験では
ロードして、このセーブデータ1の所に飛んでいった場合、その後のコマンドが実行されません。

ネットで得た情報だと、セーブ元のイベントの最初からイベントが勝手に実行される、とあります。


以下の例だと、ロードしてセーブ1に飛んだ後は、ピクチャ表示からイベントが自動で実行(多分)される事になります。
これは、ラベルでジャンプした場合やコモンイベントのイベントの挿入などで、色々な処理が続いていた場合のセーブデータでも、イベントの挿入前の一番最初に戻る事になります。



39のPhoto



つまり、メニューでセーブ画面を開いてセーブした場合、それをロードすると メニューを表示する一番最初のコマンドまで戻る(最初から実行)という事になります。(イベントの挿入などで処理が続いていた場合)


それだと、ロードした直後にまたメニューのピクチャなどが表示されてゴチャゴチャになります。



そこでセーブ・ロードの仕組みを理解した結果、このコマンドを思い出しました。



39のPhoto



これはセーブデータがあった場合、そのセーブデータの変数などを書き換えるコマンドです。


セーブした直後はセーブ画面を残し、ロードする時にセーブ画面を消す、という処理をする場合、
ロードする時にこのセーブデータの書き込みコマンドで[セーブ画面を消したい変数]を1代入します。


そしてロードすると・・・、メニューが再び表示され、セーブ画面と重なりゴチャゴチャしたままです。


そこで、メニューの一番最初に条件(変数)でこの[セーブ画面を消したい変数]が1だった場合、セーブ画面およびメニューが表示させない処理を組みます。最後に[セーブ画面を消したい変数]を0に戻し、


これで実行すると・・・成功!


これでセーブ・ロードの処理とはおさらばできそうです。


自分用メモ


自作メニューのセーブとロード画面を作る際に問題に直面。なんとか理解できたので自分用のメモとして残しておきます。



システム変数24番の

24番:[読]セーブデータ読込判定(1=成功 0=失敗)
 読み取り専用変数です。「ファイル操作」で他セーブデータの変数を読み込む際、そのセーブデータが存在するかどうかを判定するのに使えます。
 例:セーブデータ1番が存在しないときにセーブ1番のシステム変数24番を読み込むと、0の値が格納される。セーブデータ1番が存在する場合は1が格納されている。
※公式マニュアルから転載



は、変数操作などで代入したいセルフ変数を選んで、このシステム変数24番を指定しても意味はありません。(多分)



イベントコマンドの セーブ・ロード操作 各セーブデータの内容読み書き

変数・文字列の読み込み = データ 1 番の 9000024

という風に、"変数呼び出し値"で読み込まないと意味がないです。(多分)



39のPhoto



9000024というのが"変数呼び出し値"でマニュアルに載っています。


1000000(百万番)の数字から各変数を指定できるようになっていて、9000000台がシステム変数の台。


なので9000024はシステム変数の24番=24番:[読]セーブデータ読込判定(1=成功 0=失敗)
という事なんですね。


自作のセーブ・ロード画面を作るさいに、システム変数24番を変数操作で使うのかな?と散々悩んだ結果、基本システムや他の人のセーブコモンなどの中身を調べてやっと理解できました。多分マニュアルにも載っていなくて、ちょっと理解するのに苦労しました。。。


応用というか別な使い道で


変数・文字列の読み込み = データ 2 番の 1101000000


という風に 変数呼び出し値 を可変DBなど色々指定してやれば、各セーブデータの色々な変数を読み込んで、それをセルフ変数などに代入したりして、それを表示してやればセーブ・ロード画面を作ることができます。


wikiなど読んでいくと、最初から入っている基本システムみたいなのを弄っていくといい、みたいな感じになっていましたが、自分にはいまいち内容が掴めず。


既存のシステムを弄っていくと、別な部分の処理が変になったりして収集がつかず、どこが繋がっててどこを直していいのか解らなくなってきましたガーン



自分が作りたいゲームはRPGじゃなくてアドベンチャーで、RPGっぽいメニューや戦闘などの処理は必要ありません。


なので、まっさらな状態で一から作っていく事にしました。


その方がエディター全体を理解できるので。その分時間もかかるんでしょうが…(゜д゜;)