如何使用Luaj进行java与Lua之间的交互调用

一、主要分为两个大步骤,Lua工程的修改,android工程的修改 
二、工程环境 
开发工具:Cocos-Code-IDE 
Lua版本 : Lua 5.1 
java版本:1.7 
NDK版本:android-ndk-r10c 
ANT版本:apache-ant-1.9.4 
Framwork:cocos-2dx-3.4 
python : 2.7.3

三、Lua工程中的修改

1.在Cocos-Code-IDE中新建Lua工程 
可以在这个工程目录中找到Luaj: 

2.新建一个lua类,写上调用android的方法。 
我在src/app/models/下面新建了一个Lua文件,命名为:luajTest.lua 
其中代码如下:

local luaj = require "cocos.cocos2d.luaj" --引入luaj

local luajTest = class("luajTest")  -- 构建lua 类

function luajTest:callandroid()  --调用android的方法实现
--包名/类名 这个可以在对应的android工程的manifest中得到
local className="org/cocos2dx/lua/AppActivity"
local args = { "hello android", callbackLua }
local sigs = "(Ljava/lang/String;I)V" --传入string参数,无返回值 --luaj 调用 Java 方法时,可能会出现各种错误,因此 luaj 提供了一种机制让 Lua 调用代码可以确定 Java 方法是否成功调用。
--luaj.callStaticMethod() 会返回两个值
--当成功时,第一个值为 true,第二个值是 Java 方法的返回值(如果有)
--当失败时,第一个值为 false,第二个值是错误代码
local ok,ret = luaj.callStaticMethod(className,"test",args,sigs)
if not ok then item:setString(ok.."error:"..ret) end end return luajTest

3.在入口场景中调用android方法。 
我修改了src/app/views/MainScene.lua的场景跳转方法,如下:

local MainScene = class("MainScene", cc.load("mvc").ViewBase)
local testluaj = require('src.app.models.luajTest')--引入luajTest类 function MainScene:onCreate()
-- add background image
display.newSprite("MainSceneBg.jpg")
:move(display.center)
:addTo(self) -- add play button
local playButton = cc.MenuItemImage:create("PlayButton.png", "PlayButton.png")
:onClicked(function()
self:getApp():enterScene("PlayScene") --跳转了一个场景 --在这里尝试调用android static代码
local testluajobj = testluaj.new(self) testluajobj.callandroid(self); end)
cc.Menu:create(playButton)
:move(display.cx, display.cy - )
:addTo(self)
end return MainScene

4.以上为Lua工程中的修改。

四、android工程的修改

1.找到相对应的android工程的。 
Lua工程通过Runtime构建的android工程在Lua工程\framewokes\runtime-src\proj.android中。

2.根据luajTest.lua类中定义的包名类名,找到AppActivity.java

3.打开AppActivity.java,在空白处加上uajTest.lua类中定义要调用的方法test.

 public static void test(final String param,final int luaFunc) {
System.out.println("----传过来的参数----param:"+param);
System.out.println("-------luaFunc:"+luaFunc); /**
* 给lua返回一个字符串
*/
Cocos2dxLuaJavaBridge.callLuaFunctionWithString(luaFunc, "success");
/**
* 移除luaId
*/
Cocos2dxLuaJavaBridge.releaseLuaFunction(luaFunc);
}
 

记得在文件上面引入Cocos2dxLuaJavaBridge类。

import org.cocos2dx.lib.Cocos2dxLuaJavaBridge;

4.到此,修改完成。构建apk,安装到手机中,看Log. 
如果看到以下Log,证明你的Luaj成功调用了java代码了。 

 http://blog.csdn.net/A_AsinCEO/article/details/49307997
 
 

