Re: [问卦] 宁宁鸡写程式时是用space还是tab缩排

楼主: reinforce15   2017-08-31 13:43:38
※ 引述《justwe5566 (杰士塔纱路的老公)》之铭言:
: 乳提
: 可爱的宁宁鸡
: http://i.imgur.com/P5c7HIF.jpg
: 最近开始学写程式
: 不知道宁宁鸡缩排都用space还是tab
: 好想知道喔
: U咪U宁宁鸡是space派还是tab派的八卦?
你好 我好 各位姆咪好
我是小光 http://i.imgur.com/1fhF9x3.jpg
我觉得她应该是用space吧
不过本光还是喜欢用快捷键一键缩排 赞
话说第二季好好看喔 那只猫也好可爱
第二季 第09分第34秒处
http://i.imgur.com/35hXCjk.png
上图是宁宁原本的code 把他转OCR
//
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();
}
}
}
而且宁宁说执行时会卡住
好 让我们来看看问题出在哪
首先
请各位姆咪们先看到第37行 DestroyMe()
有没有发现? 这个DestroyMe()只有在血条小于等于0时才会被call
再来请姆咪们看到第34行这里
也就是说 如果当 m_currentHealth 小于等于 0.f时
会一直是true的状态 而一直去重复执行DestroyMe()
但又因DestroyMe()之前已经被call过了
可能会造成内存没有东西可以让DestroyMe()消除
所以内存有可能会被违法存取
而导致系统不稳 最终当机
本光想到的解法是在DestroyMe()后面加上break
像这样
if (m_currentHealth <= 0.f)
{
m_currentHealth = 0.f;
DestroyMe();
break;
}
如此一来 既能把第30行的for 与第34行的if分离开来
不会重复去DestroyMe
又能把Damage丢到循环外
不过有点疑问的是...
这样写不会在编译时就跳出警告 或就直接出错吗?
我在猜啦 可能造成游戏卡死的原因不是只有这个
其他地方可能也有logic上的问题
还有宁宁的compiler左侧那栏我怎么看都没References
这样没问题吗
啊对 海子那个应该可以用Qt来做到
只是没她的source code
作者: CloseFeather (克洛斯.菲勒)   2017-08-31 13:45:00
先推 免得人家以为我看不懂
作者: canblow (可吹)   2017-08-31 13:45:00
肥宅的时间真多
作者: abc0922001 (中士abc)   2017-08-31 13:45:00
这个分析早就看过了
作者: SuperUp (( ̄▽ ̄#)﹏﹏)   2017-08-31 13:45:00
大哥 今天天气很好耶 不考虑出个门吗?
作者: limoncool (億載金城武 Limoncool)   2017-08-31 13:45:00
文组的看不懂
作者: sysop5566 (批踢踢半熟手)   2017-08-31 13:47:00
小洸棒棒der
作者: brad84622 (brad84622)   2017-08-31 13:52:00

Links booklink

Contact Us: admin [ a t ] ucptt.com