Cocos-2dx-Lua中使用Luaj的完整示例(转)
如何使用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代码了。
Cocos-2dx-Lua中使用Luaj的完整示例(转)的更多相关文章
- Cocos 2d-X Lua 游戏添加苹果内购(二) OC和Lua交互代码详解
这是第二篇 Cocos 2d-X Lua 游戏添加苹果内购(一) 图文详解准备流程 这是前面的第一篇,详细的说明了怎样添加内购项目以及填写银行信息提交以及沙盒测试员的添加使用以及需要我们注意的东西,结 ...
- Cocos 2d-X Lua 游戏添加苹果内购(一) 图文详解准备流程
事前准备 最近给游戏添加了苹果的内购,这一块的东西也是刚刚做完,总结一下,其实这里不管是游戏还是我们普通的App添加内购这一块的东西都是差不多的,多出来的部分就是我们Lua和OC的交互的部分,以前刚开 ...
- Cocos 2d-X Lua游戏开发Mac环境搭建以及一点点感悟
接触Cocos2d-x 最近由于公司项目的需要,自己开始接触Cocos,开始做一些简单的轻量级的游戏,以前没有接触过这一块的东西,也是借助这个机会学习一下游戏的开发,由于以前自己接触的全都是iOS和A ...
- Cocos2d-x Lua中使用标签
游戏场景中的文字包括了静态文字和动态文字.静态文字如下图所示游戏场景中①号文字“COCOS2DX”,动态文字如图4-1所示游戏场景中的②号文字“Hello World”.静态文字一般是由美工使用Pho ...
- [译] Closures in Lua - Lua中的闭包
原文:(PDF) . 摘要 一等(first-class)函数是一种非常强大的语言结构,并且是函数式语言的基础特性.少数过程式语言由于其基于栈的实现,也支持一等函数.本文讨论了Lua 5.x用于实现一 ...
- 传智播客C/C++学员荣膺微软&Cocos 2d-x黑客松最佳创新奖
6月30日,历时32小时的微软开放技术Cocos 2d-x 编程黑客松在北京望京微软大厦成功落下帷幕,这是微软开放技术首次联合Cocos 2d-x 在中国举办黑客松.此次活动共有包括传智播客C/ ...
- Lua中的weak表——weak table(转)
弱表(weak table)是一个很有意思的东西,像C++/Java等语言是没有的.弱表的定义是:A weak table is a table whose elements are weak ref ...
- Lua中的函数
[前言] Lua中的函数和C++中的函数的含义是一致的,Lua中的函数格式如下: function MyFunc(param) -- Do something end 在调用函数时,也需要将对应的参数 ...
- Lua中的元表与元方法
[前言] 元表对应的英文是metatable,元方法是metamethod.我们都知道,在C++中,两个类是无法直接相加的,但是,如果你重载了“+”符号,就可以进行类的加法运算.在Lua中也有这个道理 ...
随机推荐
- Ubuntu下Chromium源码的编译
一.失败的经历 印象中,谷歌建议Ubuntu建议版本为10.4.但是我找不到出处了,模糊的印象.不知道是不是这样? 1.Ubuntu10.4.3-desktop-amd64 + Virtual Box ...
- UVALive 5791 Candy's Candy 解题报告
比赛总结 题目 题意: 有f种口味的糖果,现在要把每颗糖果分到一些packs里面去.packs分两种: flavored pack:只有一种口味. variety pack:每种口味都有. 求满足下列 ...
- Android笔记二十七.Service组件入门(一).什么是Service?
转载请表明出处:http://blog.csdn.net/u012637501(嵌入式_小J的天空) 一.Service 1.Service简单介绍 Service为Android四大组件之中 ...
- VSTO 学习笔记(十)Office 2010 Ribbon开发
原文:VSTO 学习笔记(十)Office 2010 Ribbon开发 微软的Office系列办公套件从Office 2007开始首次引入了Ribbon导航菜单模式,其将一系列相关的功能集成在一个个R ...
- hdu4185+poj3020(最大匹配+最小边覆盖)
传送门:hdu4185 Oil Skimming 题意:n*n的方格里有字符*和#,只能在字符#上放1*2的板子且不能相交,求最多能放多少个. 分析:直接给#字符编号,然后相邻的可以匹配,建边后无向图 ...
- poj 1659 Frogs' Neighborhood (度序列)
Frogs' Neighborhood Time Limit: 5000MS Memory Limit: 10000K Total Submissions: 7295 Accepted: 31 ...
- Phalcon之 表单(Forms)
Phalcon中提供了 Phalcon\Forms组件以方便开发人员创建和维护应用中的表单. 以下的样例中展示了主要的用法: <?php use Phalcon\Forms\Form, Phal ...
- ACM-简单的主题Ignatius and the Princess II——hdu1027
转载请注明出处:http://blog.csdn.net/lttree Ignatius and the Princess II Time Limit: 2000/1000 MS (Java/Othe ...
- WPF界面设计技巧(3)—实现不规则动画按钮
原文:WPF界面设计技巧(3)-实现不规则动画按钮 发布了定义WPF按钮的教程后,有朋友问能否实现不规则形状的按钮,今天我们就来讲一下不规则按钮的制作. 不规则按钮的做法实际上和先前我们做不规则窗体的 ...
- U9文件与文件系统的压缩和打包
1.在Linux的环境中,压缩文件的扩展名大多为:*.tar,*.tar.gz,*.tgz,*.bz2. 2.gzip可以说是应用最广的压缩命令了.目前gzip可以揭开compress,zip和gzi ...