• 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 - 200)
            :addTo(self)
    end
    
    return MainScene
    
    

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

    四、android工程的修改

    1.找到相对应的android工程的。 
    Lua工程通过Runtime构建的android工程在Lua工程framewokes untime-srcproj.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
     
     
  • 相关阅读:
    Centos 安装git
    mybatis 整合redis作为二级缓存
    jedis 连接池工具类
    IE8下使用asp.net core mvc+jquery ajaxSubmit问题
    .net core mvc部署到IIS导出Word 提示80070005拒绝访问
    IdentityServer4在Asp.Net Core中的应用(三)
    理解OpenID和OAuth的区别
    IdentityServer4在Asp.Net Core中的应用(二)
    使用Bind读取配置到C#的实例
    IdentityServer4在Asp.Net Core中的应用(一)
  • 原文地址:https://www.cnblogs.com/softidea/p/5281085.html
Copyright © 2020-2023  润新知