Я пытаюсь написать скриптовый движок для моей игры на C # / XNA, используя IronPython, и столкнулся с проблемой.
public class Game1 : Game, IGFXEnabledGame
{
//stuff
}
В конструкторе Game1
я выполняю необходимую инициализацию скрипта, а затем запускаю его для создания объекта Camera
. Я пытаюсь переместить следующую жестко запрограммированную инициализацию камеры в скрипт:
CCamera camera = new CFPPCamera(this);
CCamera
является абстрактным классом и CFPPCamera
наследуется от него. 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);
Код сценария :
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'.
'
Если я не передам генерацию Camera в скрипт, все будет нормально.
RenderingStreamTesting
и GFXEngine
- это два проекта в одном решении, а RenderingStreamTesting
является проектом базовой игры, на который ссылается GFXEngine
.
Из того, что я обнаружил, проблема может быть вызвана ссылками на разные сборки. Я дважды проверил, и все ссылки сделаны на собственные .NET .dll и все сторонние библиотеки перечислены в общем каталоге.
Чего мне не хватает?