1. このサイトではcookie (クッキー) を使用しています。サイトの利用を継続した場合、cookieの使用に同意したものとみなさせていただきます。 詳しくはこちらをご覧ください。

【解決済】一定時間毎に変数を減らす

からあげ2018-09-14 01:30に開始した「ツクールMV」の中の討論

  1. からあげ

    からあげ ユーザー

    (最初の質問は難しいと分かったので、記事を編集しました。
    しぐれんさん、ありがとうございます)

    先日はお世話になりました。
    回答くださった神無月さま、本当にありがとうございました。

    【相談内容】
    ●分毎に変数を減らすにはどうした良いか。

    (最初の相談と違う形ではありますが解決しましたので、タイトルと相談内容を編集して解決済とさせていただきます。
    分かりにくく、ややこしい質問の仕方をしてしまっていたと思います。大変申し訳ありませんでした。
    にも関わらず沢山のご回答、本当にありがとうございました!
    皆様のご親切に感謝します)
     
    最後に編集: 2018-09-16 14:45
    #1
    神無月サスケ がいいね!しました
  2. しぐれん

    しぐれん ユーザー

    「変数1が+1された時に、変数2は-1にする」とありますが、それで何をしたいのでしょうか?
    こういう動機を取る形式はバグの温床ですので、変数2を必要とする処理でX-変数1した数値を使うようにするのが良いと思います。
     
    #2
    神無月サスケ がいいね!しました
  3. からあげ

    からあげ ユーザー

    初めまして、しぐれん様。
    ご回答ありがとうございます!

    すみません、どうすればできるのかばかりで頭が一杯で目的を書いておりませんでした…
    一定時間毎に変数2を減らしたいのです。

    本当は上記記事にリンクしたスクリプトが使いたかったのですが(◯秒毎に繰り返す処理)スクリプトの書き方が分からなかったもので…
    時間を変数で取得する方法は分かったので、この変数が動いた時に(例えば三分後に)変数2を減らせば同じ動きができるのではと素人的な考えでした…
    やらない方がいいのですね。ややこしいですもんね…
    教えてくださり、ありがとうございます!
    ちなみに「変数2を必要とする処理でX-変数1した数値を使うようにする」とはどのようにすればいいのでしょうか?
     
    #3
    神無月サスケ がいいね!しました
  4. しぐれん

    しぐれん ユーザー

    変数1が経過時間、変数2が残り時間とします。
    制限時間をXとした場合、残り時間はX-経過時間(変数1)で常に求めることができます。
     
    #4
    神無月サスケ がいいね!しました
  5. からあげ

    からあげ ユーザー

    ご回答ありがとうございます。
    すみません、そこからどうやって●分毎に変数2を減らすという処理ができるのでしょうか?
    理解力がなくて申し訳ないです……
     
    #5
    神無月サスケ がいいね!しました
  6. しぐれん

    しぐれん ユーザー

    ちょっと斜め読みしていたので、勘違いしていました。
    そのパターンだと放置ゲー向けのプラグインを探すとありそうです。
    なお、これをイベントでやるならコモンイベントを定期的に並列実行で作成。
    ウェイトを2分分入れて一番後ろに変数を+2する処理を入れるのが良いと思います。
     
    #6
    神無月サスケからあげ がいいね!しています
  7. からあげ

    からあげ ユーザー

    おはようございます。
    くらむぼん様のTimeEvent.jsは試してみたのですが、こちらもマップ以外の画面(ステータスやバトル時など)でも動作し続けてしまいます……
    コモンイベントで並列処理も試したのですが、マップ移動時にカウントがリセットされるようで理想の動きにはなりませんでした(マップ1で残り10秒の状態でマップ2に移動すると、また2分から再カウントされるようです
     
    #7
    神無月サスケ がいいね!しました
  8. m-spot

    m-spot ユーザー

    時刻や日付の概念があるRPGには向いていませんが、単発のカウントダウンイベントであれば以下の
    組み方で十分だとおもいます。以下のようなイベントを”移動するすべてのマップ”にコピペすれば問題は解決するかと思います。
    リミットとなる変数はイベントが始まる前の任意のタイミングで設定しておく必要があります。
    SnapCrab_NoName_2018-9-15_15-45-45_No-00.png
     
    #8
    神無月サスケからあげ がいいね!しています
  9. ネコタ

    ネコタ ユーザー

    (1秒毎にカウントして、120になったら~とすればいいのでは?細かく刻めば、マップ移動してウエイトがリセットされても誤差が少なくなるだろうし。

    あと、地味に気になっているのが、マップ上の時間を1フレームの誤差もなく正確にカウントしたい理由。戦闘などの時間は除きたいようだけれど、そうすると当然ながらプレイヤーの体感時間や現実世界との誤差が生じるわけで。その時間を正確に反映させなければならない理由が良くわからなかった。分単位の体感時間なら、数フレームの誤差は機械がなければ感知できないレベルだと思うけれど。

    多少の誤差があってもいいなら、イベントコマンドで変数A+1、変数B-1、ウエイト59フレームを並列処理でループさせれば良いように思う。

    もし、カウントしている変数をそのまま引用して何らかの形で表示させることをしたい、というのであれば、表示用の変数を別途用意するとよさそう。

    変数A、変数Bはそのままカウント用に使用し、変数A=60の時変数C+1、変数A=0の処理を入れる。そうすれば、変数Cは1分ごとにカウントするので、変数Cをそのまま表示させても分単位のカウントをしているように見えます)
     
    最後に編集: 2018-09-16 07:01
    #9
    神無月サスケからあげ がいいね!しています
  10. からあげ

    からあげ ユーザー

    m-spot様
    ご丁寧に画像までつけてくださって、ありがとうございます!大変分かりやすく、勉強になりました。
    ご親切に感謝します!

    ネコタ様
    先日はブログの方でお世話になりました。ご丁寧な対応、本当にありがとうございました!
    今回、こちらでも気にかけていただけて嬉しいです。
    1フレームの誤差もなくしたい訳ではなく、2分毎に変数を減らしたくてもマップ移動するタイミングによっては約4分になってしまうのが気になってしまいました。
    わかりにくくても申し訳ありません。ご意見参考にさせていただきます。ありがとうございます!


    皆様に教えていただいた方法を参考にイベントを組んでみようと思います。
    この度は本当にありがとうございました。
    これで解決済とさせていただきます。
     
    最後に編集: 2018-09-16 14:47
    #10
    神無月サスケ, m-spotネコタ がいいね!しています
  11. ネコタ

    ネコタ ユーザー

    あ、やっぱり、あのからあげ様ですね。こちらこそお世話になります。
    いえいえ、こちらの勘違いで申し訳ないです。

    とりあえず、コモンイベント>並列処理で以下の内容を起動させ、92回場所移動を繰り返してみました。
    タイマーで比較して計測してみたところ、誤差が約11秒でました。やってみると、思ったより誤差がでますね。
    1秒に1~2回程度移動していたので、そんなもんかもしれません。

    ◆ウェイト:14フレーム
    ◆変数の操作:#0273 += 1
    ◆変数の操作:#0274 -= 1
    ◆条件分岐:#0273 ≥ 480
    ◆文章:なし, ウィンドウ, 下
    :  :2分経ちました!
    ◆変数の操作:#0273 = 0

    :分岐終了

    どのような想定をしているか分かりませんが、大体の目安としてください。
    もっと細かく刻めば、誤差も少なくできると思います。

    (ここで設定されてるフレーム分が、概ねマップ移動毎にリセットされるフレーム数になります)



    というわけで、試しに、以下の設定で182回場所移動してみました。

    ◆ウェイト:1フレーム
    ◆変数の操作:#0273 += 1
    ◆変数の操作:#0274 -= 1
    ◆条件分岐:#0273 ≥ 3600
    ◆文章:なし, ウィンドウ, 下
    :  :2分経ちました!
    ◆変数の操作:#0273 = 0

    :分岐終了

    この場合、タイマーとの誤差は約2秒でした。さすがに、2分で場所移動が182回も行われる状況というのはそう無いと思いますが、このくらいの精度なら実用に耐えられると思います。

    (貼っていただいたリンクに書いてある通り、処理には確かに1フレーム使われているようです。ウエイト1フレームと処理1フレームで、このイベントは2フレームに1回動きます。よって、2*3600フレーム=7200フレーム=120秒=2分となります)


    もし、2分ごとに変数を減らす場合には、変数-=1の処理を条件分岐の中へ移せばOKです。

    ◆ウェイト:1フレーム
    ◆変数の操作:#0273 += 1
    ◆条件分岐:#0273 ≥ 3600
    ◆文章:なし, ウィンドウ, 下
    :  :2分経ちました!
    ◆変数の操作:#0274 -= 1
    ◆変数の操作:#0273 = 0

    :分岐終了
     
    最後に編集: 2018-09-16 15:47
    #11
    神無月サスケ, 8787&クラウm-spot がいいね!しています

このページを共有