加载中!

我是流子吗?我不知道,或许是吧......或许又不是......我真的不知道.
<<  < 2008 - >  >>
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30

留言簿

公告

最新日志

最新评论

我的相册

搜索

登陆

友情连接

统计

2008-9-25 10:10:00
Java中使用Lua脚本语言2

实现一个怪物的创建,把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---

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文件中改成:

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();
  }
 }

 

posted @ 2008-9-25 10:10:00 流子 阅读全文 | 回复(4) | 引用通告 | 编辑
2008-11-23 14:39:48
Re:Java中使用Lua脚本语言2
访客tXOb61(游客)aa
posted @ 2008-11-23 14:39:48 访客tXOb61(游客) 个人主页 | 引用 | 返回 | 删除 | 回复
2008-11-23 14:39:35
Re:Java中使用Lua脚本语言2
访客tXOb61(游客)如果你使用 中文来写你代码的注释就更好了。

在blog发技术文章目的不就是让更多人来看么?

用E文注释,是能显示出你技术高超,但是 却提高了来查阅你文章的门槛, 提高门槛之后恐怕就没人来看了。

posted @ 2008-11-23 14:39:35 访客tXOb61(游客) 个人主页 | 引用 | 返回 | 删除 | 回复
2008-9-26 17:43:57
Re:Java中使用Lua脚本语言2
流子http://blog.csdn.net/blade2001/archive/2008/09/03/2875976.aspx
以下为流子的回复:
网游脚本浅谈
posted @ 2008-9-26 17:43:57 流子 个人主页 | 引用 | 返回 | 删除 | 回复
2008-9-25 22:35:06
Re:Java中使用Lua脚本语言2
访客8Eu28K(游客)主要是说没 那个API,你最好查下你那个版本的LUA 有哪些API
posted @ 2008-9-25 22:35:06 访客8Eu28K(游客) 个人主页 | 引用 | 返回 | 删除 | 回复
发表评论:
加载中!
Powered by Oblog.