変数を用いたHP回復について

n_libera
記事: 18
登録日時: 2019年3月12日(火) 11:37

変数を用いたHP回復について

投稿記事by n_libera » 2019年5月29日(水) 17:23

こんにちは。
当方、macでツクールmvのゲームを製作中なのですが、
3点困ったことがありましてアドバイスを頂けると嬉しいです。

<前提>
・HP管理を変数操作・コモンイベントを使って、設定しております。
・最大HPは3です。

<1点目の質問>
追いかけてくる敵に接触するとダメージを受ける仕組みで、
1度ダメージを受けた段階で、追いかけられつつ回復アイテムを使うと、
敵が早く動き始めすぐに追いつかれHPが削れてしまう自体になってしまいます。
解決方法はありますでしょうか?
(アイテムによる回復設定:添付01/01_2)

<2点目の質問>
1点目の続きになりますが、
また、追いつかれ敵に接触するとプレイヤーと敵共にフリーズしてしまうバグも発生してしまいました。
解決方法はありますでしょうか?

<3点目の質問>
アイテムによる回復はこのように設定しており、(添付01/01_2)
「体力が1回復した。」という表示が出るようになっております。
ですが、HP2の状態の時に回復し、HP2→3の状態になり「体力が1回復した。」の表示が出る際、立て続けに「体力は満タンなので、使えません。」と表示されてしまいます。
HPが3になった瞬間、条件分岐の3の欄に引っかかってしまいこのようになると思うのですが、どうすれば解決できますでしょうか?

アドバイス・または解決してくださるとありがたいです!
それでは用件のみとなりますが、失礼いたします。
添付ファイル
image01_2.png
image01.png

astral
記事: 106
登録日時: 2018年11月14日(水) 00:21
連絡を取る:

Re: 変数を用いたHP回復について

投稿記事by astral » 2019年5月29日(水) 17:48

こんにちは。
3については、HP3から条件分岐するよう入れ替えれば問題ないはずです。
それでも問題があれば、条件分岐内の分岐終了の直前にイベント処理の中断を入れてください。

1と2は、敵をスイッチオン時に停止できるようにして、回復後例えば並列処理で60ウェイト後にそのスイッチをオフにして敵を動かす対策にするとかです。

バク自体はイベントコマンドをみないとわかりません。
n_libera
記事: 18
登録日時: 2019年3月12日(火) 11:37

Re: 変数を用いたHP回復について

投稿記事by n_libera » 2019年5月30日(木) 00:23

astralさん

お久しぶりです!
前回の質問でのアドバイス、ありがとう御座いました…!
しかも今回も的確なアドバイスを…本当に助かります。ありがとう御座います!
1つずつ返答していきますね。

<1〜3点目の質問の件>
astralさんに教えて頂いた通りしたところ、無事に解決しました!
ありがとう御座います…!

<バグについて>
イベントコマンド了解しました!
こんな感じで設定を組んでおります。

image01:マップ内にある追いかけるイベントを発生させるためのイベント
image02:敵自体に組んでいるイベント
image03:プレイヤーが踏んだ際に敵を出現させるスイッチ

▼追いかけるイベントは、
https://denno-sekai.com/rpgmaker-enemy-chase/
このページのイベントを参考しております!

▼コマンドにある「無敵スイッチ」は、敵に接触してすぐに再度接触しても連続してダメージを受けない処理です
viewtopic.php?f=23&t=7726
(過去にアドバイスしていただいたものです!)

バグの詳しい症状としては、
追いかけイベント中、時々接触した瞬間フリーズしてうごかなくなることがあります。
場所は様々なところであり、頻度は高くないですが、時々発生してしまう。という具合です。
またバグが発生しないで、スムーズに追いかけるイベントが済むこともあります。(こちらの方が多いです)
添付ファイル
image03.png
image02.png
image01.png
アバター
にいやん
記事: 218
登録日時: 2016年7月02日(土) 00:38
お住まい: 地獄4丁目西のゴミ置き場
連絡を取る:

Re: 変数を用いたHP回復について

投稿記事by にいやん » 2019年5月30日(木) 18:21

