團隊作業-個人總結
思考
這種遊戲果然應該漸進式開發,先設計好類容易導致各種各樣的問題,像接口不一致和濫用智能指針的問題
編碼過程
最近都在考試,沒什麽時間打這個,只能考完通宵肝一些
這一階段實現了血條,主要是通過cocos::ProgressTimer
實現,並將其添加為cocos::Sprite
的子節點實現跟隨
實現了攻擊,攻擊作為技能實現,利用了技能的抽象,然而並不有利於減少代碼量,但是看起來更整齊
實現了死亡回城,再英雄更新時判斷血量並回城重置
實現了泉水回血,通過判斷單位位置和陣營,為了省時間仿照技能樣式但不納入技能範疇
遇到的問題
智能指針問題
之前我一直以為std::shared_ptr
是一個非常強大的東西,隨便用沒有坑,能簡化C++的內存管理,事實證明是我太天真了。考慮以下代碼
int *pp = new int;
shared_ptr<int> sp1(pp);
shared_ptr<int> sp2(pp);
其中sp1
與sp2
並不會共享引用計數,導致在代碼塊退出時pp
所指向的內存單元被回收了2次,導致出錯
智能指針shared_ptr
設計是讓代碼中所有指針都由智能指針管理,不應存在裸指針,而指向現存對象的智能指針也應由智能指針創建,混用智能指針與裸指針容易導致各種各樣的問題。
其實對象的引用計數管理可以仿照COM的IUnknown
或者cocos::Ref
的單根繼承實現,手動釋放和引用,有時雖然繁瑣,但更清晰
由於設計上的疏忽導致我們的模型設計中大量存在shared_ptr
模型設計問題
王者光耀這類遊戲存在大量狀態及狀態轉換,我之前妄想使用多態解決所有問題,但這也是不現實的,這類需求適合狀態機實現,這是從一開始就出現的問題,然而中期我才意識到,已無力回天
總結
這次作業算是比較失敗的一次作業,我作為隊長,有一定責任,我進行了一些反思,在本次團隊作業中,我主要有一下幾點不足:
- 在團隊作業初期沒有進行明確合理的分工
- 設定目標時考慮過少,當時我認為的是“不試試怎麽知道自己原來真的做不到”
- 沒有設定明確的接口和代碼規範,團隊裏的人各有各的思路,寫出來的代碼別人有時候不好看懂和對接
- 濫用不熟悉的技術
其實這也和我第一次帶團隊,經驗和領導能力不足有關吧。今天在這裏寫下這些,希望以後能吸取教訓,也希望以後看時,能發現自己有什麽進步
團隊作業-個人總結