lua学习(三)

错误处理

assert断言

  • 作用:确保某些数据是符合预期的,避免影响最终结果。

  • 格式:assert(条件语句,报错信息)
    当条件语句为true时,assert语句不会有任何行为,但是当为false时,assert会将报错信息弹出,并中断程序的执行。

  • 注意:由于断言只在调试模式下有效,因此在生产环境中通常会被禁用,以避免影响程序性能‌。

error

  • 功能:主动发起错误并终止正在执行的函数,并返回message的内容作为错误信息。

pcall

在这里插入图片描述

pcall以一种"保护模式"来调用第一个参数,如果遇到报错,就会返回false及报错信息,因此pcall可以捕获函数执行中的任何错误。

pcall(function, 传给函数的参数)

pcall(function(i) print(i) end, 22)  -- 输出:22

-- 当函数报错时,会返回false,报错信息
local result, err = pcall(function(i) print(i) error("error") end, 22)

在这里插入图片描述

xpcall

参数:待执行函数,错误处理函数,传给待处理函数的参数
作用:通常在错误发生时,希望落得更多的调试信息,而不只是发生错误的位置。但pcall返回时,它已经销毁了调用桟的部分内容,Lua提供了xpcall函数,xpcall接收一个错误处理函数,当错误发生时,Lua会在调用桟展开前调用错误处理函数,于是就可以在这个函数中使用debug库来获取关于错误的额外信息了。

xpcall(function(i) print(i) error('error..') end, function() print(debug.traceback()) end, 33)

在这里插入图片描述

热更

条件

  1. 资源管理‌:热更新需要有一个强大的资源管理系统来高效管理游戏中的资源文件,如图片、音效等。这个系统需要能够追踪每个资源文件的版本和下载情况,确保在游戏热更新过程中资源能够被准确地获取和使用,避免因资源缺失或版本不一致而导致的问题‌。
  2. 版本控制‌:版本控制是热更新中不可或缺的一环。通过版本控制系统,可以为每个版本赋予唯一的标识,并记录下更新内容。这样,在热更新过程中,系统能够生成只包含更新差异的补丁包,而不是整个游戏,从而大大减少下载量并提高更新速度。同时,版本控制系统还支持多个开发者并行工作,自动合并更新,提高开发效率‌。
  3. 增量更新‌:增量更新是热更新技术中的高级应用。它只传输给用户更新的那一小部分资源,而不是整个游戏。这意味着用户在下一次游戏时,只需要下载和安装那些发生变化的资源,而不是重新下载整个游戏。这不仅节省了用户的存储空间,还提高了下载速度。增量更新还可以先在一部分用户中进行测试,以确保更新的稳定性和兼容性‌。
  4. 服务器支持‌:游戏服务器需要支持热更新功能。通常,游戏逻辑代码放在服务器端,资源文件放在客户端。可以使用Unity3D的AssetBundle功能来打包资源文件,然后将打包好的资源文件发送给客户端。当游戏需要更新时,服务器端将新的逻辑代码打包成AssetBundle,然后发送给客户端。客户端接收到新的逻辑代码后,通过加载AssetBundle来实现更新‌。
  5. 网络通信‌:游戏服务器需要通过网络通信与客户端进行交互。可以使用Java的网络编程库来实现网络通信,例如使用Socket进行网络通信‌。

为什么支持热更

  1. lua为动态脚本语言,其是解释器一行行代码解释成机器码后才执行。
  2. lua可以结合AB包使用。

流程

虚拟机

垃圾回收机制

实现了一个增量标记-扫描收集器。 它使用这两个数字来控制垃圾收集循环: 垃圾收集器间歇率和垃圾收集器步进倍率。 这两个数字都使用百分数为单位 (例如:值 100 在内部表示 1 )。

垃圾收集器间歇率控制着收集器需要在开启新的循环前要等待多久。 当这个值比 100 小的时候,收集器在开启新的循环前不会有等待。 设置这个值为 200 就会让收集器等到总内存使用量达到 之前的两倍时才开始新的循环。

垃圾收集器步进倍率控制着收集器运作速度相对于内存分配速度的倍率。 增大这个值不仅会让收集器更加积极,还会增加每个增量步骤的长度。 不要把这个值设得小于 100 , 那样的话收集器就工作的太慢了以至于永远都干不完一个循环。 默认值是 200 ,这表示收集器以内存分配的"两倍"速工作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值