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 ++.