动态加载Java类与实现LUA
2014-4-18 9:17:7
收藏:0
阅读:87
评论:2
我和一个朋友正在用Java编写一个包含大量物品的游戏。每个物品都有一些静态属性,我们将在数据库中存储它们。然而,物品也有一种特殊的能力,具有特殊的效果。通常这些效果会相当独特,因此在物品的定义中实现它们是有意义的。
由于物品存储在数据库中,我们一直在试图决定如何加载这些特殊效果。理想情况下,一个物品的定义应该像下面这样:
名称 狗
尺寸 5
描述 如果玩家生命值低于50%,则对周围的玩家造成伤害
效果 if(currentplayer.health < 50) {entities.groups.surrounding.reduceHealth(20);}
我们一直在讨论两种不同的解决方案。第一个是以某种方式编译和存储Java代码在数据库中,另一个是实现LUA。不幸的是,我们都没有LUA的经验,不确定这是否是正确的方法。另一方面,预编译的Java解决方案似乎有些“hacky”。除此之外,我们可以预见到在大量成员调用时会出现问题,例如 a.player.head.hat.size.width.increase(1)。
我想知道的是:
- 这些方法在大量实体定义(5000+)的情况下如何比较?
- 这里是否有明确的路径,或者是否有其他更优越的解决方案?
- 如果将Java用作脚本语言和游戏引擎,这是否是不好的做法?
点赞
用户869951
将下面翻译成中文并且保留原本的 markdown 格式:
根据你所发布的内容,很难说哪种更好,尽管使用 Lua 路径,你可以直接运行存储的代码,而使用 Java 路径,你需要在加载时编译 Java。
如果你搜索“在 Java 中嵌入 Lua”,你会发现几个不同的 Java 库使得从 Java 中使用 Lua 变得容易,例如 luaj、Lua java、khalua、mochalua 等。使用哪一个取决于你想要做什么的具体情况,所以你将不得不尝试其中的几个。
Lua 是一门易学的语言。
2014-04-18 12:38:57
评论区的留言会收到邮件通知哦~
推荐文章
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?
- addEventListener 返回 nil Lua
- Lua中获取用户配置主目录的跨平台方法
你考虑过创建参数化装饰器(或其他方法),并仅在数据库中存储参数而不是功能吗?这样做会使数据库布局有点更加复杂,但它将使您避免存储源代码或实现脚本语言。
例如,您可以本质上使每个“物品”实体通过特殊能力实例具有与“特殊能力”的一对多关系。此外,每个这些“特殊能力分配”都将具有与参数的一对多关系。
这意味着您可以将“Steel Sword of Rage”赋予“Rage”特殊能力,其中参数为25和200。然后,您的“Rage”装饰器将修改武器的效果,在玩家血量低于25%时增加200攻击力。
同样,您的“Mithril Sword of Rage and Bleed”可以具有30/250(当血量<= 30%时,+250 PAtk)的“Rage”特殊能力和20/10/50的“Bleed”特殊能力,其中每次攻击有20%的机会使流血,每秒造成10点伤害,并以50%的速度下降。
这当然会使您的数据库变得更加复杂(尽管我觉得它适合您所尝试做的复杂性),您将不得不滥用反射(好吧,您不必这样做 - 这只是最简单的方法[也可能是最容易维护的])。不过,幸运的是,您可以在游戏启动时仅加载物品,并且只需担心性能问题/类型检查问题一次。