2010-02-28 88 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