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