Re: [問卦] 寧寧雞寫程式時是用space還是tab縮排

作者: linzero (【林】)   2017-08-31 15:47:57
※ 引述《reinforce15 (可魯貝洛斯)》之銘言:
: //
: void DestructibleActor::ReceiveDamage(float sourceDamage)
: {
: //
: auto resolvedDamage = sourceDamage;
: for (const auto& debuf:m_debufs)
: {
: resolvedDamage = debuf.ApplyToDamage(resolvedDamage);
: m_currentHealth -= resolvedDamage
: if (m_currentHealth <= 0.f)
: {
: m_currentHealth = 0.f;
: DestroyMe();
: }
: }
: }
其實這公式怪怪的
看來是一個原始傷害
經過N個debuff後,各自計算增減的傷害
依序把HP扣掉debuf的傷害後作死亡判斷
但問題是
1.這樣原始傷害好像沒計算到?
可能一定有一個debuff傷害是直接*1把原始傷害當debuff傷害修正來計算
2.這樣每次判斷死亡其實沒必要
一次算出debuff後總傷害後去判斷就可以了
3.後面依序使用resolvedDamage來計算
這寫法應該是把resolvedDamage當總傷害計算
還依序用體力去減
這樣好像怪怪的
也就是第一種debuff計算比如加重傷害10%
sourceDamage為100時
(1)以每次記算debuff增加的傷害,那resolvedDamage應該是10
m_currentHealth用resolvedDamage去減是正確的
但第二次ApplyToDamage用resolvedDamage(=10)去算就有問題了
(2)以總傷害來計算的話
ApplyToDamage用resolvedDamage去算是正確的
第一次計算後resolvedDamage=110
但每次迴圈都要m_currentHealth -= resolvedDamage;
那就有問題了
而且DestroyMe();
較安全寫法應該函式內部也要去檢查是不是已經死了
另外這個應該不完全是debuff計算
也包含buff減傷的計算吧
作者: aby0d6q5n (懶人貓)   2017-08-31 15:59:00
看起來ApplyToDamage都是帶resolvedDamage阿?
作者: rofellosx (鏖)   2017-08-31 15:59:00
死亡判定應該獨立執行..
作者: aby0d6q5n (懶人貓)   2017-08-31 16:02:00
看起來是用迴圈去判斷resolved dmg如果在計算resolved dmg的過程中就 > current health就直接destroyMe 所以邏輯上OK 只是要檢查死亡判定有沒有死了在死的狀況發生
作者: orze04 (orz)   2017-08-31 16:51:00
死亡判定要獨立一個thread
作者: mosrax (賣女孩的小火柴)   2017-08-31 17:08:00
還以為走錯版
作者: paulxxxtw   2017-08-31 18:35:00
突然神手齊聚,怕
作者: reinforce15   2017-08-31 18:42:00
對吼沒想到原本有問題這點 因沒有完整code可能無解了

Links booklink

Contact Us: admin [ a t ] ucptt.com