Tạm dừng trò chơi trong vòng lặp trò chơi


12

Bên trong vòng lặp trò chơi, trò chơi bị tạm dừng bằng cách nhấn P, nghĩa là vòng lặp trò chơi không chạy nữa. Vấn đề là sau khi vòng lặp này bị dừng, P không thể được nhấn lại để tiếp tục vòng lặp, vì nó nằm trong chính vòng lặp đó. Làm thế nào để làm cho nó để khi nhấn P lần nữa, nó làm cho vòng lặp hoạt động trở lại?

Câu trả lời:


20

Đừng thực sự dừng vòng lặp trò chơi khi tạm dừng trò chơi. Thay vào đó, bạn phải thêm biến bool, được thay đổi thành true / false tùy thuộc vào việc trò chơi có bị tạm dừng hay không. Nếu trò chơi bị tạm dừng, bạn chỉ phải dừng cập nhật trò chơi, nhưng bạn vẫn có thể tiếp tục hiển thị khung hiện tại bao gồm cả cập nhật từ đầu vào.

if(gameIsPaused == false)
{
    // run updates
}
checkInput();
render();

Bạn có thể muốn có một checkInputchức năng khác cho chế độ tạm dừng và chế độ không tạm dừng, bởi vì có thể có một số điều khiển chỉ khả dụng ở chế độ này hoặc chế độ khác. Các checkInputchức năng cho chế độ tạm dừng có thể làm gì khác hơn là tìm kiếm nếu Pđược nhấn và sau đó thiết lập gameIsPaused = false, nhưng một số trò chơi cũng đặt thêm chức năng trên màn hình tạm dừng (trong những năm 90 nó đã được phổ biến để có màn hình tạm dừng như là đầu vào ẩn cho các mã cheat, hiện đại trò chơi muốn kết hợp nó với một màn hình menu).
Philipp

1
Mặc dù nói chung tôi đồng ý với câu trả lời của bạn, tôi nghĩ nên nói rõ rằng đôi khi việc chạy một số cập nhật trong trạng thái tạm dừng là hoàn toàn hợp lệ . Ví dụ, hoạt hình các mục menu hoặc có thể một số quản lý âm thanh. Ý tưởng lớn là điều kiện tạm dừng cho phép bạn phân nhánh thành một tập hợp checkInput/ render/ updatecuộc gọi khác.
Nicholas Miller

Điều duy nhất tạm dừng trò chơi nên thay đổi là bit "thế giới cập nhật" nên được bỏ qua. Tất cả các chức năng khác có lẽ nên giữ như bình thường.
Vịt Mooing

4
Tôi đã cố gắng giữ câu trả lời đơn giản nhất có thể, bởi vì đây là công cụ rất cơ bản trong lập trình trò chơi và tôi sẽ không nhầm lẫn với người hỏi.
Katu

1
@ user3730788: Một nhánh thực thi một lần trên mỗi vòng lặp trò chơi (tức là dưới 100 lần mỗi giây) sẽ không có tác động hiệu suất rõ rệt, ngay cả khi nó bị dự đoán sai mỗi lần .
Ilmari Karonen

1

Làm cho nó để nhấn P chuyển sang một vòng lặp khác xử lý trạng thái trò chơi "Tạm dừng" và cho phép chuyển trở lại vòng lặp trò chơi ban đầu bằng cách nhấn lại P.

Bạn thực sự có thể đặt tất cả vào vòng lặp trò chơi và giới thiệu một biến trạng thái, nếu bạn muốn và thay vì tắt vòng lặp, biến trạng thái chuyển đổi giữa việc thực thi mã cụ thể trạng thái tương ứng trong vòng lặp.

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.