ページ 12

解決済み スイッチの操作でランダムエンカウントをしたい

Posted: 2020年6月14日(日) 19:15
by sousei0303
特定のスイッチがONになっている状況でのみ
ランダムエンカウントのように
歩数を計算して敵と戦うようにしたいのですが、うまくいきません。

コモンイベント
条件分岐→スイッチON→変数・歩数カウント→戦闘の処理
最初にもどる
を並列処理でまわせばいいのかなと思い画像のようにやってみたのですがうまくいきません。

(同時に10歩歩くと特定キャラだけHPが減少するコモンイベントは動いていました。)

通常は戦闘が起こらない場所なので、スイッチの操作でそのイベント中だけエンカウントが起きるようにしたいと思っています。+いくつものマップに同様のコモンイベントを発生させたいです。

しばらく調べてみたのですがどこが間違っているのか分かりません。
どなたか教えていただけませんか。よろしくお願いします。

Re: スイッチの操作でランダムエンカウントをしたい

Posted: 2020年6月14日(日) 23:11
by 冷やっこ
こんばんは。

まず画像を見て気になったのは自動実行になっている事です。並列処理でないとプレイヤーが動かないのでは?と
思ったもので。

viewtopic.php?f=23&t=9423
あと、以前にも書きましたが $gameParty._steps スクリプトを使用する場合はのこのコモンイベントを
実行する前のタイミングで予め $gameParty._steps = 0 で歩数を0に変更(リセット)しておかないと
うまく動かないと思います。

Re: スイッチの操作でランダムエンカウントをしたい

Posted: 2020年6月18日(木) 12:45
by sousei0303
こんにちは、ご返信遅くなってしまいすみません。
以前もご教示くださりありがとうございました。
おかげでとても助かっております。

ご指摘いただいた箇所を修正してみたのですがうまくいきませんでした。
ダメージが止まるか、両方とまるかしてしまうため
もしかしたら歩数の計算でかちあっているのかなと思い、
変数に代入するものをプレイタイムにしたところ両方動きました。
ただ、一度切りになってしまうためぐるぐるまわすことはできません。
この場合stepではなく
$gameParty._time= 0と書けば同じようにプレイタイムを0にして動かせますか?
(歩数の変数を並列処理で違う条件で動かすとやっぱり動きにくくなるものなのでしょうか…)

Re: スイッチの操作でランダムエンカウントをしたい

Posted: 2020年6月18日(木) 16:49
by sally
横から失礼します。

歩数で計算する場合
-----------------
【コモンイベント トリガー:並列処理】
変数【歩数1】に歩数を代入
ラベル【繰り返し処理】を設定
条件分岐:【歩数1】が歩数と同値
 :ラベル【繰り返し処理】へ飛ぶ
変数【歩数1】に歩数を代入
>変数【歩数1】を15で剰余
>条件分岐:【歩数1】が0と同値
 :戦闘処理
 :イベント処理の中断
ラベル【繰り返し処理】へ飛ぶ
----------------
とすれば、歩数が15の倍数の時だけエンカウントするようになります。
ラベルはループでも代用可能です。
ただし、このやり方はイベント中にゲームデータの歩数へ何も操作を行わないことが前提となります。
また、数にある程度ばらつきをもたせたい場合は、除算する数字を乱数にしてください。

「>」のマークがついているところは、別マップでも同じイベントを作るのであれば、
こちらは専用のコモンイベントを用意すれば使いまわしが効く箇所になります。

Re: スイッチの操作でランダムエンカウントをしたい

Posted: 2020年6月19日(金) 04:01
by 冷やっこ
こんばんは。
もしかしたら歩数の計算でかちあっているのかなと思い、
変数に代入するものをプレイタイムにしたところ両方動きました。
おっしゃる通り別イベントでそれぞれ $gameParty._steps = 0 で歩数をリセットしていると思いますので
そのためにおかしな挙動をしているみたいですね。
$gameParty._time= 0と書けば同じようにプレイタイムを0にして動かせますか?
プレイ時間のリセットでしたらこちらにありました。
viewtopic.php?t=2084

コード: 全て選択

