【解決しました】計算式について

lop
記事: 59
登録日時: 2018年1月28日(日) 14:52

【解決しました】計算式について

投稿記事by lop » 2021年1月19日(火) 21:33

こんばんは。お世話になっております。
質問を失礼します。

ダメージ計算式についてです。

最低で10、最高で999のダメージを与えるスキルを作りました。
Math.min(Math.max((a.atk * 4) - (b.def *2),10),999)
試してみたら予想通りの数字が出ました。

ですが、ふだんはこのような複雑な式は入れませんので
これで計算式は合っていますでしょうか?

間違った式や複雑なことをすると、バグやゲームが重くなる原因になりそうで気になってます。

よろしくお願いします。
最後に編集したユーザー lop on 2021年1月21日(木) 20:51 [ 編集 1 回目 ]

ecf5DTTzl6h6lJj02
記事: 455
登録日時: 2018年12月23日(日) 13:55

Re: 計算式について

投稿記事by ecf5DTTzl6h6lJj02 » 2021年1月19日(火) 22:41

こんばんは。
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 の 説明に微妙に齟齬がありました。
数値オブジェクトの値を直接変更するものではなく、
数値オブジェクトの値が最小値以下なら最小値、最大値以上なら最大値、それ以外なら、そのままの数値
を返す関数です。
lop
記事: 59
登録日時: 2018年1月28日(日) 14:52

Re: 計算式について

投稿記事by lop » 2021年1月21日(木) 20:51

ecf5DTTzl6h6lJj02 様へ

お早い回答をありがとうございます。こちらの返事が遅くなってしまいすいません。

clampの式について細かく教えて頂きありがとうございます。
まさに私が目指していたものです。


連続ヒットするスキルをつくると、
キャラクターの攻撃力が高くなるにつれ合計ダメージが大きくなりすぎますし、
スキルの攻撃力を弱くすると、ダメージ0が連続で出るだけになっていたのを解決したいと思っていました。
これなら最低のダメージが保障されますし、上限も決まっていますので、
ダメージが大きくなりすぎず、0が出ることもなくなります。

教えていただきありがとうございます。おかげさまで解決しました。
ありがとうございました。

“MV:質問” へ戻る