Cocos2d-x Lua中的Luaj

Luaj是Java的Lua解释器,基于Lua5.2.x,Luaj是基于Java的实现,可在Java应用中集成Lua虚拟机。简单来说,Luaj是Lua的Java版本的实现,使用Luaj可在Java程序中运行Lua程序,换言之,也就是为Java带来了脚本功能。Luaj对JavaSE和Android都提供了支持。

在Cocos2dx中,Luaj是用来完成Lua和Java之间的数据交互的。

http://www.cocos2d-lua.org/api/luaj/index.md

local luaj = nil
-- 判断是否Android系统
local isAndroid = cc.Application:getInstance():getTargetPlatform() == cc.PLATFORM_OS_ANDROID
if isAndroid==true then
  -- 加载Luaj虚拟机
  local luaj = require("cocos.cocos2d.luaj")
  -- Luaj调用Java方法
  -- 包名/类名,对应Android工程的manifest文件  
  local className = "org/cocos2dx/lua/AppActivity"
  -- 设置方法名
  local methodName = "setUpdateParameter"
  -- 设置方法参数
  local args = {"V", setSdkVersion}
  -- 设置方法参数类型和返回值类型,可省略
  local sigs = "(V;I)V" 
  -- 调用Java方法并返回
  local isOk, result = luaj.callStaticMethod(className, methodName, args, sign)
  if isOk then
    print(result)
  end
end

在Cocos2dx应用中,在加载页中通常会对SDK版本进行检测并更新,这里针对Android平台给出示例:

local Update = {
    className = "com/coco2dx/org/HelperAndroid",
    sdkVersionUrl = "", -- 服务端SDK版本的json文件路径,供Lua使用HTTP的XHR对象获取。
    sdkDownloadUrl = "",
    sdkVersion = "",
    needUpdate = 0
}
-- 设置更新参数
function Update:setUpdateParameter()
    local isAndroid = cc.Application:getInstance():getTargetPlatform() == cc.PLATFORM_OS_ANDROID
    if isAndroid==true then
        local luaj = require("cocos.cocos2d.lua")
        local className = self.className
        local methodName = "setUpdateParameter"
        local args = {"V", setSdkVersion}
        local sigs = nil
        local isOk,errCode = luaj.callStaticMethod(className, methodName, args, sigs)
        if not isOk then
            print("[Update:setUpdateParameter] isOk="..isOk.." errCode="..errCode)
        end
    else
        self:checkSdkVersion()
    end
end
-- 设置SDK版本
function cc.exports.setSdkVersion(version)
    Update.sdkVersion = version
    -- 检测SDK版本
    update:checkSdkVersion()
end
-- 检测SDK版本
function Update:checkSdkVersion()
    local json = require("json")
    local xhr = cc.XMLHttpRequest:new()
    xhr.responseType = cc.XMLHTTPREQUEST_RESPONSE_JSON
    xhr:setRequestHeader("Content-Type", "application/json; charset=utf-8")
    local url = Update.sdkVersionUrl
    xhr:open("GET", url)
    local function onHttpRequestCompletedPhone()
        if xhr.status==200 then
            local response = xhr.response
            local data = json.decode(response)
            if Update.sdkVersion~=data["sdkVersion"] then
                Update.needUpdate = 1
                Update.sdkDownloadUrl = data["sdkDownloadUrl"]
            end
        end
    end
    xhr:registerScriptHandler(onHttpRequestCompletedPhone)
    print("[Update:checkSdkVersion] "..url)
    xhr:send()
end

return Update
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值