Graphics.frameCount = 0;


歩数のリセット、プレイ時間のリセットは文字通りゲームデータの数値をリセットしますので
例えば後々ゲーム開始からの歩数やプレイ時間でシナリオの分岐などをしたい時にそれができなくなってしまう
という事もありますのでsallyさんがご提案下さっている数値のリセットを使用しないでイベントを組むのも
一つの手だと思います。
sallyさんのイベントを参考に私も数値リセット不要のイベントを組んでみました。

コード: 全て選択

◆条件分岐:スクリプト:$gameParty._steps != 0
  ◆条件分岐:スクリプト:($gameParty._steps %= 15) == 0
    ◆戦闘の処理:こうもり*2
    ◆
  :分岐終了
  ◆
:分岐終了
上記は並列処理で15歩歩くたびにエンカウントします、ご参考になれば。

Re: スイッチの操作でランダムエンカウントをしたい

Posted: 2020年6月19日(金) 12:25
by sousei0303
ご教示くださりありがとうございます!
ラベルとループは使ったことがなかったので今回ご提案いただいた内容をもとに初めて使ってみました。
ただ、うまく動かず、
おそらく三行目が間違っていると思うのですが
条件分岐変数を選ぶと定数か変数を選ぶ仕様になっていてうまくいきません。
(3行目を消すと全く動かずにエンカウントし続けます)

この部分をどうすればいいか分からないので教えていただけないでしょうか。

Re: スイッチの操作でランダムエンカウントをしたい

Posted: 2020年6月19日(金) 13:15
by sally
ごめんなさい。ご説明内容がわかりにくかったかもしれません。

あと、ご指摘いただいた内容でミスが見つかりました。
1つは最後のラベルジャンプは、イベント処理の中断。
もう1つは3行目の条件分岐は基本的に不要でした。
 ┗入れていた理由は歩いているかどうかを判別させたかったからなのですが、
  ゲームデータの歩数を使う分にはこの判別処理が不要でした…。

ツクールの表示にあわせると下記の様になります。
------------------
◆変数【歩数1】に歩数を代入
◆変数【歩数1】を15で剰余
◆条件分岐:【歩数1】が0と同値
 ◆戦闘処理
 :分岐終了 
------------------

訂正後に恐縮ですが、ご質問いただいた内容に下記、お答え差し上げます。
■ 3行目に条件分岐を用いた場合に上手くいかない
  画像を拝見すると分岐終了の後にラベルジャンプを入れているため、
  条件を満たしているかどうかにかかわらず処理が繰り返されるようになってしまっています。
  条件分岐内、分岐終了の直前にラベルジャンプを挿入すれば動くようになります。

■3行目の条件分岐を消すと延々とエンカウントし続けるという現象
 おそらくこれは歩数が0の状態でテストしているためと思われます。
 0の場合は乗除の答えが0となるためです。歩数が1以上であれば、大丈夫です。

ですが、冷ややっこ さんのご提示されたgame.stepsを使うやり方は
上記のミスや問題をスマートに解決できるやり方ですので、そちらの方が良いかと思います。

Re: スイッチの操作でランダムエンカウントをしたい

Posted: 2020年6月20日(土) 21:37
by sousei0303
sally さんが書きました:ごめんなさい。ご説明内容がわかりにくかったかもしれません。

あと、ご指摘いただいた内容でミスが見つかりました。
1つは最後のラベルジャンプは、イベント処理の中断。
もう1つは3行目の条件分岐は基本的に不要でした。
 ┗入れていた理由は歩いているかどうかを判別させたかったからなのですが、
  ゲームデータの歩数を使う分にはこの判別処理が不要でした…。

ツクールの表示にあわせると下記の様になります。
------------------
◆変数【歩数1】に歩数を代入
◆変数【歩数1】を15で剰余
◆条件分岐:【歩数1】が0と同値
 ◆戦闘処理
 :分岐終了 
------------------

訂正後に恐縮ですが、ご質問いただいた内容に下記、お答え差し上げます。
■ 3行目に条件分岐を用いた場合に上手くいかない
  画像を拝見すると分岐終了の後にラベルジャンプを入れているため、
  条件を満たしているかどうかにかかわらず処理が繰り返されるようになってしまっています。
  条件分岐内、分岐終了の直前にラベルジャンプを挿入すれば動くようになります。

