`

Java中使用Lua脚本语言2

    博客分类:
  • LUA
lua 
阅读更多
实现一个怪物的创建,把lua里的设定当作初始状态传给monstor,名字为sample monstor,防御10,攻击10,生命100

1.先导入lib--luajava-1.1.jar

import org.keplerproject.luajava.LuaState;
import org.keplerproject.luajava.LuaStateFactory;

public class Load{
LuaState luaState;
/**
* Constructor
* @param fileName File name with Lua .
*/
Load(final String fileName) {
this.luaState = LuaStateFactory.newLuaState();

this.luaState.openLibs();
   this.luaState.LdoFile(fileName);

}
/**
* Ends the use of Lua environment.
*/
void close() {
this.luaState.close();
}
/**
* Call a Lua inside the Lua to insert
* data into a Java object passed as parameter
* @param Name Name of Lua .
* @param obj A Java object.
*/
void run(String Name, Object obj) {
this.luaState.getGlobal(Name);
this.luaState.pushJavaObject(obj);
this.luaState.call(1,0);
}
}


public class Monster{
/* Info */
protected String race;
protected int defense;
protected int attack;
protected int life;
/* */
private Load ;
public Monster(String race) {
/* Loads Lua for this race.*/
this. = new Load(race+".lua");
/*Call Lua create .*/
.run("create", this);
}

public void setRace(String race) {
   this.race = race;
}
public String getRace() {
return race;
}
public int getDefense() {
return this.defense;
}
public void setDefense(int defense) {
this.defense = defense;
}
public int getLife() {
return this.life;
}
public void setLife(int life) {
this.life = life;
}
public void setAttack(int attack) {
this.attack = attack;
}
public int getAttack() {
return this.attack;
}
}


monstor.lua---

function create(monster)
monster:setRace("Sample Monster")
monster:setDefense(10)
monster:setAttack(10)
monster:setLife(100)
end


但总是抛出这个错误:

PANIC: unprotected error in call to Lua API (Invalid method call. No such method.)

不知为何,以后用到的时候再research.

已经查出来,原来在Monster类中少了个方法:

public void setRace(String race) {
   this.race = race;
}

怪不得会找不到,

要在一lua文件a.lua里导入其他的lua文件b.lua,用require "b"

如果要从lua中运算后得到返回参数,则需要做一下修改:在lua文件中改成:

function create(monster)
monster:setRace("Sample Monster")
monster:setDefense(10)
monster:setAttack(10)
monster:setLife(100)
return monster
end


在Load.java中的run改成如下:

void run(String Name, Object obj) {
   this.luaState.getGlobal(Name);
   this.luaState.pushJavaObject(obj);
   this.luaState.call(1, 1);// 一个参数,0个返回 
   try {
    Object object =luaState.getObjectFromUserdata(1);
   } catch (LuaException e) {
    e.printStackTrace();
   }
}
分享到:
评论
1 楼 相似的悲哀 2011-12-28  
麻烦问下,我想从lua中的table中取值(Table中再嵌套Table),应该怎么做呢,用流还是用luajava中的方法,好纠结啊,希望大神可以给菜鸟指点指点 谢谢

相关推荐

    Java调用Lua脚本(LuaJava使用、安装及Linux安装编译)

    Java调用Lua脚本是一种常见的跨语言交互技术,特别是在游戏开发和自动化脚本编写中。本文将详细介绍如何在Java环境中使用LuaJava库进行交互,并在Linux系统上进行安装和编译。 首先,让我们理解LuaJava。LuaJava是...

    Lua脚本语言中文教程.pdf

    这种理念使得Lua成为了一个高效的脚本语言,适用于多种开发环境。 最后,这本书的翻译和校对是由***的朋友们共同努力的结果。参与翻译和校对的人员被记录在名为thanks.lua的文件中,体现了开源和协作精神在编程社区...

    Jill——Java编写的Lua脚本引擎

    Java对象可以通过`JillEngine.registerJavaObject()`注册到Lua环境,然后在Lua脚本中使用。反之,Lua的值也可以通过`JillEngine.getGlobal()`获取到Java世界。 5. **错误处理**:在运行Lua脚本时,可能会遇到语法...

    Java学习资料-Spring Boot - 结合 Redis 使用 Lua脚本

    首先,让我们深入了解一下使用Lua脚本在高并发场景中的价值。在并发环境中,数据一致性是非常关键的。Lua脚本的原子性操作特性使得它成为解决这类问题的理想选择。当多线程或多个客户端同时访问同一数据时,Lua脚本...

    nodemcu lua脚本语言开发工具

    总结,nodemcu lua脚本语言开发涉及到固件管理、工具使用、文档查阅和编程环境搭建等多个环节。通过熟悉这些知识,开发者可以高效地进行nodemcu项目开发,利用lua的简洁性和易读性,快速实现物联网应用。在实践中,...

    luajava-x32-x64.zip

    luajava是Lua语言与Java平台的交互库,它允许Lua脚本直接调用Java类和方法,同时也让Java程序能够执行Lua代码,实现了两种语言的无缝集成。这个压缩包"luajava-x32-x64.zip"包含了luajava-1.1.jar的64位和32位版本,...

    luajava-1.1.0

    luajava-1.1.0是一个专门用于连接Lua脚本语言和Java平台的库,它为开发者提供了在Java应用程序中运行Lua代码的能力,同时也允许Lua程序调用Java类和方法,实现了两者的无缝集成。这一强大的工具广泛应用于游戏开发、...

    Javaweb中调用lua的插件

    这个JAR文件可以被JavaWeb应用引入,以便在Servlets、JSP或其他Java组件中使用lua的功能。通过`java.lang.reflect.Method`和`java.lang.invoke.MethodHandle`等Java反射机制,可以动态地调用Lua函数,实现动态脚本...

    luajava实例及jar包,dll动态链接库

    LuaJava是将Lua脚本语言与Java平台紧密结合的一个开源项目,它允许在Java程序中无缝地嵌入和执行Lua代码,从而实现灵活的脚本化功能。这个技术尤其适用于游戏开发、自动化测试、配置管理等领域,因为它提供了快速...

    Lua-1.0.113 luajava

    3. 示例代码或文档,展示如何在Lua中使用Java API。 4. 配置文件,可能包含LuaJIT和LuaJava的设置选项。 总的来说,Lua-1.0.113 luajava是结合了Lua的灵活性和Java的高性能的一个解决方案,为开发者提供了一种高效...

    luajava-1.1-x64-lua51

    2. **初始化Lua环境**:在Java代码中创建LuaState对象,这是执行Lua脚本的上下文。 3. **注册Java方法**:使用LuaState的函数将Java方法暴露给Lua,以便在Lua脚本中调用。 4. **执行Lua脚本**:调用LuaState的相应...

    Android-使用lua语言开发Android应用

    首先,Lua是一种轻量级的脚本语言,它的语法简洁明了,易于学习和使用。其主要设计目标是提供一个易嵌入、易扩展的脚本解决方案,这使得它成为在Android应用中嵌入脚本逻辑的理想选择。通过在Android应用中集成Lua,...

    浅析android手游lua脚本的加密与解密(番外篇之反编译的对抗)

    - **背景**:2018年腾讯游戏安全竞赛中的一项挑战,题目要求选手通过逆向工程分析出使用Lua脚本的游戏逻辑。 - **技术细节**:该题目的难点在于Lua字节码被进行了特殊处理,包括修改文件头以及对字节码进行了简单的...

    LuaJava5.1

    使用LuaJava,开发者无需了解底层的C/C++接口,而是可以直接在Java环境中加载和运行Lua脚本,极大地简化了跨语言交互的过程。 LuaJava的源代码提供给了开发者深入研究和定制的可能性。通过查看和分析源代码,我们...

    luajava.zip

    LuaJava是一个强大的工具,它将Lua脚本语言与Java环境紧密地结合起来,使得开发者可以在Java应用程序中无缝地使用Lua脚本进行逻辑处理和扩展功能。在本文中,我们将深入探讨LuaJava的核心特性、安装与配置、使用方法...

    lua插件包,帮助你搭建lua-java项目

    - **高性能**:Lua解释器运行速度快,对资源占用少,适合在有限的硬件环境中使用。 - **灵活性**:Lua支持面向过程、面向对象和函数式编程,可以根据需求灵活选择编程风格。 5. Lua在游戏开发中的应用: Lua因其...

Global site tag (gtag.js) - Google Analytics