Re: [問卦] 寧寧雞寫程式時是用space還是tab縮排已回收
※ 引述《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減傷的計算吧
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.228.78.62
※ 文章網址: https://www.ptt.cc/bbs/C_Chat/M.1504165680.A.241.html
※ 編輯: linzero (36.228.78.62), 08/31/2017 16:06:04
推
08/31 15:59, , 1F
08/31 15:59, 1F
→
08/31 15:59, , 2F
08/31 15:59, 2F
→
08/31 16:02, , 3F
08/31 16:02, 3F
→
08/31 16:03, , 4F
08/31 16:03, 4F
→
08/31 16:04, , 5F
08/31 16:04, 5F
→
08/31 16:04, , 6F
08/31 16:04, 6F
推
08/31 16:51, , 7F
08/31 16:51, 7F
推
08/31 17:08, , 8F
08/31 17:08, 8F
推
08/31 18:35, , 9F
08/31 18:35, 9F
推
08/31 18:42, , 10F
08/31 18:42, 10F
→
09/02 14:16, , 11F
09/02 14:16, 11F
→
09/02 14:18, , 12F
09/02 14:18, 12F
→
09/02 14:39, , 13F
09/02 14:39, 13F
→
09/02 14:42, , 14F
09/02 14:42, 14F
→
09/02 14:43, , 15F
09/02 14:43, 15F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 3 之 3 篇):