【Tech-Lua】Cocos-2dx-Lua调用java的小白教程(一)

【Tech-Lua】Cocos-2dx-Lua调用java的小白教程(一)
先来接触两个Lua调用java的工具库

Lua作为一门脚本语言,非常使用开发游戏,正因为如此,就会出现了Lua与java相调用的问题。而作为一名刚学习Lua的小白来说,显得有点无从下手。我自己也经过百度与Google了2天之后,才开始真正的意识到该如何进行调用,其中包括方案分析与Cocos-IDE的工程结构,Cocos-toLua++ 的使用。

1.搭建环境
在进行一个项目的开发之前,我们必须先了解我们的项目环境,项目预期结果。目前我的工作是,把OneSDK的接口转变为Lua接口,提供给游戏部门直接使用Lua脚本语言来对接开发。所以我们必须先搭建游戏的开发环境。因为我司项目使用Cocos-Ide进行开发,所以需要搭建Ide的环境。环境包括以下几个库:

2.Lua调用java的方案选取
这个缠绕了我几天的时间,因为只要在网上百度一下这个题材,立即出现乱7八糟的说明文章,而这些说明教程只适合一些已经接触了一段时间的Lua大神才能看明白的,而对于我这些小白,完全感觉到无助和迷茫。究竟Lua调用java是怎么一回事呢?建议先阅读这篇文章有个大概了解先:
Cocos2d-x下Lua调用自定义C++类和函数的最佳实践

由以上的文章我们大概知道Lua调用java的基础原理为:

   Lua----> C++ ----->java

3.方案的选取
了解过Lua调用java的原理之后,就到了我们方案选取这步了,没有任何lua经验的我来说,这个问题又困扰了我2天,主要问题还是网上的所有教程都只是提供了部分说明,真正的步骤说明都隐藏了,这样对于一个小白来说实在看到云里云外的。
首先先说一下我们lua调用java的需求,需求是这样的,我们需要在lua环境中调用java的实例,字段,函数等。

先看一下网上最热的两种方式:Luaj与LuaJava
在分析这两种方式之前,如果你也是小白,我建议你要先去了解一下Cocos-2dx-Lua的工程结构。例如下图是一个在IDE的建立的一个Lua工程。
【Tech-Lua】Cocos-2dx-Lua调用java的小白教程(一)_第1张图片

src--------主要lua文件夹
res--------资源文件夹

而这个工程对应的Android的工程呢?因为之前对Cocos-2dx有所了解,所以我很快找到了其对应的android工程。
在该工程文件的夹的

cocos-2dx-工程目录\frameworks\runtime-src\proj.android

了解这个之后,我最天真的想法就是,在Lua工程中加入java的jar包,然后通过上面的Luaj或者Luajava工具库对java进行调用,但是IDE根本就没有这样的操作,而网上的一大篇言论都说,他们可以通过Luaj与Luajava进行调用,并且给出了代码例子这类的,而Luaj的例子都是一些简单的说明,代码说明,没有完整的步骤,而Luajava就更惨了,例子全都是android工程的。

好吧,既然如此,我只能自己去实践一次,看看这两个库到底怎么使用!

Cocos-2dx-Lua中使用Luaj的完整示例

Android工程中使用Luajava的完整示例

通过两个例子的实践(花了我一整天的时候),我们可以看出,
Luaj的使用可以直接在lua工程中对androidapi进行调用,而同时可以在Lua工程对应的android工程中对Lua进行调用,因此Luaj的使用方法变得最容易使人理解的。
Luajava的使用就没有那么明亮了,即使全世界都说Luajava的使用更全面,但由事例可以看出,Luajava都是在android工程中工作,我并没有找到其在Lua工程的使用方法,如有人知道,最好告知一下,分享一下。
两者都是使用过之后可以发现,Luaj是能调用Java的static方法,Luajava只能在android工程调用lua的明文文件的lua脚本,如何在android工程中调用相应lua工程里的lua脚本成了困扰我的问题。
因为luajava的原理是利用luajava.c构建的c语言来与lua文件混编达到java与lua相互调用的效果,但luajava.c如何在Lua工程中建立与对应的android工程的关联,无从得知。而且在luajava示例中可以看出,在java层面中,可以访问的时明文的lua文件,如图1。而lua工程中的lua逻辑文件在android工作早已被编译成了luac文件,可以在android工程的assets文件中看到,如图2.
图1:
【Tech-Lua】Cocos-2dx-Lua调用java的小白教程(一)_第2张图片

图2:
【Tech-Lua】Cocos-2dx-Lua调用java的小白教程(一)_第3张图片

因此两种文件的格式完全不同,出现的问题就是java层面中无法直接访问Lua的逻辑。这里暂时没有找到方法进行。只能跳过了。

经过短暂的了解之后发现,两个库都不适合我目前的项目,那么就需要用最原始的方法了。
Lua—–>C++—–>Java

这里就会出现史上最坑的tolua++的使用。

你可能感兴趣的:(Tech-Lua,lua,luaJ,LuaJava,Cocos-2dx)