Game Maker позволяет нам контролировать функциональность игры через «объекты», каждый из которых состоит из «событий», которые запускаются в определенное время во время игры. Внутри событий есть «действия». Во-первых, стоит отметить, что сравнивать разработку Game Maker с C ++ - это все равно, что сравнивать мел и сыр. Тем не менее, теоретически, я думаю, вы могли бы отразить функциональность GM (хотя и очень неэффективно) в C ++ следующим образом:
Базовый класс объекта может выглядеть примерно так:
class CObjectBase
{
public:
CGameSprite* sprite;
int x, y;
...
virtual void onEventCreate( void ) {};
virtual void onEventDestroy( void ) {};
...
virtual void onEventKeyPressedUp( void ) {};
virtual void onEventKeyPressed...
...
... (there are lots of these)
// The draw event in GM (from memory) had in-built functionality:
virtual void onEventDraw( void )
{
CGameEngine::getSingleton()->DrawSpriteAtLocation( sprite, x, y );
}
};
Вы бы унаследовали этот класс и переопределили функции («события»), которые относятся к вашему объекту (операторы, составляющие эти функции, являются вашими «действиями»). Тогда будет какой-то класс синглтонов менеджера экземпляров объекта, который содержит список всех экземпляров объекта в текущей "комнате" и циклически перебирает каждый кадр (и обрабатывает экземпляры), вызывая соответствующие события, вызывая их соответствующие функции.
Интересно, что на самом деле это примерно показывает, почему такой системе, как Game Maker, не хватает степени эффективности. Существуют дополнительные, ненужные накладные расходы, которые позволяют разработчикам оставаться открытыми. Раздутый базовый объект, из которого происходят все объекты, часто оказывается слишком сложным для конкретных ситуаций. Например, представьте объект, в котором используются только два события из 50 - менеджер объектов все еще вслепую проверяет все остальные события, даже если они не используются. Очевидно, что оптимизация может быть сделана, но в целом, ширина двигателя в конечном итоге приводит к снижению производительности.
Что касается вашего запроса, относящегося к одному типу 'var', как уже было сказано, это скорее характеристика сценариев, а не C ++. Это доказывает, что Game Maker не может быть смоделирован одним C ++.