Я портирую игру с Ruby на C++. Существует основной цикл рендеринга, который обновляет и рисует контент. Теперь предположим, что во время игры вы хотите выбрать элемент другого экрана. Способ, которым это делается в исходном коде, состоит в том, чтобы сделать Item item = getItemFromMenu();
getItemFromMenu
- функция, которая откроет меню и будет иметь свой собственный цикл обновления/рендеринга, что означает, что за все время, когда у игрока открылся этот другой экран, вы находитесь в вложенный цикл рендеринга. Я чувствую, что это плохой метод, но я не уверен, почему. С другой стороны, это очень удобно, потому что я могу открыть меню всего одним вызовом функции, поэтому код локализован. Любая идея, если это плохой дизайн или нет? я колебался, чтобы разместить его на игростроения, но так как это в основном дизайн вопрос, который я разместил его здесьНеправильная практика иметь вложенные петли визуализации?
редактировать: некоторые псевдо-код, чтобы дать вам идею:
Обычный цикл в основной части код:
while(open) {
UpdateGame();
DrawGame();
}
Теперь внутри UpdateGame() я бы сделать что-то вроде:
if(keyPressed == "I") {
Item& item = getItemFromInventory();
}
И getItemFromInventory()
:
while(true) {
UpdateInventory();
if(item_selected) return item;
DrawInventory();
}
Я боролся с подобной реальностью в приложении VB.NET, которое выполняет «DoEvents» в виде «окна прогресса» - цикла рендеринга, чтобы избежать зависания и гибели графического интерфейса, а также избежать гадости введения нитей. Это означает, что только одно из моих окон прогресса будет обновляться за раз. Я не против, и он _works_, и он избегает потоков. Но это неприятно. Я оставил его на данный момент ... –
Одна из плохих вещей, которые я мог видеть, - это возможный дублирующий код во всех местах, где у вас такой игровой цикл, в зависимости от того, как это делается. – Xeo
Не могли бы вы показать псевдокод за то, что вы имеете в виду? –