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\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
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM