私は自分のゲームで構造の構築プロセスを作りたいと思っています。この処理は、時間の割合(timer/neededTime*100
)がパーセント(player.money/neededMoney*100
)よりも小さい場合にのみ実行されます。すべてのフレーム、特定の金額は、player.money
から減らす必要がありますので、全体のプロセスの最後はmoney.player = money.player - neededMoney
です。私は毎フレームお金から減らされるフロートを計算する方法を知らない。時間とお金のパーセンテージで浮動小数点を計算する
0
A
答えて
0
neededTime
単位のneededMoney
の部分を減算する必要がありますか?
neededTime
単位(これは負でない非ゼロの整数値であると見なされます)、neededMoney/neededTime
を減算する必要があります。
フレームごとに、コードは次のようになります。 framesPerSecond
が定数であり、neededTime
が秒単位であると仮定します。
var secondsPerFrame = 1/(float)framesPerSecond;
var moneyPerSecond = neededMoney/(float)neededTime;
var moneyPerFrame = moneyPerSecond * secondsPerFrame;
//The above can be rewritten as:
//var moneyPerFrame = neededMoney/(float)neededTime/(float)framesPerSecond);
if (player.money >= moneyPerFrame)
{
player.money -= moneyPerFrame;
}
変更するフレームレートをサポートするためのアップデート
私は変化するフレームレートと不十分利用可能な資金に対処することができるはずクラスを書きました。各フレーム(または適宜)に、GetValueToSubtract()
メソッドを呼び出します。
public class BuildingExpenseCalculator
{
private readonly IAccount _account;
private readonly float _moneyNeeded;
private readonly float _spendingRate;
private float _moneyNeededRemaining;
private DateTime _lastSubtract;
public BuildingExpenseCalculator(IAccount account, float moneyNeeded, TimeSpan timeNeeded)
{
_account = account;
_moneyNeeded = moneyNeeded;
_spendingRate = moneyNeeded/(float) timeNeeded.TotalSeconds;
}
public void StartCalculation()
{
_lastSubtract = DateTime.Now;
_moneyNeededRemaining = _moneyNeeded;
}
public float GetValueToSubtract()
{
var now = DateTime.Now;
var timePassedSinceLastSubtract = now - _lastSubtract;
var moneyToSubtractSinceLast = (float)(_spendingRate*timePassedSinceLastSubtract.TotalSeconds);
// Ensure we do not exceed the remaining money that is needed.
moneyToSubtractSinceLast = Math.Min(moneyToSubtractSinceLast, _moneyNeededRemaining);
// Ensure we do not spent more money than is available in the account.
moneyToSubtractSinceLast = Math.Min(moneyToSubtractSinceLast, _account.AvailableMoney);
// Update for next iteration.
_moneyNeededRemaining -= moneyToSubtractSinceLast;
_lastSubtract = now;
return moneyToSubtractSinceLast;
}
}
public interface IAccount
{
float AvailableMoney { get; set; }
}
関連する問題
- 1. 浮動小数点計算
- 2. 浮動小数点の中間点を計算する
- 3. 浮動小数点除算の計算
- 4. 浮動小数点数と小数点の計算
- 5. コンピュータでの浮動小数点計算
- 6. 時間 - 乗算と除算の浮動小数点精度
- 7. 浮動小数点計算における誤差の推定
- 8. Haskell浮動小数点計算エラー
- 9. ULP計算浮動小数点
- 10. 浮動小数点数の増加をJavaで計算する
- 11. デルファイ5および浮動小数点乗算とと数学
- 12. uint32_t計算で浮動小数点数に変換する
- 13. 浮動小数点演算
- 14. 整数と浮動小数点の計算
- 15. Verilogで浮動小数点数の小数部を計算する方法
- 16. テンプレートを使用してコンパイル時に浮動小数点数を計算する
- 17. 整数で浮動小数点計算を行う方法
- 18. 計算機アプリケーション用の浮動小数点演算のソリューション
- 19. 除算と浮動小数点
- 20. IEEE浮動小数点、バイアスを計算する方法
- 21. JavaScriptでの浮動小数点の正確な計算
- 22. Googleシートの小数点までの時間を計算する
- 23. Javascriptの浮動小数点数加算
- 24. 浮動小数点数は浮動小数点数ですか?
- 25. 浮動小数点値と浮動小数点値の比較
- 26. 浮動小数点型の浮動小数点数を使用している浮動小数点数は、浮動小数点数の上位16桁です。
- 27. 浮動小数点計算を含むCプログラムのランダム生成
- 28. C数学ライブラリ - 浮動小数点計算?
- 29. は自動計算時間小数点形式
- 30. Pythonの浮動小数点減算
お金を表すのにフロートを使用していますか?あなたがしないことを願っています。財務計算には小数点タイプを使用します。 –
OTOHは、世界を信じて、財務計算に小数点または浮動小数点を使用すると、結果を信じるに過ぎません。 – Teepeemm
私はお金のためにintを使用します。私はそれが1になるまでフロートを追加し、その後に1つのお金を減らす – Element4life16