框架-LuaFramework(待写)

框架-LuaFramework(待写),第1张

从接触到Lua到现在差不多半年了,但对于Lua框架很多地方并不知道是如何实现的,只知道一直在写着游戏逻辑的Lua脚本。最近开始系统了解学习一下,不断扩充,充实自己。

刚开始总是对这几个名词弄混,正好整理一下

完整框架基本是这样的:

http://doc.ulua.org/article/ngui/simpleframework_base1.html

https://blog.csdn.net/Momo_Da/article/details/52857219

首先需要确定开发语言,比如c,c++,java,python,php,.net等,当开发语言确定后就可以根据语法规则通过代码编辑器开始编写代码了。

软件开发学习是一个非常不错的选择,就目前软件开发而言java专业仍是比较吃香的一个专业,就业也是很不错的。

这专业会学习以下语言:C,JAVA,PHP,PYTHON,MYSQL,JAVASCRIPT另外就是各个语言的框架,提高开发速度的。下面是跟数据相关的知识。

1.如果没有语法错误, 则以函数形式返回编译好的代码块; 否则,返回 nil 加上错误消息。

如果结果函数有上值, env 被设为第一个上值。 若不提供此参数,将全局环境替代它。 所有其它上值初始化为 nil。 (当你加载主代码块时候,结果函数一定有且仅有一个上值 _ENV ))。 然而,如果你加载一个用函数(参见 string.dump, 结果函数可以有任意数量的上值) 创建出来的二进制代码块时,所有的上值都是新创建出来的。 也就是说它们不会和别的任何函数共享。

2.接下来就是根据以上信息进行下面的操作,chunkname 在错误消息和调试消息中,用于代码块的名字。 如果不提供此参数,它默认为字符串chunk 。 chunk 不是字符串时,则为 "=(load)" 。

字符串 mode 用于控制代码块是文本还是二进制(即预编译代码块)。 它可以是字符串 "b" (只能是二进制代码块), "t" (只能是文本代码块), 或 "bt" (可以是二进制也可以是文本)。 默认值为 "bt"。

3.Lua 不会对二进制代码块做健壮性检查。 恶意构造一个二进制块有可能把解释器弄崩溃。

运行程序来遍历表中的所有域。 第一个参数是要遍历的表,第二个参数是表中的某个键。 next 返回该键的下一个键及其关联的值。 如果用 nil 作为第二个参数调用 next 将返回初始键及其关联值。 当以最后一个键去调用,或是以 nil 调用一张空表时, next 返回 nil。 如果不提供第二个参数,将认为它就是 nil。 特别指出,你可以用 next(t) 来判断一张表是否是空的。

索引在遍历过程中的次序无定义, 即使是数字索引也是这样。 (如果想按数字次序遍历表,可以使用数字形式的 for 。)

4.当在遍历过程中你给表中并不存在的域赋值, next 的行为是未定义的。 然而你可以去修改那些已存在的域。 特别指出,你可以清除一些已存在的域。

如果 t 有元方法 __pairs, 以 t 为参数调用它,并返回其返回的前三个值。

否则,返回三个值:next 函数, 表 t,以及 nil。 

5.传入参数,以 保护模式 调用函数 f 。 这意味着 f 中的任何错误不会抛出; 取而代之的是,pcall 会将错误捕获到,并返回一个状态码。 第一个返回值是状态码(一个布尔量), 当没有错误时,其为真。 此时,pcall 同样会在状态码后返回所有调用的结果。 在有错误时,pcall 返回 false 加错误消息。

希望能帮到你,谢谢!

觉得我的具体经历可以帮助题主理解这个问题。

第一个 cocos2d-x 项目(A 项目),我们使用的是 quick2.2.3。为什么选择quick,在这里有说:Cocos2d-x script language binding:Lua or Javascript

后来,我对其进行了较多的修改(详情见这里:zrong/quick-cocos2d-x · GitHub)。当然,所有的修改都是开源的,而且大多数修改都推送给 quick 官方库了(详见这里:Commits · chukong/quick-cocos2d-x · GitHub)。

基于这个修改版,我们把 A 项目完成了,但没有进行发布。

立项 B 项目时,cocos2d-x 已经升级到 3.3beta。于是我不再使用 quick,改用 cocos2d-x 3.3 lua。原因在这里有说:从 quick 转向 cocos2d-x 3.3 lua。

要把我以前在 quick 中修改的东西,全部移到到 cocos2d-x 中来,是不太可能的。因为上面的痛苦经历,我现在要保证cocos2d-x 跟随官方一起更新。如果修改太多 C++ 代码,那么合并 cocos2d-x 官方库一定会出问题的。

因此我把以前重写过的部分全部用 lua 来实现了,例如 SpriteFrameCache 不支持异步加载、AnimationCache 支持的 plist 格式定义文件采用 lua 等等。这需要花一些时间。

另外,filter、dragonbones 这些支持,我就将其包含在项目库中,这样 cocos2d-x 的升级和项目模块升级可以完全解耦,互不相关。

时,我还要保证 A 项目中积累起来的一套 lua 库在 cocos2d-x 3.3 中也可以正常使用。但 quick 对 cocos2d-x

的修改也比较大,很多 lua 代码是依赖相关的 quick C++代码的。因此,我需要把部分 quick 中的 C++代码也移到我的项目库中。

上面这个工作就花了较长的时间,同时我规范了 一套文档,希望统一开发者的开发行为。

不过一个更蛋疼的工作来了,A 项目准备发布。

这就意味着,我需要马上做出选择,是基于 quick 继续开发和维护 A 项目,还是将 A 项目转到 cocos2d-x 3.x。

这是个艰难的决定。最终我选择后者。

因为负责接入 SDK 的同学说 cocos2d-x 3.4 提供的插件机制能够方便他接入 facebook,而其他同学也已经习惯了 B 项目的工作方式,再回到 A 会比较痛苦。

而更重要的原因是,我不可能同时维护两个框架。

quick 开发组的 阳光七月 多次提醒我不要升级项目。我也知道工作量会非常大,但由于上面的两个原因,不得不升级。

以,我花了2周多时间做了这件事,移植的内容包括 cocos2d-x 框架、lua 框架以及工具链。A 项目中所有的 lua

文件,我基本上都改过了。因为不是一个人开发的,每个人的写码习惯不同,我经历了各种匪夷所思的错误和莫名其妙的调用,深刻感受到了码农和程序员之间的不

同。

即使我如 @徐若疾

所说,非常爱折腾,我也依然觉得这件事确实是相当浪费精力浪费生命的事情。如果团队大一点,钱多一点,我也是不愿意移植的。最多AB两个项目分两个团队同

时做就好了嘛。到时候 A 项目不赚钱了就直接扔掉。但为了能活下来,为了 A 项目给的一点点代理费,这事儿不得不做,且只能我来做。


欢迎分享,转载请注明来源:夏雨云

原文地址:https://www.xiayuyun.com/zonghe/279973.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-21
下一篇2023-04-21

发表评论

登录后才能评论

评论列表(0条)

    保存