写在前面的话
这个世界也许是一面镜子,你对它笑它也对你笑。
lua脚本的填装方式在xlua里有三种方式,为什么会有三种方式呢?
第一种方式,
LuaEnv luaenv = new LuaEnv();
luaenv.DoString("require('mylua')");
第二种方式,通过System.IO 打开一个lua脚本,读取里面的字符串然后调用lua的DoString方法。
第三种方式, 自定义装载器,其实require的底层实现也是走这个装载器,看起来不一样而已。
图1图1是xlua里提供的例子。看到这个设计的时候,我叹了口气......都是被逼的。
因为,lua脚本作为资源走更新流程,也就意味着某些软件/顽皮的玩家会对脚本进行一波一波的修改。有的纯属好奇,有的也就是顽皮孩子的想法。总之,为了整个环境的安稳,也避免一些顽皮的孩子惹出不必要的麻烦。于是就有了自定义装载这个东西。
1.在AddLoader 的方法里可以定义脚本的解密方法,在资源发布的时候就可以加密一下。例子里有 SignatureLoader.cs脚本,(虽然有个加密、解密的例子,我确信开发的时候都会有人去魔改这个的类的,毕竟熊孩子还是不少的)
图32.另外呢!我注意到xlua里有一个更好玩的东西luagit。一些其他的资料表明这个luagit不是哪都可以用的(iOS上就难说了),我确信在这个自定义装载里luagit会有一席之地。
这些东西我是怎么知道的?
嗯...cocos2d-x 4.0的代码里,有一摸一样的东西。
图5 图六 图七最后,我们所以会使用luajit,还不是为了优化性能什么的。我们所以会用加密还不是因为这个世上总有几个熊孩子?所以,这些技术手段也只是规劝性质的让熊孩子别皮了,你真的要皮,还是会继续加密。就成了我开头说的,世界是一面镜子。不如,我们都对着镜子微笑吧!这些技术说到底只是手段而已,你对着镜子微笑,镜子也对着你微笑,世界就变得很美好了。
网友评论