Vâng, nó có thể làm trong một chủ đề duy nhất. Nói chung, mặc dù, bạn sẽ muốn cập nhật các đối tượng mỗi khung hình chứ không chỉ khi có chu kỳ dự phòng. Hoạt hình và chuyển động của bạn sẽ bị ngắt kết nối với tốc độ khung hình và trông khá rối nếu bạn không. Nếu bạn đang nói nhiều hơn về các bản cập nhật AI hoặc thứ gì đó không cần phải là thời gian thực, tôi sẽ đặt đồng hồ bấm giờ trên đó. Bạn nên biết tốc độ khung hình mục tiêu của bạn là bao nhiêu và thời gian nhàn rỗi sẽ là bất cứ điều gì còn lại sau khi mọi thứ khác đã hoàn thành.
Giả sử bạn đang nhắm mục tiêu 60 FPS cho trò chơi của bạn. Điều đó khiến bạn mất 16,667 ms để thực hiện tất cả các công việc bạn cần thực hiện mỗi khung. Khi bắt đầu trò chơi, hãy lấy thời gian hiện tại bằng cách sử dụng bộ đếm thời gian có độ phân giải cao nhất có sẵn, thêm 16,667 ms vào nó và lưu trữ ở đâu đó. Tôi nghĩ rằng hàm trong python là time () mặc dù đã được một thời gian kể từ khi tôi làm việc trong ngôn ngữ. Sau khi quá trình xử lý của bạn hoàn tất, hãy nhập một vòng lặp kiểm tra thời gian hiện tại so với thời gian bạn đã ghi. Nếu thời gian hiện tại nhỏ hơn thời gian kết thúc khung, update_a_very_small_amount. Tôi sẽ không lo lắng nhiều về việc xử lý đi qua phần cuối của khung vì bản cập nhật nhỏ của bạn sẽ nhanh chóng được xử lý. Nó sẽ chỉ là một chút chậm trễ khi bắt đầu khung hình tiếp theo và bạn dường như có đủ thời gian nhàn rỗi để xử lý nó.
Sau khi khung đã xử lý xong, hãy thêm 16,667 ms vào thời gian được lưu trữ cho đến cuối khung cuối cùng để tìm ra nơi kết thúc của khung tiếp theo. Nếu bạn sử dụng thời gian hiện tại + 16,667 ms và quá trình xử lý kết thúc, phần cuối của khung tiếp theo sẽ bị đẩy ra ngoài tuy nhiên nhiều thời gian khung cuối cùng đã chạy qua.
Re: Chỉnh sửa lần thứ hai
Để làm rõ, tôi sử dụng thuật ngữ tốc độ khung hình ở đây để chỉ ra một lần lặp thông qua vòng lặp chính. Nếu nó dựa trên tốc độ đầu vào của người dùng, tôi tưởng tượng rằng mục tiêu của bạn chỉ đơn giản là làm cho trò chơi cảm thấy nhạy bén. Nếu không, bạn chỉ có thể kiểm tra đầu vào và cập nhật mọi thứ mỗi lần qua vòng lặp ngay cả khi phải mất 10 giây để làm như vậy. Để làm cho nó cảm thấy nhạy hơn, có lẽ bạn sẽ muốn kiểm tra đầu vào khoảng 20 lần mỗi giây, cho tốc độ khung hình hiệu quả là 20 FPS, ngay cả khi bạn không thực sự vẽ những khung hình này. Điều này sẽ cung cấp cho bạn 50 ms để cập nhật mọi thứ trước khi bạn cần kiểm tra lại đầu vào.