Я працюю над невеликим ігровим двигуном, і у мене виникли проблеми.
Поки що у мене є клас вікон, який є обгорткоюдля вікна Win32 У мене також є клас менеджера вікон (це "клас одиночки"), який управляє створенням вікон та обробкою вікон повідомленнями. Потім у мене є клас двигуна, який поки що є найважливішим класом, оскільки це інтерфейс для Цей клас двигуна містить основний цикл і пристрій direct3d, а також код для його створення та знищення. Цей клас двигунів також містить об'єкт класу Window, який виконує функції головного / головного вікна для пристрою direct3d.
Моя проблема полягає в тому, що двигун повинен реагувати надеякі повідомлення Windows (наприклад, WM_SIZE або WM_ACTIVATEAPP), але обробник повідомлень є частиною класу Widnow, що на "рівень" нижче класу Engine. Я також думаю, що я повинен створити інший клас, щоб інкапсулювати рендеринг / графіку двигуна, а потім додати цей клас до основного класу двигунів.
Тому я не впевнений, чи повинен я мати клас Graphics усередині класу Window, або клас Window всередині класу Graphics, або мати їх поряд з собою в основному класі Engine.
Відповіді:
4 для відповіді № 1Ви живете в світі, керованому подіями, тому використовуйте події. Нехай ваша обгортка вікон надає події, на які ігровий движок може підключити та реагувати.
1 для відповіді № 2
Не перетворюйте об'єкт, який керує тим, як ваш ігровий движок взаємодіє з базовою операційною системою, дочірнім об'єктом двигуна. Шар ОС повинен керувати двигуном, а не навпаки.
(Більшість двигунів і програмістів трапляються неправильно, до речі.)
1 для відповіді № 3
Чи будете у вас колись декілька Windows? Все більше мультимоніторів все більше використовують для різноманітних ігор.
Чи будете ви коли-небудь запускати кілька графічних зображень в одному вікні? Досить малоймовірно. Це підказує мені, що Вікно має бути у графіці, а не навпаки.