ちょっと気になったのはコモンイベント:ダメージの計算-1っていうところですね。中身はどうなっているのでしょうか?ダメージモーションとか作っているのならそれが一瞬固まる(フリーズ)といった挙動をとる理由にはなると思います。というのもダメージを受けたときにヒットバックなどの処理を入れるときはプレイヤーの後ろが壁だった場合、処理の仕方次第ではフリーズをします。フリーズをしない処理の場合でも壁の判定のときに移動しない処理をするのに1クッションの移動が制限される間があったと思います。どういうイベントの組み方をしているかの詳細があれば良いのですが現状では予測からの回答だけです。
n_libera
記事: 18
登録日時: 2019年3月12日(火) 11:37

Re: 変数を用いたHP回復について

投稿記事by n_libera » 2019年5月30日(木) 22:04

にいやんさん

お久しぶりです、前の記事ではアドバイス等ありがとう御座いました!
今回でもお世話になります……

「コモンイベント:ダメージの計算-1」なのですが、
こんな感じです…!

image01:コモンイベント:ダメージの計算-1
image02:01内コモンイベント:敵一時停止
image03:01内コモンイベント:各ダメージの処理

プレイヤーの後ろが壁だった場合…なるほど!
フリーズする際、後ろが壁なことが多いので、そのせいでしょうか……
添付ファイル
image03.png
image02.png
image01.png
アバター
にいやん
記事: 218
登録日時: 2016年7月02日(土) 00:38
お住まい: 地獄4丁目西のゴミ置き場
連絡を取る:

Re: 変数を用いたHP回復について

投稿記事by にいやん » 2019年5月31日(金) 02:28

ヒットバックの処理も無いのでフリーズの原因はわかりません。フリーズって一瞬だけ固まるとかじゃなくてずっと操作を受け付けないっていう意味と捉えていますが、実行内容からはフリーズする処理は見当たりませんね。ということはプラグインが原因かもしれません。鬼のメモ欄にコマンドを入力しているのでもしかしたらということもありますが…

この場合重要なのはイベントの切り分けなので、どこを削除すれば正常に作動するかを調べる必要があります。下に処理を簡略化したものがあるので参考にしてみて下さい。あと、コモンイベントの中に短いコモンイベントを入れるのはやめたほうが良いと思います。処理が長い場合は見やすさという観点からカテゴリ分けもありですが、短い場合はコモン化する意味がほぼないです。大元だけコモン化すれば使いまわしできます。

例としては死亡時のセリフが乱数で20個くらいある場合に長すぎるのでコモン化してまとめるといった形です。

情報が欲しい点としてはフリーズするときはHPがいくつのときなのかということくらいでしょうか。

灯台下暗しというのは誰にでも起こり得ることですが、どこかにスイッチを起点としたカラの自動実行のイベントとか組んでたりしないですよね?その場合スイッチが入るだけでフリーズします。

1.jpg

2.jpg
n_libera
記事: 18
登録日時: 2019年3月12日(火) 11:37

Re: 変数を用いたHP回復について

投稿記事by n_libera » 2019年5月31日(金) 10:11

にいやんさん

お早いお返事をありがとう御座います。
メモ欄コマンドを外し、短いコモンイベントを削除し直接入れてみたところ、敵に接触してもフリーズすることがなくなりました!
やはりにいやんさんが言う通り、コモンイベントの処理が多かったせいですかね……
本当にありがとう御座いました!
毎回毎回アドバイス助かります……
n_libera
記事: 18
登録日時: 2019年3月12日(火) 11:37

Re: 変数を用いたHP回復について

投稿記事by n_libera » 2019年5月31日(金) 15:27

にいやんさん

何度もご質問申し訳ないです…;
再度チャレンジしたところ、やはりフリーズがおきてしまいまして…
少し詳しくフリーズした際の詳細を記載しますね

・最大HPが3のところ、「HP2」「HP1」のときに起きやすい。
・追いかけてくる敵の方を向き、真正面から敵に突っ込んでいくと接触したまま固まってしまい、フリーズしてしまう。(メニューも開けずBGMは鳴りっぱなし)

です……;
アバター
にいやん
記事: 218
登録日時: 2016年7月02日(土) 00:38
お住まい: 地獄4丁目西のゴミ置き場
連絡を取る:

Re: 変数を用いたHP回復について

投稿記事by にいやん » 2019年5月31日(金) 17:15

