【解決】ダッシュする事で疲労し、時間が経てば回復させたい

sou
記事: 98
登録日時: 2017年3月10日(金) 07:13

【解決】ダッシュする事で疲労し、時間が経てば回復させたい

投稿記事by sou » 2017年8月02日(水) 18:37

日ごろよりお世話になっております。
特別なステータスを作りたいと考えております。イメージとしてはこうした感じです。

「スタミナ」100/100
■ボタンを押しながらダッシュする事で、1ずつ消費されていく。
■0になる事で、走れなくなってしまいます。
■スタミナは走らない事で回復します。「立ち止まる」か「歩いていても」回復する。

スタミナの項目で変数を設定するまでは分かります。
その後、どうしたらいいか見当がつきません。
アドバイス頂けませんでしょうか?あるいはそうしたプラグインでも構いません。

どうかお助け頂けたら幸いです。よろしくお願いいたします。
最後に編集したユーザー sou on 2017年8月04日(金) 19:06 [ 編集 3 回目 ]

アバター
あかみどり
記事: 57
登録日時: 2017年7月08日(土) 12:07
連絡を取る:

Re: ダッシュする事で疲労し、時間が経てば回復させたい

投稿記事by あかみどり » 2017年8月03日(木) 05:35

おはよーございます
コモンイベントで挑戦してみました。

--------------------------------------
用意するもの

・プラグイン
 トリアコンタンさん
 動的文字列ピクチャ生成プラグイン
 (格納した変数を画面上に表示する為)
・変数#0001:スタミナ
・スイッチ0001:スタミナシステム
・コモンイベント:スタミナ管理
--------------------------------------

以下、コモンイベント内容
============================================
コモンイベント:スタミナ管理 トリガー:並列処理 スイッチ:0001 スタミナシステム

・実行内容

