在Java中使用用户脚本进行NPC AI

在我的正在开发的游戏(或可能的未来游戏)中,我考虑添加自定义的、由用户编写的脚本来控制敌人/NPC的AI。这样,任何懂得编写脚本的用户都可以为敌人编写AI。我想使用LUA(或如果更简单的话,其他脚本语言),但我完全不知道如何做到以下几点:

  1. 在Java代码中嵌入LUA和其他脚本语言
  2. 让这些脚本控制特定的NPC或NPC类型
  3. 在脚本语言中提供特殊功能来控制玩家是否靠近NPC或类似情况。

Computercraft 模组对于 Minecraft 来说是一个很好的例子,基本上就是我想要实现的(或多或少)。只是我不是要执行精确的命令(向前移动一个格子,向左移动两个格子等),而是想用脚本来实现AI。你有任何教程、建议或类似的东西吗?


回答:

http://sourceforge.net/projects/luaj/

这里有一个你可以阅读的自述文件。

基本上,你希望在代码的某些点上调用Lua脚本,这些脚本可以执行AI计算并将结果返回给你的Java引擎。当然,这一切都取决于你的引擎,它在可能的集成方面有多灵活,等等。

编辑:

你需要为这些脚本提供一些上下文,即设置Lua环境,使其了解你的引擎(对象/表,函数)。例如,如果你想让用户能够移动AI角色,那么你必须在Lua中注册(例如)一个 AIEnemy 对象,给它一些方法(moveshoot)等。这些方法然后链接(调用)到你的Java引擎中的相应方法,并传递适当的参数。

嵌入Lua并使你的应用程序与之协同工作是一件很有趣的事情,尽管我从未在Java中做过(在C/C++中做过)。

话虽如此,这需要对集成的设计进行一些认真的思考。先从非常简单的东西开始实验,感受一下,最好是在游戏开发之外进行。一旦你掌握了它,就可以继续进行更深入的集成。

顺便提一下,不要让Lua的简单性欺骗了你。它是一种非常强大的语言。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注