Bạn thường không sử dụng bộ tính giờ thông thường trong trò chơi. Trò chơi có một cơ chế rất khác nhau để xử lý logic của chúng và thời gian trôi qua, chúng thường không hoạt động với bộ hẹn giờ hoặc không theo cách bạn mong đợi:
Trò chơi thường có thứ gọi là vòng lặp trò chơi. Nói chung đó là ba chức năng chính được gọi là một sau khi khác trong một vòng lặp:
while(running)
{
HandleUserInput();
ChangeWorld();
Render();
}
Bạn nhận được đầu vào người sử dụng, bạn thay đổi các trò chơi thế giới cho phù hợp và bạn vẽ nó lên màn ảnh. Bây giờ, máy tính của bạn nhanh hơn, vòng lặp này chạy nhanh hơn. Đó là tốt cho đồ họa (nghĩ FPS), nhưng xấu cho trò chơi. Hãy tưởng tượng Tetris nơi mọi khung hình di chuyển. Bây giờ tôi sẽ không muốn mua một chiếc máy tính nhanh hơn, trò chơi sẽ trở nên khó khăn hơn theo cách đó.
Vì vậy, để giữ cho tốc độ trò chơi độc lập liên tục về sức mạnh của máy tính, vòng xem xét thời gian trôi qua:
while(running)
{
var timePassedSinceLastLoop = CalculateTimeDelta();
HandleUserInput();
ChangeWorld(timePassedSinceLastLoop);
Render();
}
Bây giờ hãy tưởng tượng một cooldown cho một cái gì đó trong game. Người chơi nhấn "a", một số hành động thú vị đã xảy ra và mặc dù anh ta có thể nhấn "a" một lần nữa, sẽ không có gì xảy ra trong 5 giây tiếp theo. Nhưng trò chơi vẫn chạy và làm tất cả những thứ khác có thể xảy ra trong game. Đây không phải là một bộ đếm thời gian thông thường. Đó là một biến, cho phép gọi nó là ActionCooldown và sau khi người chơi kích hoạt hành động, nó được đặt thành 5 giây. Mỗi khi thế giới thay đổi, timePassed được trừ từ con số đó cho đến khi nó bằng không. Tất cả thời gian, trò chơi đang chạy và xử lý đầu vào và hiển thị. Nhưng chỉ một khi ActionCooldown chạm 0, một lần nhấn "a" sẽ kích hoạt lại hành động đó.
Phương pháp ChangeWorld bao gồm tất cả các thay đổi tự động cho thế giới.Kẻ thù, tên lửa, bất cứ thứ gì di chuyển mà không có sự tương tác của người chơi. Và nó di chuyển dựa trên thời gian. Nếu kẻ thù di chuyển một hình vuông mỗi giây, bạn cần phải làm cho phối hợp của mình là một phao và thêm một phần của một hình vuông mỗi khi vòng lặp được chạy.
Giả sử bạn có 30 khung hình/giây nên vòng lặp của bạn chạy 30 lần mỗi giây. Kẻ thù của bạn bây giờ cần phải di chuyển 1/30 của một hình vuông mỗi vòng lặp. Sau đó, nó sẽ cuối cùng đã di chuyển một hình vuông đầy đủ mỗi giây.
Với trò chơi trên bàn điều khiển, bạn có nghĩa là một ứng dụng đang chạy trên bảng điều khiển trò chơi điện tử hoặc ứng dụng bảng điều khiển thực tế không? (nhắc lệnh vv) –
ứng dụng giao diện điều khiển. – Luis