zoukankan      html  css  js  c++  java
  • 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
     
     
  • 相关阅读:
    【转载】Python中如何高效实现两个字典合并,三种方法比较。
    闭包在python中的应用,translate和maketrans方法详解
    python中的多线程【转】
    二叉树非递归遍历方法小结
    Mac OS X 10.9 编译C++11
    LeetCode--Reverse Words in a String
    LeetCode ---Anagrams() 详解
    KMP算法的代码实现
    Mac OS10.9 下python开发环境(eclipse)以及自然语言包NLTK的安装与注意
    秋季面试准备(1)——atoi的实现以及C++库函数stringstream
  • 原文地址:https://www.cnblogs.com/softidea/p/5281085.html
Copyright © 2011-2022 走看看