Một trò chơi máy tính là một vòng lặp vô tận của:
- Cập nhật: Nâng cao trạng thái trò chơi một lát thời gian nhỏ (như 1/80 giây).
- Vẽ trạng thái trò chơi hiện tại.
Có những biến thể của những điều này. Một số trò chơi có nhiều cập nhật hơn giữa mỗi lần sơn hoặc có thể thay đổi chúng để trò chơi trôi chảy như nhau trên các máy khác nhau. Nhưng đó là chi tiết kỹ thuật.
Giai đoạn cập nhật xảy ra trong khoảng từ 50 đến 100 lần mỗi giây (vâng thường xuyên như vậy) thực hiện việc này:
- Cập nhật vật lý trò chơi. Nói rằng một diễn viên có một vận tốc. Bản cập nhật sẽ di chuyển anh ta một chút nhỏ theo đúng hướng. Ngoài ra, nếu bạn sử dụng một động cơ vật lý, nó sẽ kiểm tra sự va chạm với các hành động hoặc chướng ngại vật khác.
- Cập nhật các quy tắc trò chơi. Đây là những gì làm cho nó một trò chơi và không phải là một thí nghiệm vật lý. Nói rằng một viên đạn trúng diễn viên người chơi. Các quy tắc trò chơi yêu cầu người chơi trừ X điểm máu và viên đạn để biến mất.
- Cập nhật AI. Đôi khi các diễn viên điều khiển máy tính nên bỏ qua những việc cần làm. Đi sang trái hay phải? Tìm một con đường đến một nơi tốt đẹp để được. Bắn vũ khí.
- Điều khiển đầu vào. Cập nhật diễn viên người chơi theo các nút bấm trên bàn phím.
- Cập nhật biểu đồ cảnh. Điều này có thể tiến một bước hoạt hình hoặc cập nhật GUI để cho thấy rằng trình phát bây giờ có ít hơn 10 điểm. Mục đích duy nhất của nó là làm cho trò chơi trông đẹp mắt hơn.
Bạn bắt đầu từ đâu
Yêu cầu cơ bản cho một trò chơi đồ họa là lập trình đồ họa. Hãy chắc chắn rằng bạn có thể mở một cửa sổ và vẽ một quả bóng trong đó.
Tôi giả sử bạn có thể thực hiện một số loại lớp học. Tạo một lớp bóng. Nó có các thành viên sau: x, y, deltaX, deltaY. Tất cả đều là số nguyên và theo tỷ lệ pixel. Bây giờ, viết vòng lặp này.
forever, do this {
start measure time (in milliseconds)
//physics part
add deltaX to x
add deltaY to y
if x is bigger than the screen width, assign -deltaX to deltaX
if y is bigger than the screen height, assign -deltaY to deltaY
if x is less than 0, assign -deltaX to deltaX
if y is less than 0, assign -deltaY to deltaY
//paint
paint the ball at x, y
stop measuring time, assign this to workTime
make the thread sleep for (25 - workTime) milliseconds
}
Điều này sẽ làm cho bóng nảy của ranh giới cửa sổ. Nó không phải là một trò chơi , mà là một mô phỏng vật lý. Nếu bạn viết cập nhật vật lý bóng bên trong lớp bóng, thật dễ dàng để thêm một vài quả bóng. Lưu trữ chúng trong một danh sách và cập nhật và vẽ từng cái cho mỗi khung.
Bạn có thể thêm một mái chèo (mô phỏng vật lý cho nó và làm cho nó có thể điều khiển bằng chuột hoặc bàn phím) và một mục tiêu trò chơi như ngăn bóng bay đến bức tường bên trái. Nếu trò chơi thêm càng nhiều bóng theo thời gian, độ khó sẽ tăng lên. Bạn có một trò chơi.
Tại sao ngủ trong (25 - workTime) mili giây? Nếu bạn làm như vậy, mô phỏng sẽ chạy với tốc độ tương đương 40 cập nhật và sơn mỗi giây. Nó sẽ khá trơn tru. Nếu bạn bỏ qua phần ngủ, hình ảnh động sẽ bị giật và chiếm 100% CPU. Ngoài ra, tốc độ của quả bóng sẽ phụ thuộc vào tốc độ của máy chạy nó. Bây giờ, tốc độ dọc của quả bóng là 40 * deltaY pixel mỗi giây.