Так, це можливо зробити в одну нитку. Взагалі кажучи, ви хочете оновлювати об'єкти в кожному кадрі, а не тільки, коли є запасні цикли. Ваша анімація та рух будуть від'єднані від частоти кадрів, і якщо ви цього не зробите, вони будуть досить вибагливими. Якщо ви більше розповідаєте про оновлення AI або щось інше, що не потрібно в режимі реального часу, я поставив би його таймер. Ви повинні знати, яка ваша цільова частота кадрів, і час очікування буде рівним, що залишиться після того, як все інше буде завершено.
Скажімо, ви орієнтуєтесь на 60 FPS для своєї гри. Це дає вам 16,667 мс для виконання всіх робіт, необхідних для виконання кожного кадру. На початку гри отримайте поточний час, використовуючи таймер найвищої роздільної здатності, додавайте до нього 16,667 мс та зберігайте його кудись. Я думаю, що функція в python - це час (), хоча минулий час я працював у мові. Після завершення обробки введіть цикл, який перевіряє поточний час та час, який ви записали. Якщо поточний час менший, ніж час закінчення кадру, update_a_very_small_amount. Я б не хвилювався над тим, що обробка пройде в кінці кадру, оскільки ваше невелике оновлення повинно швидко оброблятися. Це буде лише невелика затримка до початку наступного кадру, і, здається, у вас є достатньо часу в режимі очікування, щоб впоратися з ним.
Після завершення обробки кадру додайте 16,667 мс до часу, який було збережено до кінця останнього кадру, щоб з’ясувати, де має бути кінець наступного кадру. Якщо ви використовуєте поточний час + 16,667 мс, і обробка закінчується, кінець наступного кадру буде витіснений стільки часу, скільки минув останній кадр.
Re: Друга редакція
Для уточнення я використовую тут термін frame-rate для позначення однієї ітерації через основний цикл. Якщо це базується на швидкості введення користувача, я думаю, що ваша мета - просто зробити гру чуйною. В іншому випадку ви можете просто перевірити вхід і оновити все щоразу через цикл, навіть якщо для цього знадобиться 10 секунд. Щоб почувати себе чуйним, ви, ймовірно, захочете перевірити на вхід близько 20 разів на секунду, що дає ефективну частоту кадрів у 20 FPS, навіть якщо ви фактично не малюєте ці кадри. Це дасть вам 50 мс для оновлення речей, перш ніж потрібно ще раз перевірити введення даних.