Я пишу ASCII DOS-Prompt для старой школы. Честно говоря, я пытаюсь подражать ZZT, чтобы узнать больше об этом бренде игрового дизайна (даже если он устарел)
У меня все хорошо, у меня работает полноэкранный текстовый режим, и я могу создавать миры и перемещаться без проблем, НО я не могу найти подходящий метод синхронизации для моих рендеров.
Я знаю, что мой код рендеринга и предварительного рендеринга работает быстро, потому что, если я не добавлю никаких проверок delay () s или (clock () - renderBegin) / CLK_TCK из time.h, рендеринг будет невероятно быстрым.
Я не хочу использовать delay (), потому что это связано с моей платформой знаний и, кроме того, я не могу запускать какой-либо код, пока он задерживается (например, пользовательский ввод и обработка). Поэтому я решил сделать что-то вроде этого:
do {
if(kbhit()) {
input = getch();
processInput(input);
}
if(clock()/CLOCKS_PER_SEC-renderTimer/CLOCKS_PER_SEC > RenderInterval) {
renderTimer = clock();
render();
ballLogic();
}
}while(input != 'p');
Что должно в "теории" работать нормально. Проблема в том, что когда я запускаю этот код (устанавливая RenderInterval в 0.0333 или 30 кадров в секунду), я не получаю НИКОГДА близко к 30 кадрам в секунду, я получаю больше как 18 при макс.
Я подумал, что, возможно, я попытаюсь установить RenderInterval в 0.0, чтобы увидеть, повысилась ли производительность ... это не так. Я получал (с RenderInterval 0,0) максимальную скорость ~ 18-20 кадров в секунду.
Хотя, может быть, так как я постоянно вызываю все эти методы clock () и "делю это на то", я замедлял процессор до чего-то пугающего, но когда я взял вызовы render и ballLogic из скобок оператора if и установив RenderInterval в 0.0, я снова получаю невероятно быстрые рендеры.
Это не имеет смысла для меня, так как, если я оставлю регистрацию if, разве она не будет работать так же медленно? Я имею в виду, что он все еще должен делать все расчеты
Кстати, я собираю с Turland C ++ V1.01 Borland