我正在嘗試使用IronPython向我的C#/ XNA遊戲編寫腳本引擎,並遇到了問題。無法在IronPython和C#中執行接口並實現此接口類#
public class Game1 : Game, IGFXEnabledGame
{
//stuff
}
在Game1
構造我做劇本必要的初始化,然後運行它來創建Camera
對象。我嘗試下面的硬編碼的相機初始化移動到一個腳本:
CCamera camera = new CFPPCamera(this);
CCamera
是一個抽象類,並從中CFPPCamera
inhertits。 CFPPCamera
具有下面的構造:
public CFPPCamera(Game game)
: base(game)
{
}
腳本初始化:
InitScriptPath = "InitScript.py";
rootDir = AppDomain.CurrentDomain.BaseDirectory;
scriptDir = Path.Combine(rootDir, "Scripts");
scriptEngine = Python.CreateEngine();
scriptRuntime = scriptEngine.Runtime;
scriptScope = scriptRuntime.CreateScope();
scriptSource = scriptEngine.CreateScriptSourceFromFile(Path.Combine(scriptDir, InitScriptPath));
scriptScope.SetVariable("this", this);
scriptSource.Execute(scriptScope);
Script代碼:
import clr
clr.AddReference('Microsoft.Xna.Framework')
clr.AddReference('Microsoft.Xna.Framework.Game')
clr.AddReferenceToFile("../../../../../GFXEngine/bin/x86/Debug/GFXEngine.dll")
import Microsoft.Xna.Framework
from GFXEngine.GFX.Camera import *
from GFXEngine.GFX import *
camera = CFPPCamera(this);
的代碼編譯沒有警告或錯誤,但在執行腳本我出現錯誤:
Unable to cast object of type 'RenderingStreamTesting.Game1' to type GFXEngine.GFX.IGFXEnabledGame'.
'
如果我沒有將相機一代傳遞給腳本,一切工作正常。
RenderingStreamTesting
和GFXEngine
是同一解決方案中的兩個項目,其中RenderingStreamTesting
是GFXEngine
引用的基礎遊戲項目。
從我發現問題可能由引用不同的程序集引起的。我再次檢查並且所有引用都是針對本機.NET .dll,並且所有第三方庫都列在共同目錄中。
我錯過了什麼?
我已經被具有不同構建版本的不同項目燒燬。無論這是否解決了您的問題,我都無法確定。 XNA是一個強項,但我的IronPython體驗是有限的。 – Finglas 2009-12-23 14:49:49