当前位置: 首页 > article >正文

FPS游戏框架漫谈第二十二天

今天我们要谈的话题是热更新辅助翻译工具
那么什么是热更新辅助翻译工具呢 我们聊的其实是一种语言翻译工具,就我们游戏而已采用的是c#语言开发,热更采用的是lua语言,
那么我们平时热更是不是需要写lua代码呢????????
这样问题就来了lua因为是动态语言,调式麻烦,不容易发现,很难维护等各种问题,那么就引发了很多优秀的团队在研究怎么样研究一个语言翻译工具呢??
如果说我们制作出来了一个从c#语言翻译成lua语言的工具的话,是不是意味着我们在也不需要忍受lua的臭脾气了呢,完全正确,你摆脱了他。
怎么做到的呢?比如外网出现严重bug,你以往就抓紧写lua脚本,但是现在有了他你不用了写了,你还是写c#代码,写完之后交给工具流即可,他会把你写的c#翻译成lua脚本的。

不对,好像我说了很多废话,现在的问题是我怎么造一个c#语言翻译成lua的工具呢?????????????
好难,我好像无从下手,莫慌。 我们先分析下平时你注意了没有我们的c#代码写完之后编译,他会变成一个叫Mono.Ceil的库,是不是想起来了。没有想起来是吧,赶紧动手试试,然后我们会发现一个有意思的东西就是Mono.Ceil这个dll中竟然有我们写的c#类的名字 字段的类型 以及类型之间的继承关系 以及方法签名 完美,那不就非常好翻译了吗?
来看案例
c#代码 Mono.Ceil中找到的信息
public class A TypeDefinition:A
{ Fields
int a = 2; x:int
int b = 3; y:int
int Test() Methoths
{ Test:int
return a + b;
}
}

哇 好像发现了规则 那么我对应的lua 不就是local A = class(“A”)
function A:Test()
end
…类似是不是很简单 就是固定字符串+Ceil中找到的信息 进行组合然后文件写入就不可以

不对啊 我好像没有看到方法体啊,这个方法体去被编译器放哪里去了呢?经过各种资源的查询,原来已经成为CIL里面,公共中间语言。
但是好像看起来格式比较低级啊,已经到了指令集的级别啊,不慌我们反编译他,什么工具ILSPY工具啊,经过翻译之后看到了这个信息

IL语言被ILSpy工具翻编译之后的状态
stoc:int32(a,ldc,i4:int32(2))
stoc:int32(b,ldc,i4:int32(3))
ret

add:int32( ldloc:int32(a),idloc:int32(b)
)

翻译成方法体
local a = 2
local b = 3
return (a + b)

看着成功了99% 但是剩余1%的路是非常艰辛的?动手是最好的老师。


http://www.kler.cn/a/231216.html

相关文章:

  • C++范围for和auto关键字
  • Java小白入门教程:三种注释+快捷方式
  • 22.Word:小张-经费联审核结算单❗【16】
  • 【力扣】49.字母异位词分组
  • FPGA|使用quartus II通过AS下载POF固件
  • python 使用Whisper模型进行语音翻译
  • 【Eclipse插件开发】3工作台workbench探索【下篇】
  • ftp安装脚本文档
  • 【Git】08 多人单分支协作场景
  • 解决ssh:connect to host github.com port 22: Connection timed out与kex_exchange_identification
  • Docker- chapter 1
  • Swin-UMamba:结合基于ImageNet的预训练和基于Mamba的UNet模型
  • chisel之scala 语法
  • Qt 项目树工程,拷贝子项目dll到子项目exe运行路径
  • ROS2 CMakeLists.txt 和 package.xml
  • springboot163美食推荐商城的设计与实现
  • Android 系统启动流程
  • GetBilibiliVideo:一个下载B站视频的开源神器,让你轻松管理你的二次元世界。
  • 单片机接收PC发出的数据
  • 计算机网络概念、组成、功能和分类
  • H2和流行关系型数据库对比
  • <网络安全>《20 工业防火墙》
  • FlinkSql通用调优策略
  • Tauri 的基本使用笔记
  • DevOps落地笔记-10|环境管理:交付测试环境的迅猛方法
  • 进程控制(Linux)