第一回认识try catch

在bowling游戏中,由于ScoreDisplay的数组越界错误导致一系列执行失败。通过在可能出现错误的代码块中加入try-catch,可以将错误信息转化为警告,并允许游戏继续运行。这样可以快速定位错误位置,同时避免因小错误导致游戏崩溃。然而,使用try-catch时需确保了解错误类型,以便合理处理并预测可能产生的影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在bowling游戏里,由于ScoreDisplay中arraylist out of range的错误,使得HandleBowl执行失败,又使得CheckResult执行失败因为CheckResult使用了HandleBowl,最后每个Update都失败因为CheckResult每帧都被call,错误原始结果像这样:

 

ArgumentOutOfRangeException: Argument is out of range.
Parameter name: index
System.Collections.Generic.List`1[System.Int32].CheckIndex (Int32 index) (at /Users/builduser/buildslave/mono-runtime-and-classlibs/build/mcs/class/corlib/System.Collections.Generic/List.cs:419)
System.Collections.Generic.List`1[System.Int32].set_Item (Int32 index, Int32 value) (at /Users/builduser/buildslave/mono-runtime-and-classlibs/build/mcs/class/corlib/System.Collections.Generic/List.cs:637)
ScoreDisplay.FillRollCard (System.Collections.Generic.List`1 rolls) (at Assets/Script/ScoreDisplay.cs:24)
GameManager.HandleBowl (Int32 pins) (at Assets/Script/GameManager.cs:37)
LaneCheckBox.CheckAndManagerResult () (at Assets/Script/LaneCheckBox.cs:81)
LaneCheckBox.Update () (at Assets/Script/LaneCheckBox.cs:37)

 

在错误处使用了try catch后的好处:

* try{可能错误语句}catch{ Debug.LogWarning("错误在xxx这个位置!") }

这样运行后出现错误的时候,以上的原始错误信息就变成了一个warning : 错误在xxx这个位置! 这样就定位了错误

 

* 原始错误是Log error,错误语句下面的语句就不会执行,游戏就不能继续运行,但是如果catch以后改为log warning,错误语句下面的东西还会执行,这样虽然某处有错误,但整个游戏还是能继续下去

 

同时使用try catch要注意的点:

你必须清楚错误是什么,再从catch中log warning,因为游戏会继续下去。如果你不知道错误到底是什么也就不知道他能引起什么样的问题,但是如果你知道问题是什么,比如在bowling中问题是获得的分数不会显示,或在别的游戏中你知道会引起的问题很微小,那么就可以使用catch log warning,避免小错误crash整个游戏。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值