2010-07-09 3 views
2

В настоящее время я разрабатываю игровой движок C# .net XNA.Дизайн игрового движка с динамическими свойствами

У меня возник вопрос о дизайне двигателя. Прежде всего, я хотел бы, чтобы мой движок мог включать мой собственный язык сценариев. Для этого я думал, что должен иметь доступ ко всем свойствам всех объектов в игре или просто тем, которые я хотел бы изменить.

Первое, что я начал делать, - это попытка получить доступ по строкам. Для этого я сделал каждую «Сущность», что-то, что можно нарисовать на экране, иметь словарь всех свойств в нем. Добавление свойств было сделано вручную в классе Entity. С тех пор я читал, что, когда у вас много словарей, но не очень много вещей, они могут замедлить работу GC. Я считаю, что это то, что происходит в моей игре прямо сейчас. Я могу получить до 1000 объектов с основными свойствами, то есть цветом, положением, текстурой, прежде чем он начнет терять fps.

Мне было интересно, есть ли какой-либо другой способ получить доступ к свойствам объекта динамически на лету, кроме того, что я делаю или использую отражение, потому что это еще медленнее, чем словари. Или я просто переосмыслил весь дизайн?

ответ

2

Я сделал что-то подобное этому, хотя и с Java, используя JavaScript в качестве языка сценариев.

Способ, которым я работал, был в основном разоблачением объектов для языка сценариев. Вы должны иметь возможность вызывать методы в классах непосредственно с языка сценариев, поэтому я не вижу причин для реализации нечетного динамического свойства hack-thing.

+0

Что вы подразумеваете под воздействием объектов на язык сценариев? –

+0

Большинство встраиваемых языков сценариев позволяют подвергать определенные объекты скриптам. В основном вы говорите: «Сделайте этот объект C# доступным для скриптов с именем X». Затем вы можете использовать X в сценариях, получить доступ к любым методам X и т. Д., Как и в C#. –

2

Вы можете посмотреть компиляцию во время выполнения и просто использовать C# для написания сценариев. Если вы определяете стандартный интерфейс для своих скриптов, вы можете читать, компилировать и запускать их, когда ваш движок работает, подобно this.

+0

Вот одна хорошая скриптовая система: http://www.csscript.net/ –

+0

Я автор ссылки в этом ответе. Мы с большим успехом использовали C# в качестве языка сценариев. Это дает вам полную мощь C#/Visual Studio, позволяя вам контролировать ваш доступ к сценарию. Я даю скриптам доступ к моим игровым объектам через определенные интерфейсы, поэтому я могу контролировать, что можно и не может быть изменено. –

Смежные вопросы