我正在尝试使用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