3

我正在通过 luajava 开发游戏。当我在 lua 协程中调用 java 函数时,我收到错误“无效的方法调用。没有这样的方法。” 这是代码

package com.soyomaker;

import org.keplerproject.luajava.LuaException;

import org.keplerproject.luajava.LuaState;

import org.keplerproject.luajava.LuaStateFactory;

public class Main {

    public static void main(String[] args) {
        LuaState luaState = LuaStateFactory.newLuaState();
        luaState.openLibs();
        try {
            luaState.pushObjectValue(new People());
            luaState.setGlobal("people");
        } catch (LuaException e) {
            e.printStackTrace();
        }
        luaState.LdoFile("res/script.lua");
    }
}

//=============================================================================

package com.soyomaker;

public class People {

    public void sayHello(String name) {
        System.out.println("hello " + name);
    }

}

//=============================================================================

print(people)

print(people.sayHello)

people:sayHello("Bill")

function run()

  print("========run========")

  print(people)

  print(people.sayHello)

  people:sayHello("Jobs")

end

local co=coroutine.create(run)

print(coroutine.resume(co))

结果如下:

hello Bill

userdata: 040256B8

<b>function: 040252C0</b>

========run========

userdata: 040256B8

<b>function: 04026650</b>

false   Invalid method call. No such method.

我打印了两次“people.sayHello”,出乎意料的是,我得到了不同的结果。

我怎样才能让它工作?谢谢提前!

4

1 回答 1

0

冒号把你弄乱了。没有带有两个参数的 sayHello 函数。通过使用冒号,您将“自我”(人)和字符串发送到 java 代码。您没有采用两个参数的 java 方法。只需在 Lua 中使用点而不是冒号即可使其工作。

于 2013-09-06T15:40:40.660 回答