2016-10-19 2 views
2

Я немного новичок в C++ и интересно, как я могу сделать этот код 60 раз в секунду:сделать код 60 раз в секунду C++

if (x >= 500 && y >= 500) 
{ 
    x = 1; 
    y = 1; 
} 

if (x <= 500) 
{ 
    x = x + 1; 
} 

else 
{ 
    y = y + 1; 
    x = 1; 
} 

gfx.PutPixel(x, y, R, 0, 255); 

Я знаю, что это довольно любительский код, но это Я хочу начать изучать его. Я уже пробовал делать цикл while, но в конце концов он довольно замораживался или останавливался. Цель этого кода В основном создается экран с пикселями, меняющими цвет на +1 каждый раз, когда он петли.

Есть ли более простой способ сделать это? Хотелось бы также добавить некоторые улучшения.

+0

вам нужно 'thrd_sleep' и измерения времени. Или SDL-подобную структуру с функциями таймера. –

+0

u может добавить спать 16 миллисекунд между каждой итерацией цикла. Я бы включил и использовал usleep (microseconds); – sramij

+0

@sramij Это немного пошло бы на неточность 16 мс (так как фактическое значение 16.666 ...), но код, выполняющийся до сна, займет немного времени, а это почти всегда будет неправильное количество времени. –

ответ

0

Первое, что нужно сделать, это обернуть это в петлю while(true) {...}.

Далее, чтобы душить его до 60 раз в секунду, вы могли бы сделать что-то вроде этого в конце цикла:

while(true) 
{ 
    // Place all your code here 

    std::this_thread::sleep_for (std::chrono::milliseconds(16)); // Sleep 16 ms 
} 
+4

Это не отрегулированное ожидание. Вы спали не менее 16 мс, поэтому вы дрейфовали. И код OP также не является мгновенным. –

+1

Вы на 100% верны, это всего лишь общий способ сделать это. Если вы действительно хотите ровно 60 кадров в секунду, вам нужно будет время для кода и учетной записи. – GEEF

+0

больше нравится. Но регулирование по-прежнему остается важным фактором. С вашими знаниями о C++ std lib вы можете сделать лучше (я не сторонник downvoter BTW). Например, используя 'std :: clock()', возможно, из другого ответа, который получил downvoted, а затем удалили ... –

Смежные вопросы