我正在开发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”,出乎意料的是,我得到了不同的结果。
我怎样才能让它发挥作用?谢谢你提前!
答案 0 :(得分:0)
冒号让你搞砸了。没有带有两个参数的sayHello函数。通过使用冒号,您将'self'(人员)和字符串发送到java代码。你没有带有两个参数的java方法。只需在Lua中使用点而不是冒号即可使其工作。