Дизайн игрового движка с динамическими свойствами - PullRequest
2 голосов
/ 09 июля 2010

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

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

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

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

Ответы [ 2 ]

2 голосов
/ 09 июля 2010

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

2 голосов
/ 09 июля 2010

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

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

...