动态加载Java类与实现LUA

时间:2014-04-18 09:17:07

标签: java lua

我和朋友正在用Java编写一个包含很多项目的游戏。每个项目都有一些我们将存储在数据库中的静态属性。但是,物品也具有特殊效果的特殊能力。通常这些效果是非常独特的,因此它们在项目的定义中实现是有道理的。

由于这些项目存储在数据库中,我们一直在尝试决定如何加载这些特效。什么是理想的是具有类似于下面的项目定义:

名称
尺寸 5
说明如果玩家健康状况低于50%,则对周围玩家造成伤害 效果 if(currentplayer.health < 50) { entities.groups.surrounding.reduceHealth(20);}

我们一直在讨论两种不同的解决方案。第一种是以某种方式在数据库中编译和存储java代码,另一种是实现LUA。不幸的是,我们都没有LUA的经验,也不确定这是否可行。另一方面,预编译的java解决方案看起来有点像hacky&#39;。除此之外,我们可以预见大型会员电话链的问题,例如: a.player.head.hat.size.width.increase(1)

我想知道的是:

  • 这些方法与大量实体定义(5000 +)相比如何?
  • 这里有明确的路径还是有另一种优越的解决方案?
  • 使用Java作为脚本语言以及游戏引擎是不是很糟糕?

2 个答案:

答案 0 :(得分:1)

您是否考虑过创建参数化装饰器(或其他方法)并简单地将参数存储在数据库而不是功能中?它会使数据库布局方面有点粗糙,但它可以避免存储源代码或实现脚本语言。

例如,您可以通过特殊能力实例使每个item实体与special_ability具有一对多的关系。此外,这些special_ability_assignments中的每一个都与参数具有一对多的关系。

这意味着您可以为Steel Sword of Rage Rage提供具有参数25200的{​​{1}}特殊功能。当玩家的生命值低于25%时,你的Rage装饰者会修改武器的效果,使攻击力提高200点。

同样,您的Mithril Sword of Rage and Bleed可以拥有Rage特殊能力,30/250(健康时+250 PAtk&lt; = 30%)和Bleed特殊能力,20/10 / 50每次打击有20%的几率造成出血,每秒造成10点伤害,每次出血造成50%的腐烂。

这当然会使你的数据库变得越来越复杂(尽管我觉得它适合你正在尝试做的事情的复杂性)而且你不得不滥用反思(好吧,你不必这样做) - 它只是最简单的方法[并且可能最容易维护])。幸运的是,你可以在游戏启动时加载一次项目,而你只需要担心一次性能问题/类型检查问题。

答案 1 :(得分:0)

根据你发布的更好的内容很难说,虽然使用th3 Lua路径你可以运行存储的代码,而使用java路径你必须在加载时编译java。

如果你搜索&#34;在java中嵌入Lua&#34;你会发现几个不同的java库,使Lua易于使用,如luaj,Lua java,khalua,mochalua等。使用哪个将取决于你想做什么的具体情况,所以你必须试试其中一些。

Lua是易于学习的语言。