一、如何集成Lua实现到Android游戏
在这里我把自己通过整合资料完成的方案写下来,希望能给需要的程序员帮助,欢迎大家提供更快捷的方案。不再赘述Android开发环境的配置以及Lua脚本语言的介绍,需要了解的朋友可以Google资料。
我的开发环境是Window,列举我们将要用到的工具和组件:
Lua用C实现,所以如果我们不打算用Java重写解释器的话,我们需要一种方式使C和Java能良好的沟通,熟悉Java的程序员肯定想到了JNI(Java Native Interface)。你可能在Linux环境和Window环境使用过JNI,过程并不复杂:写好Java文件并在其中声明好native方法→用javah生成C头文件→为C文件中声明的函数写好实现→编译C代码生成动态链接库,这样就可以在Java中使用native方法了。
在Android下我们同样要经过这些步骤,只不过编译生成动态链接库的时候我们需要Google提供的NDK工具。在Window环境下使用NDK还需要安装UNIX模拟环境Cygwin。我们还将用到一个对Lua进行良好封装的开源项目luajava。
二、为什么将lua作为游戏脚本
就我个人的理解来看,使用LUA作为脚本语言有三个好处:
1、轻量级
LUA只包括一个精简的核心和最基本的库。这使得LUA体积小、启动速度快,从而适合嵌入在别的程序里。
2、可配置性、可扩展性
LUA并不象其它许多大而全的语言那样,包括很多功能,比如网络通讯、图形界面等。但是LUA可以很容易地被扩展:由宿主语言(通常是C或C++)提供这些功能,LUA可以使用它们,就像是本来就内置的功能一样。
3、兼容性
LUA由标准C编写而成,几乎在所有操作系统和平台上都可以编译,运行。
这些都是LUA本身所具备的一些特质。而这些特质正好就决定了LUA的广泛使用:
1、轻量级
没人希望自己的应用程序需要附加几十M甚至几百M的库类文件才能运行。如果一个应用程序这么做了,那么它很难做到Run Anywhere。当然,这个Run Anywhere只是这么一说。
2、可配置性、可扩展性
在游戏研发的过程中,修改是必不可少的过程。如果每次修改都需要从底层做起,那必定是一个非常繁琐的过程。而LUA的可配置、扩展正好可以解决这一问题。
3、兼容性
游戏只是游戏,不能决定玩家的机器配置,更不能决定玩家的操作系统。如果因为游戏与用户的操作系统不兼容导致游戏销量下降,我想,这肯定是不被允许的。
所以,具备了以上三个特点的LUA,没有不作为游戏脚本使用的理由。
三、为什么辅助程序在游戏中调用Lua
主要用途是: (1)描述界面:WOW和剑网三的界面都是用LUA写的; (2)沟通引擎:游戏图形引擎提供了一些接口库,可以在LUA中调用; (3)服务器端:有些游戏,例如剑网三,在服务器端也会大量使用LUA。
四、lua能做像TC或按键精灵那样的脚本吗?
TC不知道是什么,不过几乎任何语言都能做按键精灵,不过都是重复造轮子。
会不会被检测就看游戏的检测机制了,我认为只要高度模拟键盘鼠标设备,很难被检测到,就是读取游戏画面可能比较难做
如果游戏本身支持lua拓展,那么自然用lua做一些辅助脚本最好,这也要看游戏开发的接口有多少