Cocos-2dx-Lua中使用Luaj的完整示例(转)的更多相关文章

  1. Cocos 2d-X Lua 游戏添加苹果内购(二) OC和Lua交互代码详解

    这是第二篇 Cocos 2d-X Lua 游戏添加苹果内购(一) 图文详解准备流程 这是前面的第一篇,详细的说明了怎样添加内购项目以及填写银行信息提交以及沙盒测试员的添加使用以及需要我们注意的东西,结 ...

  2. Cocos 2d-X Lua 游戏添加苹果内购(一) 图文详解准备流程

    事前准备 最近给游戏添加了苹果的内购,这一块的东西也是刚刚做完,总结一下,其实这里不管是游戏还是我们普通的App添加内购这一块的东西都是差不多的,多出来的部分就是我们Lua和OC的交互的部分,以前刚开 ...

  3. Cocos 2d-X Lua游戏开发Mac环境搭建以及一点点感悟

    接触Cocos2d-x 最近由于公司项目的需要,自己开始接触Cocos,开始做一些简单的轻量级的游戏,以前没有接触过这一块的东西,也是借助这个机会学习一下游戏的开发,由于以前自己接触的全都是iOS和A ...

  4. Cocos2d-x Lua中使用标签

    游戏场景中的文字包括了静态文字和动态文字.静态文字如下图所示游戏场景中①号文字“COCOS2DX”,动态文字如图4-1所示游戏场景中的②号文字“Hello World”.静态文字一般是由美工使用Pho ...

  5. [译] Closures in Lua - Lua中的闭包

    原文:(PDF) . 摘要 一等(first-class)函数是一种非常强大的语言结构,并且是函数式语言的基础特性.少数过程式语言由于其基于栈的实现,也支持一等函数.本文讨论了Lua 5.x用于实现一 ...

  6. 传智播客C/C++学员荣膺微软&Cocos 2d-x黑客松最佳创新奖

     6月30日,历时32小时的微软开放技术Cocos 2d-x 编程黑客松在北京望京微软大厦成功落下帷幕,这是微软开放技术首次联合Cocos 2d-x 在中国举办黑客松.此次活动共有包括传智播客C/ ...

  7. Lua中的weak表——weak table(转)

    弱表(weak table)是一个很有意思的东西,像C++/Java等语言是没有的.弱表的定义是:A weak table is a table whose elements are weak ref ...

  8. Lua中的函数

    [前言] Lua中的函数和C++中的函数的含义是一致的,Lua中的函数格式如下: function MyFunc(param) -- Do something end 在调用函数时,也需要将对应的参数 ...

  9. Lua中的元表与元方法

    [前言] 元表对应的英文是metatable,元方法是metamethod.我们都知道,在C++中,两个类是无法直接相加的,但是,如果你重载了“+”符号,就可以进行类的加法运算.在Lua中也有这个道理 ...

随机推荐

  1. 2014年Windows平台软件推荐:神器小工具(骨灰级

    原文  http://www.wtoutiao.com/a/120621.html 底层工具 “If you know how to use Process Monitor competently, ...

  2. C++ Primer 学习笔记_32_STL实践与分析(6) --再谈string类型(下)

    STL实践与分析 --再谈string类型(下) 四.string类型的查找操作 string类型提供了6种查找函数,每种函数以不同形式的find命名.这些操作所有返回string::size_typ ...

  3. 菜鸟玩云计算之十一:Hadoop 手动安装指南

    Hadoop 手动安装指南 cheungmine 2013-4 本文用于指导在Windows7,VMWare上安装Ubuntu, Java, Hadoop, HBase实验环境. 本指南用于实验的软件 ...

  4. 理解 Python 中的线程

    原地址:http://blog.jobbole.com/52060/ 本文由 伯乐在线 - acmerfight 翻译自 Akshar Raaj.欢迎加入技术翻译小组.转载请参见文章末尾处的要求. 我 ...

  5. Java Word Ladder(字梯)

    问题: Given two words (start and end), and a dictionary, find the length of shortest transformation se ...

  6. leetcode第一刷_Unique Paths

    从左上到右下,仅仅能向右或向下,问一共同拥有多少种走法. 这个问题当然能够用递归和dp来做,递归的问题是非常可能会超时,dp的问题是须要额外空间. 事实上没有其它限制条件的话,这个问题有个非常easy ...

  7. hdu3329(2次dfs)

    传送门:The Flood 题意:当水的高度升为多少的时候,能够将这块区域分为两个部分. 分析:枚举高度,先从外围开始一次dfs,将水能淹没的标记,然后看非标记的是否已分为多块. #include&l ...

  8. android greenDao SQLite数据库操作使用的工具

    关于如何建立类生成一个演示project.今天介绍如何使用. 这是ExampleDaoGeneratorproject代码,做了一些改动 /* * Copyright (C) 2011 Markus ...

  9. MVC之文件上传1

    MVC之文件上传 前言 这一节我们来讲讲在MVC中如何进行文件的上传,我们逐步深入,一起来看看. Upload File(一) 我们在默认创建的项目中的Home控制器下添加如下: public Act ...

  10. silverlight游戏在坑内发展

    最初做<金X>使用silverlight它是由于右手锯的深蓝色silverlight游戏开发教程,在这里,好评,写得很好的教程!基于这样的思想游戏覆盖.你可以给游戏开发商新提供的非常多的思 ...