■3行目の条件分岐を消すと延々とエンカウントし続けるという現象
 おそらくこれは歩数が0の状態でテストしているためと思われます。
 0の場合は乗除の答えが0となるためです。歩数が1以上であれば、大丈夫です。

ですが、冷ややっこ さんのご提示されたgame.stepsを使うやり方は
上記のミスや問題をスマートに解決できるやり方ですので、そちらの方が良いかと思います。
細かく教えてくださって本当にありがとうございます。
なぜ動かないのか
どうしてこういう動きをするのか
丁寧にお教えいただいたおかげでラベルの考え方が少し分かりました。
またラベルを使う機会にもなりました、ラベルも今後使えるようにしたいと思います。

Re: スイッチの操作でランダムエンカウントをしたい

Posted: 2020年6月20日(土) 21:53
by sousei0303
冷やっこ さんが書きました:
歩数のリセット、プレイ時間のリセットは文字通りゲームデータの数値をリセットしますので
例えば後々ゲーム開始からの歩数やプレイ時間でシナリオの分岐などをしたい時にそれができなくなってしまう
という事もありますのでsallyさんがご提案下さっている数値のリセットを使用しないでイベントを組むのも
一つの手だと思います。
sallyさんのイベントを参考に私も数値リセット不要のイベントを組んでみました。

コード: 全て選択

◆条件分岐:スクリプト:$gameParty._steps != 0
  ◆条件分岐:スクリプト:($gameParty._steps %= 15) == 0
    ◆戦闘の処理:こうもり*2
    ◆
  :分岐終了
  ◆
:分岐終了
プレイタイムや歩数が0になるというのは知りませんでした。
お教えくださりありがとうございます。確かにプレイタイムをこのイベントのためだけに0にしてしまうのは勿体ないですね。

スクリプトもご教授くださりほんとうにありがとうございます。
プログラムができなくてunityからツクールに来たので本当に助かります。
ただ、お教えいただいた内容で並列で動かしてみてもうまくエンカウントしてくれません。
プラグインが原因かと思い全部止めてみたのですが変化なしなのでプラグインが原因ではないようです。
同時に動いている歩数をもとにした並列処理ダメージの方は動いていました。

プラグイン以外に何か他に考えられる原因はないでしょうか。

Re: スイッチの操作でランダムエンカウントをしたい

Posted: 2020年6月22日(月) 01:27
by 冷やっこ
こんばんは。
プラグイン以外に何か他に考えられる原因はないでしょうか。
結論から申しますとHP増減イベントの方で $gameParty._steps = 0 を使用して歩数をリセットしている為です。
エンカウントイベントの方は15歩でエンカウントするようになっていますがHP増減イベントで10歩歩いたら
歩数を0にリセットしてしまっている為エンカウントイベントの15歩まで届かずエンカウントが行われません。
この場合はHP増減イベントも $gameParty._steps = 0 の歩数リセットは使用せずにリセット不要のイベントに
変更してあげればOKです。

…なのですが、
前回私が組んだエンカウントイベントに問題がありまして $gameParty._steps %= 15 と、このように
gameParty._steps に直接計算をしてしまうとゲームデータ歩数そのものを書き換えてしまう事がわかりました。
ですので歩数はやはり変数に代入して計算しないといけないので前回のエンカウントイベントの手直しおよび
HP増減イベントの歩数リセット不要で組んだイベントのスクリーンショットを添付いたします。
多少複雑?になってしまったのでスクリーンショットの方が色分けされていて解りやすいと思います。
11111.png
変数やスイッチに名前を付けるとかえって解りにくくなるかも?と思いましたので名前は付けていません。
追加の変数、スイッチの内容は

HP増減イベント
変数99 歩数計算用
スイッチ19 条件が一致した時に一度だけイベントを実行するため用

エンカウントイベント
変数100 歩数計算用
スイッチ20 条件が一致した時に一度だけイベントを実行するため用

以上になります。