南極大緑 2023/07/30 10:32

TSロリ魔法少女のETDシミュ作成記録。その6(二重キャンセルの防止について)

〇その6 二重キャンセルの防止について
当初はこの項目を個別に記事にするつもりはありませんでしたが、想定していたよりも苦戦したので予定を変えて記事にします。

◆ゲームプレイの流れについて
現在私が作成しているゲームは、あらゆる行動の基本となる「ベース画面」から開始し、トラップを配置する「トラップ画面」へ移動した後、ピクチャボタンによる選択肢で「階層」を選択し、「トラップ」を選択するという流れになっています。
実際のプレイ画面で流れを現すと以下のような感じになります。






◆各状態のキャンセルについて
この内、「トラップの選択」は戻すボタンでキャンセルでき、「階層の選択」は階層選択状態で右クリックすることでキャンセルできます。さらに「トラップ画面」から「ベース画面」へ戻るときは「戻るボタン」で戻れるのですが、このトラップ画面→ベース画面の処理を右クリックでも出来るようにします。
クリックによってゲームを進行するシミュレーションゲームは、右クリックでキャンセルや前の画面に戻れるというのが直感的な操作だと思うからです。



◆キャンセルの対象について
右クリックによるキャンセルは画面のどこで押しても反応させる必要がありますので、ピクチャボタンではなくマップイベントで処理します。
しかしその場合、右クリックによるキャンセルの対象を制御する処理が必要となります。対象を決めずに右クリックキャンセルを実装すると、「階層選択」をキャンセルつもりだったのに「トラップ画面」をキャンセルし、ベース画面まで戻ってしまう、というような事態が起きてしまうからです。



◆第一層選択状態のキャンセルについて
前回の記事で階層選択の解除は記述しましたが、その処理に手を加えます。
まず第一層のピクチャをボタン化しているイベントで、ボタン押下時にスイッチ5をonにする処理を入れます(以下1枚目)。
次に、キャンセルイベントそのものにスイッチ5をoffにする処理を入れます(以下2枚目)。
また、キャンセルイベントの出現条件をスイッチ5で管理します。スイッチ5がonになっている時は階層選択を右クリックでキャンセルでき、offの時は右クリックをしても何も起きないというイベントにします。
これにより、第一層ボタンを押した後は右クリックのキャンセルが有効化され、実際に右クリックでキャンセルした後はイベントが無効化されて、再び第一層ボタンを押すまでは無効化状態が維持されます。





◆トラップ画面のキャンセルについて
次に階層選択状態ではないトラップ画面で右クリックをした場合にベース画面へ戻る処理を作成します。
上記2枚目の画像でスイッチ6をonにしていますが、これは右クリックでトラップ画面からベース画面へ戻るイベントを呼び出すためのスイッチです。
実際の処理は以下のようになっており、「スイッチ6がon」でかつ「キャンセル変数が2以上」の場合、2ページ目の実行条件を満たすため2枚目の画像のような処理となります。
2つの呼び出し条件を満たしていない場合1はページ目の状態(1枚目画像)となり、この時は右クリックしてもキャンセル変数が+1されるだけで画面に動きはありません。
また呼び出し条件を満たして2ページ目のイベントが実行されベース画面に戻る際、スイッチ6をoffに、キャンセル変数を0にする処理を組み込んでます。これは黄色の戻るボタンで呼び出すコモンイベント5も同様です。
都度リセットした方が管理が楽です。




◆キャンセル変数について
このトラップ画面のキャンセルを変数で管理している理由としては、スイッチのみで管理しようとすると「階層選択」と「トラップ画面」の両方をキャンセルしてしまい、「階層選択」の解除をすっ飛ばしてベース画面まで戻ってしまうからです。
当初はスイッチ6のみで管理しようとしていました。その場合、「第一層」ボタンを押した後、右クリックすることでスイッチ6がonとなり、このタイミングでトラップキャンセルの2ページ目の出現条件を満たしてイベントが実行されます。
てっきり私は、この2ページ目に切り替わる処理と、2ページ目に記載の右クリックした場合にベース画面に戻るという処理は別々、一旦イベントが途切れるものと思っていました。一度目の右クリックでページ2に変わり、もう一度右クリックすることでページ2に記載のイベントがおきるというイメージです。
しかし実際にはそうではなく、実行条件を満たして2ページ目に切り替わるのと同時に、2ページ目に記載のイベントが実行されてしまったのです。
つまり、「階層選択」している状態で右クリックを押すと、そのままベース画面まで戻るということです。
これでは、「階層選択」をキャンセルして別の階層を選択するという段階をつくることが出来ません。「階層選択」状態からベース画面に戻るために、2回右クリックが必要なようにしたいわけです。
そこで、変数で管理を行えば指定した回数で出現条件を満たせると思ったわけです。
「階層選択」状態で一度右クリックすると、スイッチ6がonになり同時にキャンセル変数が+1されます。この状態ではまだ2ページ目の出現条件を満たしていないので、階層選択を解除した状態で一度止まってくれます。そのうえでもう一度右クリックをすると、変数がさらに+1され、キャンセル変数2以上という条件を満たしながら同時に記載のイベントを実行するためベース画面に戻れます。
ちなみに、ベース画面からトラップ画面に移動した直後は右クリック一回で戻れるようにする必要があるため、以下1枚目画像のようにトラップ画面への移動イベントにスイッチ6のonとキャンセル変数代入2を組み込んでます
また、「第一層」ボタンを押した後はキャンセル変数が0でなければ上記の2回右クリックしてキャンセルという前提が崩れるので、以下2枚目画像のように「第一層」ボタンで呼び出すコモンイベント10にキャンセル変数乗算0を組み込み、ついでにスイッチもoffになる方が管理しやすいのでスイッチ6をoffにする処理も組み込んでます。
もしかすると変数で出現条件を管理する場合そもそもスイッチはいらないかもしれませんが、現在の処理でも問題はないので一旦これでいきます。



今回はここまで!
まさかキャンセルが二重に実行されてしまうとは思っていませんでしたので解消に結構時間がかかりました。
「スイッチon→イベントページ切り替え→イベント実行」
この一連の流れが右クリック一回で全部連動して行われるというのが誤算でしたね。上でも書いたようにページ切り替えで一回イベントが止まると思ってたので。
かなり冗長な書き方になってしまいましたがまあ解決したので良しとしましょう。


閉廷!

記事のタグから探す

月別アーカイブ

限定特典から探す

記事を検索