2015-11-05 39 views
0

我有可以含有用作咒語腳本的任意數量的文件夾。這些腳本文件中的大部分代碼都非常少。使用多個ScriptEngines

一個簡單的咒語可能包含:

  • 返回名稱
  • 返回損壞
  • 顯示效果
  • 發射/控制彈丸

的更高級的可能改變地形或類似的東西。

JavaSpell類調​​用腳本投功能。

我想知道的是這樣做的,他們的優點&利弊的不同方式。現在我看到這一權利的方法是:創建一個新的ScriptEngine對象的時候,法術施放,摧毀它,當它完成。

我不認爲這是有可能在現有的ScriptEngine設置新ScriptContext因爲法術可能無法完成的鑄造呢,除非之前我實現某種形式的排隊系統的下一個法術鑄造。

回答

0

不是每次都創建一個新的腳本引擎,保持單ScriptEngine實例,只需要創建一個新的上下文(新全局)各一次。然後評估在這方面你的腳本:

ScriptContext context = new SimpleScriptContext(); 
context.setBindings(engine.createBindings(), ScriptContext.ENGINE_SCOPE); 

engine.eval(script, context); 

如果你的腳本不處理可變狀態在全球範圍內(JavaScript的全局範圍內),那麼你可以簡單地創建一個新的上下文,並使用發動機的相同的全局:

ScriptContext engineContext = engine.getContext() 

ScriptContext context = new SimpleScriptContext(); 
context.setBindings(
    engineContext.getBindings(ScriptContext.ENGINE_SCOPE), 
    ScriptContext.ENGINE_SCOPE 
); 

engine.eval(myScript, myContext);