zoukankan      html  css  js  c++  java
  • Lua学习 2) —— Android与Lua互调

    2014-07-09

    一、Android类调用lua并回调

    Android调用Lua函数,同一时候把类作为參数传递过去。然后再Lua中回调类的函数

    调用lua

    		mLuaState = LuaStateFactory.newLuaState();
    		mLuaState.openLibs();
    		mLuaState.LdoString(KKLua.loadAssetsString(mContext, "lua/swallow.lua"));//将lua转换为字符串
    		mLuaState.getField(LuaState.LUA_GLOBALSINDEX, "luaUpdate");//获取lua中的function
    		mLuaState.pushJavaObject(this);//传递參数
    		mLuaState.call(1, 0);//一个參数, 0个返回值

    回调的接口

    	public void luaDraw(int imageId, int x, int y, int scale) {//注意也必需要是public, lua才干调用到
    		System.out.println("imageId, x, y, scale: " + imageId + ", " + x + ", " + y + ", " + scale);
    	}
    
    lua代码
    function luaUpdate(luaCanvas)
      luaCanvas:luaDraw(0, 1, 2, 1)
    end

    二、luajava介绍(在LuaJava库里面包括的)

    lua中是没有类的。luajava库中有个luajava能够创建java中的类。并调用。

    以下介绍几个方法

    ①newInstance(className, ...)

    说明:能够依据类名创建一个Java类。同一时候返回一个lua变量与Java类相应。这样在lua中就能够直接调用Java中的方法了。

    obj = luajava.newInstance("java.lang.Object")
    -- obj is now a reference to the new object
    -- created and any of its methods can be accessed.
    
    -- this creates a string tokenizer to the "a,b,c,d"
    -- string using "," as the token separator.
    strTk = luajava.newInstance("java.util.StringTokenizer", 
        "a,b,c,d", ",")
    while strTk:hasMoreTokens() do
        print(strTk:nextToken())
    end

    ②bindClass(className)

    说明:能够让lua中的变量相应一个Java的类(是类。不是实例),这样就能够用lua的这个变量创建实例以及调用静态类

    sys = luajava.bindClass("java.lang.System")
    print ( sys:currentTimeMillis() )
    
    -- this prints the time returned by the function.

    ③new(javaClass)

    说明:这个就是在②的基础上创建的

    str = luajava.bindClass("java.lang.String")
    strInstance = luajava.new(str)


    ④createProxy(interfaceNames, luaObject)

    ⑤loadLib(className, methodName)

    这两个方法眼下还没用到。以后会用了再介绍

    以上。谢谢!

  • 相关阅读:
    sp2010 升级sp2013 用户无法打开网站
    powerviot install in sharepoint 2013
    can not connect cube in performancce dashboard
    westrac server security configure user info
    添加报表服务在多服务器场
    sharepoint 2013 office web app 2013 文档在线浏览 IE11 浏览器不兼容解决方法
    delete job definition
    目前付款申请单内网打开慢的问题
    item style edit in sharepoint 2013
    Could not load file or assembly '$SharePoint.Project.AssemblyFullName$'
  • 原文地址:https://www.cnblogs.com/gcczhongduan/p/4572974.html
Copyright © 2011-2022 走看看