Làm thế nào tôi nên viết một vòng lặp trò chơi chính? [đóng cửa]


130

Làm thế nào tôi nên viết một vòng lặp trò chơi chính? Một số điều bạn nên làm trong vòng lặp trò chơi là gì và một số điều bạn không nên làm trong vòng lặp trò chơi là gì?

Tôi đã viết rất nhiều trong số đó, nhưng tôi chưa bao giờ thực sự đọc về các vòng lặp trò chơi. Tôi chắc chắn rằng tôi có thể cải thiện chúng đáng kể, nhưng tôi không chắc làm thế nào.


4
Câu trả lời ác: Điều gì về việc sử dụng công cụ của ai đó để tạo vòng lặp này cho Bạn? :)
dùng712092

bạn có thể hỏi người dùng tổng số khung hình anh ta muốn chạy và sử dụng vòng lặp for gấp n lần số lượng bộ đệm.
Uur Gümüşhan

Câu trả lời:


121

Vòng lặp trò chơi chính xử lý ba nhiệm vụ chính:

  1. Nhận đầu vào của người dùng
  2. Cập nhật trạng thái trò chơi
  3. Vẽ trò chơi

Một vòng lặp trò chơi đơn giản chỉ kết hợp ba nhiệm vụ này thành một vòng lặp while. Điều này có một số kết quả không mong muốn:

  1. Trò chơi chạy ở tốc độ khác nhau trên các máy tính khác nhau.
  2. CPU (có thể là không cần thiết) được chốt ở mức sử dụng 100%.
  3. "Trạng thái trò chơi" / menu bị thiếu hoặc trộn với mã trò chơi.
  4. Vòng lặp trò chơi chính là rất dài và khó để duy trì.
  5. Mã rất khó để mở rộng / cổng sang các nền tảng khác.

Vòng lặp trò chơi nâng cao giải quyết các vấn đề được liệt kê ở trên. Dưới đây là một số bài viết hữu ích:

Đối với một vòng lặp trò chơi ví dụ tuyệt vời, hãy xem trò chơi demo trượt ván Allegro:

Các vòng lặp trò chơi thường làm cùng một loại công việc cho hầu hết các trò chơi, vì vậy tôi đã nghĩ ra một cách để tạo ra một khung trò chơi tổng quát. Nó là tốt hơn để viết một thực hiện của một vòng lặp trò chơi và chia sẻ nó giữa các trò chơi. Nó tiết kiệm công việc khi tạo một trò chơi mới và các cải tiến cho vòng lặp trò chơi được chia sẻ có thể được chia sẻ bởi tất cả các trò chơi (ví dụ: thêm bộ đếm FPS hoặc tính năng chụp màn hình).


1
Đúng, như nghi ngờ, tôi chắc chắn có thể cải thiện. Đọc tốt Ngoài ra, cảm ơn vì đã đăng mã. Thật tuyệt khi thấy mã trò chơi thực tế với công cụ này.
hokiecsgrad

1
CPU nên bị kẹt ở mức sử dụng 100% (hoặc hơn 50% nếu bạn có ít nhất 2 lõi). Hãy suy nghĩ về nó. Làm thế nào bạn sẽ có được vật lý cạnh chảy máu, đồ họa sát thủ, nếu bạn ngồi đó tự nói với mình "Ồ, nhưng tôi không muốn sử dụng tất cả CPU." Có, bạn nên sử dụng 100% CPU nếu có thể (điều đó có nghĩa là đa luồng trên các máy tính ngày nay, vì vậy rất khó để thực sự sử dụng 100% 4 lõi mọi lúc). Tận dụng tối đa máy bạn đang chạy mà bạn có thể.
bobobobo

5
Cho phép tôi chắp thêm: Đối với các chương trình máy tính để bàn . Trên một thiết bị di động, bạn sẽ đốt cháy nhiều pin hơn, vì vậy bạn sẽ lo lắng về việc sử dụng 100%.
bobobobo

1
@ user6003859: Tôi đã sửa liên kết.
Leftium

1
một liên kết hữu ích khác: gameprogrammingpotypes.com/game-loop.html
brita_

51

Tôi muốn giới thiệu bài viết của Glenn Fiedler về sự độc lập mạnh mẽ của khung hình, " Khắc phục dấu thời gian của bạn! "

(Ít liên quan đến chủ đề trong tay, nhưng các bài viết khác trong loạt bài cũng khá hay - như mọi thứ trên trang web của anh ấy!)


Đó chắc chắn là một số bài viết thực sự tốt. Cảm ơn vì đăng!
hokiecsgrad

1
Tôi thứ hai khuyến nghị để có một triển khai độc lập tốc độ khung hình mạnh mẽ. Mọi thứ trong trò chơi của bạn nên được triển khai dưới dạng giá trị delta mà bạn định kỳ cập nhật. Và điều đó không nhất thiết phải được thực hiện đồng thời bạn tiến tới khung tiếp theo. Trong thực tế, nếu bạn đã bỏ qua một khung, có lẽ bạn thực sự không muốn gọi phương thức cập nhật của mình bằng một delta delta. Sẽ phù hợp hơn khi gọi cập nhật của bạn hai lần với cùng một delta. Chắc chắn dành thời gian để tìm hiểu các vấn đề với tốc độ khung hình và chu kỳ cập nhật của bạn. Nó sẽ giúp bạn tiết kiệm thời gian sau này.
Dennis Munsie

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.