热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Cocos2dxLua中使用Luaj的完整示例(转)

如何使用Luaj进行java与Lua之间的交互调用一、主要分为两个大步骤,Lua工程的修改,android工程的修改 二、工程环境 开发工具:Cocos-Code-IDE Lua版

如何使用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: 
Cocos-2dx-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 - 200)
        :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的完整示例(转)

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

推荐阅读
author-avatar
-生命之水-
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有