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