【Laya2.0引擎踩坑筆記 03】—— 【捕魚項目】異常報錯的問題

1. TS的坑
定時器、tween裏面的參數執行域caller,切記要提前用self記錄,如下圖,定時器、tween裏面的參數執行域caller,切記要提前用self記錄,如下圖,
比如退出這個類時候清理掉了所有的定時器和tween動畫

Laya.timer.clearAll(this);
Laya.Tween.clearAll(this);

而下圖中的this指的是自己的函數,而清理定時器的這個this指的是當前類,因此當退出這個類時,雖然清理掉了所有的定時器,但此處的定時器並未關閉,這個地方依然會報錯 “Cannot read property ‘localPositionX’ of null”

在這裏插入圖片描述
2.多個客戶端同步的問題
*本地數據基本是控制玩家客戶端,服務端返回的數據基本是多個客戶端通用
所以要避免在多端工用的代碼裏修改或者使用本地數據。*比如
捕魚項目中,有個本地數據LockedFishID,用來記錄鎖定攻擊的魚的ID。
①玩家客戶端A根據LockedFishID向不斷服務端發送攻擊這個ID的魚的請求 ②服務端對所有玩家客戶端A\B\C\D廣播攻擊這個ID的魚 ③A\B\C\D收到請求回覆後進行邏輯處理,如果在此處修改了LockedFishID,那玩家A的攻擊請求就會受影響。
玩家A鎖定攻擊魚ID1時,玩家B也在鎖定攻擊魚ID2(都是控制LockedFishID),此時A打死了一條魚,這時在魚死亡邏輯(多端的公用代碼)裏面將LockedFishID置爲空,這時B的鎖定攻擊狀態就會斷開(B一臉悶逼)

3.其他容易爆異常的邏輯問題
1.炮臺還沒實例化完成,就收到有炮臺要退出的消息,此時炮臺實例爲null。
2.退出房間時,有引用的數據一定要清空比如this.m_cannon = null;,否則這個值的指向的地址還在,但是地址裏的數據已經被清空,一旦被調用便會報錯。
3.房間內四個炮臺,每個炮臺有唯一的uid,但pb解析時long字段用number接收,所以會出現數據丟失導致兩個炮臺使用同一個uid的情況,此時炮臺a已退出房間,房間內根據uid獲取到的炮臺就會出現null的情況。
4.切換炮臺時客戶端自己先處理,防止自動發射時還沒響應到服務端的回覆,子彈倍率沒同步上的問題
5.很多時候代碼中會碰到棧溢出的報錯,通常是某處有死循環或者循環調用的問題。
6.離開場景時 ①定時器 ②toween動效 ③事件監聽 ④鼠標監聽 必須清理掉。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章