【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动效 ③事件监听 ④鼠标监听 必须清理掉。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值