2010-02-28 82 views
1

我目前在java中为2D游戏编写了一个小型游戏引擎。
作为引擎的一部分,我希望支持脚本作为实现游戏中事件的主要方式。Java脚本存储和加载状态

  • 脚本可能会运行较长时间
  • 几个脚本可以并行运行
  • 调用Java代码被限制

当我想实现一个保存游戏功能,我将不得不以我可以存储在文件中的格式获取脚本的当前状态,并在稍后再次加载。

  • 是否有脚本引擎为java 哪些支持? (javascript或其他)
  • 他们如何处理 多线程和调用java的代码 ?

  • 这个问题在网上有没有好的资源?

感谢
编辑:为了什么,我想要做的清晰度

  1. 游戏启动一个或多个脚本启动并行
  2. Player中运行的节省话费的功能
  3. 的脚本暂停
  4. 脚本的状态被存储继续或结束
  5. Player会调用加载功能
  6. 脚本的状态加载
  7. 脚本恢复

我想知道是否有对Java任何脚本引擎支持暂停和存储在其内部状态这样的方式。
(不需要支持官方的java脚本API)

回答

1

什么你所说的基本上就是协程的运行,以及连续化协程的状态的能力。令人遗憾的是,我对Java或其可用的脚本工具一无所知,但一些游戏开发人员使用Lua,它具有coroutinesPluto,这是一个序列化库,据我所知,它允许您省去所有单个协程状态。显然,这意味着所有相关的状态都在协程中,并且当您读回时,保存的这些引用仍然有意义 - 这通常意味着通过可预测的句柄和ID值进行访问。

+0

尽管我不喜欢使用yield和resume的手动控制流处理,但它会导致一些问题,甚至可能会阻止其他问题。忽略这个用于java和Pluto的Lua似乎正是我需要的:-) – josefx 2010-03-01 17:24:06

+0

有一件事我发现,用于java的lua库仍然需要本地库,我想尽可能避免本地库。 – josefx 2010-03-01 19:37:52

+0

手动流量控制为您节省了很多麻烦 - 当您确切地知道上下文切换可能发生的位置时,数据的同步变得更容易。至于本地库,我确实看到有人在某处实现了Lua,但是我不知道Pluto是否可以使用它。 – Kylotan 2010-03-02 10:17:02

0

我不确定这是否是针对您的问题的解决方案。下面是一些脚本引擎的我知道,在JVM

  1. Rhino JavaScript引擎,mozilla.org/rhino
  2. Clojure的口齿不清引擎,工作clojure.org
  3. 常规,groovy.codehaus.org

可能是本文将帮助

http://java.sun.com/developer/technicalArticles/J2SE/Desktop/scripting/

+0

我的问题不是脚本自身,它是关于暂停正在运行的脚本并存储它的状态,以便我可以在稍后停止它的状态。 – josefx 2010-03-01 08:49:47