【问题标题】:Scripting (with PHP) in Java?用 Java 编写脚本(使用 PHP)?
【发布时间】:2010-12-02 20:15:51
【问题描述】:

我正在尝试编写一个简单的 Java 游戏。 我有一个 NPC 类,有一个 Dialog 函数,它返回 npc 会说什么,这取决于各种条件。

我认为将决定每个 npc 会说什么的逻辑卸载到脚本语言中可能是有意义的,以便可以轻松地对其进行更改更新。这样,我可以使用类似的东西创建每个 NPC 实例

npc 市长 = 新 npc("mayor.php");

或类似的东西。因此,我四处搜索并找到了一堆技术(PHP/Java Bridge、Querticus、Java Servlet SAPI 等),但只是对每种技术的作用以及是否提供了我正在寻找的功能感到困惑。

我并不仅限于 PHP,但这只是我最习惯的一种,因为我有决定 npc 对话框存储在本地 mysql 数据库中的标志条件。我宁愿没有在线可用的脚本,所以在这种情况下,也许另一种脚本语言会更有用?

我愿意接受有关如何实施此功能的任何想法或建议。谢谢!

【问题讨论】:

  • PHP 是一种 Web 服务器脚本语言。我不知道它是否在其他地方使用过。
  • 我认为你应该对面向对象编程和 Java 编程语言做更多的研究——特别是类、继承和设计模式。这是解决问题的错误方法。
  • 在游戏开发方面不一定如此,主要开发通常使用面向对象的语言(如 C++)和附加组件完成,而此类开发则使用脚本语言(如 Lua)完成。
  • 我建议在 XML 甚至 INI 文件中管理您的 NPC 选择配置参数。正如@Thomas Owens 所建议的那样,合并单独的脚本语言似乎是错误的方法。

标签: java php scripting


【解决方案1】:

有几种非 Java 语言可以在“Java”VM 上运行,例如 Groovy、Scala、Jython、Clojure 等。

其中之一是Quercus,它是 PHP 到 VM 的端口。有了它,您应该能够从 PHP 调用 Java,反之亦然。

【讨论】:

    【解决方案2】:

    如果您熟悉 Python,请查看Jython,这是一个用 Java 编写的 Python 解释器,允许您从 Java 调用 Python 代码,反之亦然。

    【讨论】:

      【解决方案3】:

      游戏中的脚本通常使用Lua 完成。但是,由于您使用的是 Java,我可能会推荐基于 Java 的脚本语言,例如 Groovy、JRuby 或 Jython。

      在 Java 6 中,您现在可以直接从 Java 调用脚本语言。例如,使用 JavaSCript:

      import javax.script.*;
      public class EvalScript {
          public static void main(String[] args) throws Exception {
              // create a script engine manager
              ScriptEngineManager factory = new ScriptEngineManager();
              // create a JavaScript engine
              ScriptEngine engine = factory.getEngineByName("JavaScript");
              // evaluate JavaScript code from String
              engine.eval("print('Hello, World')");
          }
      }
      

      有一个scripting project hosted by Sun,您可以在其中将各种脚本语言(包括 Python 和 AWK)与新的 Java 6 脚本引擎集成。不幸的是,PHP 还没有在这个列表中,虽然这里有一个第三方实现:

      http://php-java-bridge.sourceforge.net/

      【讨论】:

        猜你喜欢
        • 2015-05-23
        • 1970-01-01
        • 1970-01-01
        • 2011-03-03
        • 2013-10-07
        • 2023-03-25
        • 1970-01-01
        • 1970-01-01
        • 2016-09-04
        相关资源
        最近更新 更多