・プラグインコマンド:D_TEXT_SETTING REAL_TIME ON
・プラグインコマンド:D_TEXT スタミナ:\V[1]/100 26 ([1]はスタミナを格納した変数です。
・ピクチャの表示:1,なし,左上(お好きな座標),(100%,100%),255,通常
・条件分岐:(変数)スタミナ = 0 ※ 1スタミナが0になったときの設定です
 ・スクリプト:$dataMap.disableDashing = true;
 ・条件分岐:ボタン[シフト]が押されている(条件を満たさないときの分岐を作成
  ・
 :それ以外のとき
  ・ウェイト:240フレーム(0まで使い切ったときのペナルティです
  ・変数の操作:#0001 スタミナ += 1
  ・ウェイト:20フレーム(スタミナの回復感覚です。短いほど早くなります
  ・
 :分岐終了
 ・
:それ以外のとき ※2 ここからダッシュ中のスタミナ消費の設定をしていきます
 ・スクリプト:$dataMap.disableDashing = false;
 ・条件分岐:ボタン[シフト]が押されている(条件を満たさないときの分岐を作成 ←(修正箇所
  ・条件分岐:ボタン[上]が押されている
   ・条件分岐:(変数)スタミナ = 0(条件を満たさないときの分岐を作成
    ・
   :それ以外のとき
    ・変数の操作:#0001 スタミナ -= 1
    ・ウェイト:10フレーム(スタミナの消費感覚です。
    ・
   :分岐終了
   ・
  :分岐終了(修正
  ・条件分岐:ボタン[下]が押されている
   ・条件分岐:(変数)スタミナ = 0(条件を満たさないときの分岐を作成
    ・
   :それ以外のとき
    ・変数の操作:#0001 スタミナ -= 1
    ・ウェイト:10フレーム(スタミナの消費感覚です。
    ・  
   :分岐終了
   ・
  :分岐終了(修正
  ・条件分岐:ボタン[左]が押されている
   ・条件分岐:(変数)スタミナ = 0(条件を満たさないときの分岐を作成
    ・
   :それ以外のとき
    ・変数の操作:#0001 スタミナ -= 1
    ・ウェイト:10フレーム(スタミナの消費感覚です。
    ・
   :分岐終了
   ・
  :分岐終了(修正
  ・条件分岐:ボタン[右]が押されている
   ・条件分岐:(変数)スタミナ = 0(条件を満たさないときの分岐を作成
    ・
   :それ以外のとき
    ・変数の操作:#0001 スタミナ -= 1
    ・ウェイト:10フレーム(スタミナの消費感覚です。
    ・
   :分岐終了
   ・
  :分岐終了
  ・
 :それ以外のとき ※3 スタミナが1以上且つ、シフトキー(ダッシュボタンを押していないときの設定です
  ・条件分岐:(変数)スタミナ = 100
   ・
  :それ以外のとき
   ・変数の操作:#0001 スタミナ += 1
   ・ウェイト:20フレーム(スタミナの回復感覚です。
   ・
  :分岐終了
  ・
 :分岐終了
 ・
:分岐終了

============================================
以上のコモンイベントを作り、
スタミナを表示させたいポイントまでゲームが進んだら、
自動実行のイベントで変数0001:スタミナに100を代入し、
スイッチ0001:スタミナシステムをONにします。
そうすることでダッシュ中はスタミナを消費し、
0になったらダッシュが解除される。
ダッシュを解除して歩いていたり、立ち止まっていたりすると
スタミナが回復するといった挙動が作れます。

バトル画面がある場合は、
バトルイベントで0ターンにピクチャ1を消去することで
表示を消すことができ、終了後に再び表示されます。
(スイッチはそのままにして置いてください。

コモンイベント中の回復感覚、消費感覚と記述した部分のウェイト設定をいじる事で、
スタミナの回復速度と消耗速度を変えることができます。
但し、消耗速度4つのウェイトは統一した方がいいと思います。
単純に方向キーを押したときの消耗速度を個別に設定しているだけなので、
ばらばらだと、移動している方向によっては消耗が遅い等の事態が起きます。
またペナルティのウェイト部分は0から1まで回復するときの速度です。
要らなければ削除してください。

注意点として、
シフトキー(ダッシュボタン)を押している間は、立ち止まっていてもスタミナが回復しません。
シフトキーから指を離して立ち止まったり、歩いているときではないと
回復できないということを、ゲーム中か説明書テキストファイルで説明する必要があります。
またマウスクリックの方には対応していません。

こんな感じでどうでしょうか?
使い方の説明はここまでで終了ですが、
もう少しイベント内容の解説を知りたい場合は
更に下の方の解説へ続いてください。

以下、解説
=================================
・プラグインコマンド:D_TEXT_SETTING REAL_TIME ON
・プラグインコマンド:D_TEXT スタミナ:\V[1]/100 26
・ピクチャの表示:1,なし,左上(お好きな座標),(100%,100%),255,通常

トリアコンタンさん提供のプラグインですね。
上はリアルタイムで変更する変数を表示してくれます。
ピクチャの表示で格納変数を表示しています。
詳しい使い方はヘルプの方を見てくださいな。

----------------------------------------------------------------
※1 スタミナが0になったときの設定

スクリプトはダッシュができなくなるものです。
「条件分岐[シフト]が押されている~」は
スタミナが0の時にシフト(ダッシュボタン)が押されている時は
何もするなという事にしています

・:それ以外(シフトを押していない)の時

ウェイト:240フレーム(ペナルティ

上でも解説しましたが、スタミナを0まで使い切ったときのペナルティです。
0から1に回復するための時間を設定しています。
ウェイトを長くすればするほど、スタミナの回復し始めが遅くなります。
ペナルティが要らない場合は削除してください。
その後に続く、

・変数の操作:#0001 スタミナ += 1
・ウェイト:20フレーム

のウェイトはスタミナが1から2へ回復する速度です。
後述するスタミナが1以上の時の回復設定のウェイトと同じウェイトに設定しないと、
1から2へ回復するときだけ、おかしな回復感覚になります。

----------------------------------------------------------------
※2 ダッシュ中のスタミナ消費の設定

スクリプトはダッシュができるようにするものです。
条件分岐[シフト]が押されている[上下左右]が押されている
と重ねることで、ダッシュ中の変数の挙動を設定しています。
ウェイト設定で消耗速度の感覚を決めています。

・条件分岐:(変数)スタミナ = 0(条件を満たさないときの分岐を作成

:それ以外のとき
・変数の操作:#0001 スタミナ -= 1
・ウェイト:10フレーム

と、ここでスタミナ0かどうか確認しているのは、
スタミナが0になった瞬間に他の方向キーを同時押しする、と
変数がマイナスを突破して常時ダッシュができる状態になる為です。

----------------------------------------------------------------
※3 スタミナが1以上且つシフトキーを押していない時の設定

条件分岐でスタミナ100になったら、
何もしないでおくれ。それ以外の時(1~99)は
スタミナを1ずつ回復しておくれという設定です
これを設定しないと100を突破して際限なく上がり続けます

=================================
以上、長くて見辛い解説でしたが、
これで終わりです。
ここまでお疲れ様でした~

※ミスがあったので修正しました。
 分岐終了の記述が足りてなかったのを更に修正
最後に編集したユーザー あかみどり on 2017年8月03日(木) 20:24 [ 編集 2 回目 ]
---------------------------------------------
Twitter
https://twitter.com/aoki_akamidori
---------------------------------------------
sou
記事: 98
登録日時: 2017年3月10日(金) 07:13

Re: ダッシュする事で疲労し、時間が経てば回復させたい

投稿記事by sou » 2017年8月03日(木) 18:59

こんばんは、あかみどり様

とても丁寧に、細かく書いていただきまして、本当にありがとうございます。
現在、書いていただいた内容を参考に製作しているのですが、ちょっと難しい所があって
分からない状態です。

スクリーンショットを添付いたします。
(2枚目と3枚目は入りきらなかったので重複する箇所ががございます)
お手数をお掛けして、申し訳ございませんが一度見て頂けませんでしょうか?
1.jpg
2.jpg
3.jpg

あと、私のやり方がおかしいのか、どうしても同じ様に作ろうと思っても
出来ない部分がございました。

”条件を満たさないときの分岐を作成”等、細かく書いていただいたので、
そうした記述がない所は”条件を満たさないときの分岐を作成”は行いませんでしたが
その様に作っても出来なかった部分は追記したりしました。

ここまで細かく書いていただいて、分からずに恐縮ですがアドバイス頂けたら幸いです。
どうか、よろしくお願いいたします。
アバター
あかみどり
記事: 57
登録日時: 2017年7月08日(土) 12:07
連絡を取る:

Re: ダッシュする事で疲労し……(追記しました

投稿記事by あかみどり » 2017年8月03日(木) 19:18

すみません、私の記述抜けがありました
※2の後のスクリプト記述の下の条件分岐、
-------------------------------------------------------------------------------------------------------
:それ以外のとき ※2 ここからダッシュ中のスタミナ消費の設定をしていきます
 ・スクリプト:$dataMap.disableDashing = false;
 「・条件分岐:ボタン[シフト]が押されている」←これですね
-------------------------------------------------------------------------------------------------------
これを

・条件分岐:ボタン[シフト]が押されている(条件を満たさないときの分岐を作成←チェックを入れる

に変更してください

そうすると
------------------------------------------------------------------------------------------------------
  ・条件分岐:ボタン[右]が押されている
   ・条件分岐:(変数)スタミナ = 0(条件を満たさないときの分岐を作成
    ・
   :それ以外のとき
    ・変数の操作:#0001 スタミナ -= 1
    ・ウェイト:10フレーム(スタミナの消費感覚です。
    ・
   :分岐終了
   ・
  :分岐終了
  ・
 :それ以外のとき ※3 スタミナが1以上且つ、シフトキー(ダッシュボタンを押していないときの設定です
  ・条件分岐:(変数)スタミナ = 100
   ・
  :それ以外のとき
   ・変数の操作:#0001 スタミナ += 1
   ・ウェイト:20フレーム(スタミナの回復感覚です。
   ・
  :分岐終了
  ・
 :分岐終了
 ・
:分岐終了

------------------------------------------------------------------------------------------------------
と記述できるようになると思います。
ミスをしてしまってごめんなさい。
元の記事も修正しておきますね。

追記1
もうひとつ修正箇所が見つかったので追記します。
スクリーンショット2、条件分岐[左]が押されているより下の部分が、
条件分岐[シフト]が押されているの中に含まれていないように見えます。
階層としては、
条件分岐[シフト]が押されている時の中に
---------------------------------------------------------------------------------------------------------
  ・条件分岐:ボタン[右]が押されている
   ・条件分岐:(変数)スタミナ = 0(条件を満たさないときの分岐を作成
    ・
   :それ以外のとき
    ・変数の操作:#0001 スタミナ -= 1
    ・ウェイト:10フレーム(スタミナの消費感覚です。
    ・
   :分岐終了
   ・
  :分岐終了
  ・(次の条件分岐のボタンはこの場所にコピー&ペースト)
---------------------------------------------------------------------------------------------------------
の記述が上下左右4セット入っているような感じです。
上記の箇所をコピー&ペーストで4つ連続貼り付けてから上下左右だけ変えると楽です。
…そして、記述したイベントの分岐終了の記述が足りてなかった部分を更に修正しました。
修正部分は書いてあるので確認お願いします。
もう抜けはないかな?大丈夫かな?
---------------------------------------------
Twitter
https://twitter.com/aoki_akamidori
---------------------------------------------
アバター
にいやん
記事: 218
登録日時: 2016年7月02日(土) 00:38
お住まい: 地獄4丁目西のゴミ置き場
連絡を取る:

Re: ダッシュする事で疲労し、時間が経てば回復させたい

投稿記事by にいやん » 2017年8月03日(木) 21:37

条件分岐後の命令がそれぞれ同じ場合は スクリプトで || を使うとどれかがtrueの場合に命令が実行出来るので行が短くなって便利です。

ダッシュ中の挙動で
条件分岐:ボタン[シフト]が押されている の下に
条件分岐:スクリプト:Input.isPressed("down") || Input.isPressed("left") || Input.isPressed("right") || Input.isPressed("up")

上の場合はシフトと下、シフトと左、シフトと右、シフトと上、このどれかの条件に当てはまるときに命令を実行できます。自分は全てスクリプトで表示すると頭がこんがらがってしまうので極力イベントコマンドで済ませるようにしていますが、スクリプトを使ったほうが行数が短くて済む場合はこういうやり方をしてます。
アバター
あかみどり
記事: 57
登録日時: 2017年7月08日(土) 12:07
連絡を取る:

Re: ダッシュする事で疲労し、時間が経てば回復させたい

投稿記事by あかみどり » 2017年8月04日(金) 07:04

>にいやんさん

私はスクリプトはあまり分からないので
とても助かります。
このスクリプトを使うと、
大分短くなって分かりやすくなりますね。
フォローありがとうございました。
---------------------------------------------
Twitter
https://twitter.com/aoki_akamidori
---------------------------------------------
sou
記事: 98
登録日時: 2017年3月10日(金) 07:13

Re: ダッシュする事で疲労し、時間が経てば回復させたい

投稿記事by sou » 2017年8月04日(金) 08:37

あかみどり様
修正をいただきまして、ありがとうございます。
直して頂いたとおり、作ってみたのですが実際動かしてみた所、動きが少し気になる箇所がございました。もしかしたら、私の組み方がおかしいのかも知れません。
SSを貼りますので、また少し見て頂けませんでしょうか?
1.jpg
2.jpg
3.jpg


動作で気になった部分(矢印は移動した方向)
移動した方向により消費が異なってしまうようです。
↑ スタミナの消耗が早め
← スタミナの消耗が中間的
→ スタミナが1だけ減ってそれ以降は消費されない
↓ →と同じ
私の組み方が間違っているかも知れません。一度確認して頂き、アドバイスを頂戴できたらと思います。
お手数をお掛けして恐縮ですが、どうかよろしくお願いいたします。
アバター
あかみどり
記事: 57
登録日時: 2017年7月08日(土) 12:07
連絡を取る:

Re: ダッシュする事で疲労し、時間が経てば回復させたい

投稿記事by あかみどり » 2017年8月04日(金) 16:31

SSを確認させてもらいましたが、
(私の見落としがなければ)特に間違っている箇所は無いと思います。
また、こっちではそのような現象は確認できませんでした。

なので、にいやんさんが簡略化するスクリプトを教えてくださったので、
それを使った方法で試してみましょう。
そちらの方ならたぶん均一になると思います。
以下、お手数をかけて申し訳ありませんが、
コモンイベントの修正をお願いします。
※2以下の修正になります。
============================================
:それ以外のとき ※2 ここからダッシュ中のスタミナ消費の設定をしていきます
 ・スクリプト:$dataMap.disableDashing = false;
 ・条件分岐:ボタン[シフト]が押されている(条件を満たさないときの分岐を作成
  ・条件分岐:スクリプト:Input.isPressed("down") || Input.isPressed("left") || Input.isPressed("right") || Input.isPressed("up")
   ・条件分岐:(変数)スタミナ = 0(条件を満たさないときの分岐を作成
    ・
   :それ以外のとき
    ・変数の操作:#0001 スタミナ -= 1
    ・ウェイト:10フレーム(スタミナの消費感覚です。
    ・
   :分岐終了
   ・
  :分岐終了
  ・
 :それ以外のとき ※3 スタミナが1以上且つ、シフトキー(ダッシュボタンを押していないときの設定です
  ・条件分岐:(変数)スタミナ = 100
   ・
  :それ以外のとき
   ・変数の操作:#0001 スタミナ += 1
   ・ウェイト:20フレーム(スタミナの回復感覚です。
   ・
  :分岐終了
  ・
 :分岐終了
 ・
:分岐終了

============================================
変更箇所
条件分岐[上]が押されているをスクリプトに変更
それ以下の条件分岐[下左右]を削除
スクリプトが長すぎて2行になっていますが、1列でべべっと貼り付けてください。

これならば方向キーのどれを押しても同じ挙動になると思うので、
大丈夫だとは思いますが、
これでも消耗感覚に差がある場合は、
もしかしたら別な要因かもしれません。
---------------------------------------------
Twitter
https://twitter.com/aoki_akamidori
---------------------------------------------
sou
記事: 98
登録日時: 2017年3月10日(金) 07:13

Re: ダッシュする事で疲労し、時間が経てば回復させたい

投稿記事by sou » 2017年8月04日(金) 17:07

【お礼のお手紙】

あかみどり様
教えて頂いたお陰で、無事スタミナを消耗して走らせる事が出来ました。
丁寧に詳しく教えて頂きまして、本当にありがとうございます。
それから、分からなかった点も何度もお聞きして申し訳ございませんでした。
細かく、ご説明頂いた事も、とても大変なのに、
分かりやすい様にとお気遣いまで頂きまして、何から何まで本当にありがとうございます。

にいやん様
お礼が遅れまして、申し訳ございません。
スクリプトに関して、お教え頂きましてありがとうございます。
お陰様で短く簡略的に済ませる事が出来ました。
スタミナの減少・及び回復といった動作も、コチラに変更する事で正常に機能しました。
お助けくださいまして、ありがとうございます。感謝いたします。

お二人ともに、心からお礼申し上げます。
sou
記事: 98
登録日時: 2017年3月10日(金) 07:13

Re: 【解決済】ダッシュする事で疲労し、時間が経てば回復させたい

投稿記事by sou » 2017年8月04日(金) 18:30

追記です。お礼を申し上げたばかりなのに、申し訳ございません。
ひとつ忘れておりました。

スタミナが、自動的に回復する部分を、イベント中は停止させたいのですが
どの様に行うのでしょうか?MAP上のキャラクターに話しかけたりしている間も
スタミナは回復していきます。

これを停止させたいと考えております。可能でしょうか?

“MV:質問” へ戻る