こんばんは。お世話になっております。
質問を失礼します。
ダメージ計算式についてです。
最低で10、最高で999のダメージを与えるスキルを作りました。
Math.min(Math.max((a.atk * 4) - (b.def *2),10),999)
試してみたら予想通りの数字が出ました。
ですが、ふだんはこのような複雑な式は入れませんので
これで計算式は合っていますでしょうか?
間違った式や複雑なことをすると、バグやゲームが重くなる原因になりそうで気になってます。
よろしくお願いします。
【解決しました】計算式について
-
- 記事: 455
- 登録日時: 2018年12月23日(日) 13:55
Re: 計算式について
こんばんは。
上記の計算式で、問題ありませんが、ツクールMV には clamp という関数が用意されています。
この関数は最大値、最小値を指定して、数値(Number)オブジェクト(数字の入っている変数や数字を計算した計算結果)の数値を最小値以上、最大値以下になるように変更するもので、
という書き方をします。
上記のダメージを最小10、最大999にするものをこのclampで表現すると
という計算式になるかと思います。
ただし、スキルの設定で、分散度がついていたり、会心がありに設定されていると、
この計算式で算出した値に対して、操作がされるので、
ダメージが最小10 、最大999 の範囲に収まりません。ご注意ください。
追記
clamp の 説明に微妙に齟齬がありました。
数値オブジェクトの値を直接変更するものではなく、
数値オブジェクトの値が最小値以下なら最小値、最大値以上なら最大値、それ以外なら、そのままの数値
を返す関数です。
lop さんが書きました:こんばんは。お世話になっております。
質問を失礼します。
ダメージ計算式についてです。
最低で10、最高で999のダメージを与えるスキルを作りました。
Math.min(Math.max((a.atk * 4) - (b.def *2),10),999)
試してみたら予想通りの数字が出ました。
ですが、ふだんはこのような複雑な式は入れませんので
これで計算式は合っていますでしょうか?
間違った式や複雑なことをすると、バグやゲームが重くなる原因になりそうで気になってます。
よろしくお願いします。
上記の計算式で、問題ありませんが、ツクールMV には clamp という関数が用意されています。
この関数は最大値、最小値を指定して、数値(Number)オブジェクト(数字の入っている変数や数字を計算した計算結果)の数値を最小値以上、最大値以下になるように変更するもので、
コード: 全て選択
数値オブジェクト.clamp(最小値, 最大値) ;
という書き方をします。
上記のダメージを最小10、最大999にするものをこのclampで表現すると
コード: 全て選択
(a.atk * 4 - b.def * 2).clamp(10, 999);
という計算式になるかと思います。
ただし、スキルの設定で、分散度がついていたり、会心がありに設定されていると、
この計算式で算出した値に対して、操作がされるので、
ダメージが最小10 、最大999 の範囲に収まりません。ご注意ください。
追記
clamp の 説明に微妙に齟齬がありました。
数値オブジェクトの値を直接変更するものではなく、
数値オブジェクトの値が最小値以下なら最小値、最大値以上なら最大値、それ以外なら、そのままの数値
を返す関数です。
Re: 計算式について
ecf5DTTzl6h6lJj02 様へ
お早い回答をありがとうございます。こちらの返事が遅くなってしまいすいません。
clampの式について細かく教えて頂きありがとうございます。
まさに私が目指していたものです。
連続ヒットするスキルをつくると、
キャラクターの攻撃力が高くなるにつれ合計ダメージが大きくなりすぎますし、
スキルの攻撃力を弱くすると、ダメージ0が連続で出るだけになっていたのを解決したいと思っていました。
これなら最低のダメージが保障されますし、上限も決まっていますので、
ダメージが大きくなりすぎず、0が出ることもなくなります。
教えていただきありがとうございます。おかげさまで解決しました。
ありがとうございました。
お早い回答をありがとうございます。こちらの返事が遅くなってしまいすいません。
clampの式について細かく教えて頂きありがとうございます。
まさに私が目指していたものです。
連続ヒットするスキルをつくると、
キャラクターの攻撃力が高くなるにつれ合計ダメージが大きくなりすぎますし、
スキルの攻撃力を弱くすると、ダメージ0が連続で出るだけになっていたのを解決したいと思っていました。
これなら最低のダメージが保障されますし、上限も決まっていますので、
ダメージが大きくなりすぎず、0が出ることもなくなります。
教えていただきありがとうございます。おかげさまで解決しました。
ありがとうございました。