ということは鬼に捕まったときの処理に問題があります。鬼のイベントへの接触が発生した瞬間に処理の無限ループに陥ってフリーズが発生していると思われます。この場合、ツクールMVの仕様上、並列処理でフリーズが起こることは考えにくいです。あるとすれば自動実行からの無限ループで、1フレーム内に同時にスイッチのON、OFFが入ってしまって本来解除されるスイッチがそのまま解除されずに残るといった場合ですね。

一応確認で処理の流れを書きます。

n_libera さんが書きました:image01:マップ内にある追いかけるイベントを発生させるためのイベント
image02:敵自体に組んでいるイベント
image03:プレイヤーが踏んだ際に敵を出現させるスイッチ

プレイヤーが踏んだイベントによって敵出現位置算出(スイッチ12番)がONになり、鬼を配置するための座標をプレイヤーのX座標、Y座標から割り出し設定。スイッチ12番がOFFになりセルフスイッチAがONになる。

セルフスイッチAが出現条件の2ページ目に移行、50フレームのウェイト、追いかける(スイッチ11番)がONになり、セルフスイッチAがOFFになる。

この時点でこのイベントに設定されている1ページ目の出現条件であるスイッチ12番と2ページ目の出現条件であるセルフスイッチAがともにOFFになり、このイベントはマップ上の処理から完全に外れます。

が、このイベントのトリガーが並列処理なんですよね。このイベントに触れるかどうかが処理のスタートではなくて別イベントの追いかける(スイッチ11番)がイベントの起点ですね。ここのトリガーは見えないですがプレイヤーからの接触になっていると思います。これの実行内容は自身の出現条件であるスイッチ11番のOFFとスイッチ12番のONです。

お互いがお互いのスイッチを入れあって、自分で自分のスイッチを消し合っていますね。

マスを踏んで起動するイベントをA(出現条件がスイッチ11番)とします。それを起点として出現するイベントをB(出現条件がスイッチ12番)とします。Aのトリガーはプレイヤーからの接触、Bのトリガーは並列処理、Bの2ページ目のトリガーは不明。Aのマスを踏んだ段階でAの出現条件は消えますが、同時にBの出現条件がONになりその実行内容から50フレーム後にAの出現条件が再度ONになっています。ということはAが起動してから50フレーム経つごとにAがまた起動できる状態ではあるということですね。気になるところではありますが、鬼に捕まったときがフリーズの条件なので関係ない気もするんですよね。

鬼のイベントの処理で気になるのは自律移動のカスタムの中でスイッチの操作があるところですが、1フレームに1回スイッチを操作する意味は何でしょうか?そしてどのスイッチを操作しているのでしょうか?

私に分かるのはここまでです。後は実際のプロジェクトの中身を見てみないと分からないですが、データをアップできる環境があればなんとかなるかもしれません。

追記:鬼の自律移動のカスタムのスイッチの操作はこの前、私が教えた条件分岐を使っているのですね。この部分はフリーズとは関係なさそうです。
n_libera
記事: 18
登録日時: 2019年3月12日(火) 11:37

Re: 変数を用いたHP回復について

投稿記事by n_libera » 2019年6月03日(月) 10:19

にいやんさん

返信ありがとう御座います!
処理の流れから丁寧に説明、分かりやすく本当に有難いです。
スイッチを消し合っていることがあるのですね…とても勉強になります。

鬼イベントの自律移動のカスタムの件ですが、
1フレームに1回スイッチを操作している方がよく理解出来ていないのですが(無知で申し訳ないです…)
中にあるスイッチ、
$gameSwitches.value(50) ? $gameSwitches.setValue(50, false) : null;
は、ONになっている無敵スイッチをOFFにするスイッチです!
(https://tm.lucky-duet.com/viewtopic.php?f=23&t=7726 を参考にしたものです)

プロジェクトの中身の件なのですが、
この追いかけ部分の処理を再現したデータを作ろうと思うのですが、
にいやんさんに個人的に確認してもらうため、メールフォームにDLURLを送っても良いでしょうか…?

何度も何度もご質問申し訳ないですとともにお付き合い本当にありがとう御座います…!
それでは用件のみになりますが、よろしくお願い致します。

“MV:質問” へ戻る