Lập trình trò chơi: phương pháp phổ biến và mẫu thiết kế [đóng]


9

Tôi đã bắt đầu viết một công cụ trò chơi rất đơn giản để tôi có thể học OpenGL 3.x tốt hơn nhưng vì sự thiếu kinh nghiệm và kiến ​​thức thưa thớt của tôi về cách thiết kế một trò chơi 3D, tôi thường gặp vấn đề khi nhận ra rằng tôi nên thiết kế các lớp học của mình khác nhau Các vấn đề khác tôi gặp phải là làm thế nào để theo dõi thời gian một cách ngắn gọn trong trò chơi và cập nhật chuyển động khi cần thiết và làm thế nào để nói với trình kết xuất rằng nó cần vẽ lại. Ngoài ra, tôi tiếp tục cần thực hiện các chức năng Nhận và Đặt để chuyển các cờ khác nhau từ đối tượng này sang đối tượng khác, đó có phải là một thực tiễn xấu?

Vì vậy, như tiêu đề đã nói, tôi quan tâm đến bất kỳ cuốn sách hoặc bài viết / hướng dẫn và nguồn nào có thể giúp tôi giải thích và sẽ giải thích một số mẫu thiết kế phổ biến trong thiết kế trò chơi (ví dụ: trình xử lý trạng thái trò chơi, phông chữ, v.v.).

Btw, tôi vẫn đang sử dụng freeglut, bạn có khuyên tôi nên chuyển sang một hệ thống cửa sổ tốt hơn trước khi tiến triển hoặc sau khi tôi hiểu rõ hơn về OpenGL không?


12
Phản hồi "Tôi đang viết một động cơ" tiêu chuẩn = Viết trò chơi, không phải động cơ. Động cơ là một lỗ thỏ sâu để rơi vào. Những nghiên cứu bạn đã làm cho đến nay? Tại đây bạn sẽ nhận được kết quả tốt nhất bằng cách chọn một vấn đề duy nhất, tập trung và tìm kiếm các câu hỏi trong quá khứ. Tiếp tục tìm kiếm các vấn đề mới khi chúng xuất hiện trong khi viết trò chơi của bạn, từng vấn đề một. Một lưu ý phụ, nhận ra rằng các lớp cần thiết kế lại là phổ biến và quá trình thực hiện được gọi là "tái cấu trúc", điều đó có nghĩa là bạn đang học khi bạn đi và đó là một điều tốt.
Patrick Hughes

1
Cám ơn phản hồi của bạn. Xin lỗi nếu tôi không rõ ràng, tôi không thực sự muốn xây dựng một công cụ trò chơi đầy đủ nhưng tôi muốn tìm hiểu một số mẫu thiết kế cơ bản được sử dụng trong thiết kế trò chơi để tôi thiết kế các lớp học tốt hơn. Tôi đoán nên có một số giải pháp phổ biến cho các vấn đề phổ biến. Càng đi sâu vào thiết kế, càng có nhiều vấn đề phát sinh và càng khó tìm câu trả lời. Nghiên cứu của tôi cho đến nay vẫn chưa có kết quả, một hướng dẫn hay mà tôi đã tìm hiểu sâu hơn về các tác phẩm của trò chơi là codeproject.com/Articles/27219/ .
Grieverlove

1
Tôi thấy, việc đưa "phương pháp chung cho công cụ trò chơi" vào tiêu đề có xu hướng điều khiển cuộc thảo luận về ... công cụ =) Trong mọi trường hợp, lý do bạn cảm thấy khó khăn để có được thứ bạn đang tìm kiếm là có rất nhiều các loại trò chơi khác nhau như có nhiều năm trong lịch của người Maya và mỗi loại có nhu cầu riêng. Bạn có thể có kết quả tốt hơn nếu bạn tìm kiếm một loại trò chơi cụ thể, game bắn súng góc nhìn người thứ nhất rất phổ biến, để cung cấp cho các công cụ tìm kiếm một số lực kéo.
Patrick Hughes

Phong cách FPS hoặc chuyển vùng miễn phí sẽ là những gì tôi đang tìm kiếm. Thực chất tôi muốn tạo ra một thế giới nơi tôi có thể thử nghiệm nhiều kỹ thuật đồ họa và hoạt hình khác nhau. Tôi đã có một máy ảnh cơ bản và chuyển động như nhảy và oanh tạc và tải mô hình nhưng nó không hoàn toàn đúng, ví dụ: tôi đặt hoạt hình đi bộ bên trong lớp máy ảnh và tôi sử dụng một biến nội bộ để đếm khung hình. Tôi chủ yếu là vá các lỗ hổng và không tạo ra bất cứ điều gì mạnh mẽ. Tôi đoán đó là một phần của quá trình học tập và có lẽ tôi đang cố gắng di chuyển quá nhanh.
Grieverlove

3
Hoàn thành mã hóa trò chơi, kiến ​​trúc công cụ trò chơi là hai cuốn sách về trò chơi mã hóa, bạn sẽ có cái nhìn tổng quan về đường ống phát triển và công nghệ cơ bản, chúng chạm vào một chút của mọi thứ
dreta

Câu trả lời:


11

Tôi sẽ viết một câu trả lời thích hợp vì tôi đã ở giai đoạn của bạn khoảng 2 tháng trước.

Tôi đã bắt đầu viết một công cụ trò chơi rất đơn giản để tôi có thể học OpenGL 3.x tốt hơn nhưng vì sự thiếu kinh nghiệm và kiến ​​thức thưa thớt của tôi về cách thiết kế một trò chơi 3D, tôi thường gặp vấn đề khi nhận ra rằng tôi nên thiết kế các lớp học của mình khác nhau

Đừng lo lắng về nó. Với sự thiếu kinh nghiệm của bạn, bạn sẽ không bao giờ có thể nghĩ về tất cả các khả năng và cách thức mà một lớp nhất định sẽ được sử dụng trong công cụ của bạn. Tốt nhất là bạn xem xét các tính năng chính của lớp, thực hiện nó và tái cấu trúc sau. Đừng cố gắng lật đổ mọi thứ, bạn sẽ lãng phí thời gian của mình ở giai đoạn này. Trò chơi đầu tiên của tôi là một mớ hỗn độn, tôi chắc chắn đó là trường hợp của hầu hết mọi người.

Các vấn đề khác tôi gặp phải là làm thế nào để theo dõi thời gian một cách ngắn gọn trong trò chơi và cập nhật chuyển động khi cần thiết và làm thế nào để nói với trình kết xuất rằng nó cần vẽ lại.

Những gì bạn cần là kiến ​​thức về vòng lặp trò chơi là gì. Đây là một nơi tốt để bắt đầu. Khi bạn bắt đầu viết mã phức tạp hơn như xử lý vật lý thì bạn có thể muốn xem xét các vòng lặp với thời gian khung thay đổi, nhưng bắt đầu nhỏ. Một vòng lặp trò chơi khung cố định đơn giản sẽ đủ cho bạn bây giờ.

Ngoài ra, tôi tiếp tục cần thực hiện các chức năng Nhận và Đặt để chuyển các cờ khác nhau từ đối tượng này sang đối tượng khác, đó có phải là một thực tiễn xấu?

Đây là nhiều hơn một câu hỏi kỹ thuật phần mềm. Theo thời gian, bạn sẽ thấy dữ liệu nào bạn cần bảo vệ và dữ liệu nào an toàn. Có lẽ tốt nhất nếu bạn chỉ thực hiện một tính năng và sau đó xem những gì không được hiển thị bên ngoài tính năng đó và có thể được coi là dữ liệu công khai.

Tất cả chỉ là vấn đề kinh nghiệm. Bạn sẽ viết một lớp máy ảnh, sau đó bạn sẽ thấy chức năng nào bạn muốn từ nó bên cạnh các ma trận biến đổi. Nếu bạn muốn bất kỳ lời khuyên ngay lập tức, tôi phải nói, thực hiện xương trần, mở rộng sau.

Bài viết và sách:

  • Phát triển công cụ trò chơi

Những cuốn sách này nói về kiến ​​trúc của các công cụ và đường ống trò chơi hiện đại. Họ sẽ cung cấp cho bạn một cái nhìn tổng quan tốt về công nghệ cơ bản. Tôi khuyên bạn nên chọn cuốn sách đầu tiên nếu bạn phải chọn, nó ít "thiên vị" đối với một số công nghệ nhất định, mặc dù cuối cùng bạn có thể muốn vượt qua cả hai vì chúng là nguồn kiến ​​thức tuyệt vời.

http://www.amazon.com/Game-Engine-Arch architecture-Jason-Gregory / dp / 1568814135

http://www.amazon.com/Game-Coding-Complete-Third-Edition/dp/1584506806

  • OpenGL

http://ogldev.atspace.co.uk/index.html

http: //www.arcsynt tổng hợp.org / gltut / index.html

http://www.opengl.org/sdk/docs/man3/

  • GLSL

http://www.lighthouse3d.com/tutorials/glsl-core-tutorial/glsl-core-tutorial-index/

http://www.opengl.org/sdk/docs/manglsl/

  • Phát hiện va chạm

http://www.peroxide.dk/ con/collision/collision.pdf

(Tôi đang liên kết điều này vì tôi thấy khó tìm thấy các bài viết về cách phát hiện va chạm 3D đúng cách.)

Có nhiều sách hơn, nhưng vào thời điểm bạn hoàn thành việc này (đặc biệt là Kiến trúc công cụ trò chơi), bạn sẽ biết rõ hơn những gì bạn muốn.

Btw, tôi vẫn đang sử dụng freeglut, bạn có khuyên tôi nên chuyển sang một hệ thống cửa sổ tốt hơn trước khi tiến triển hoặc sau khi tôi hiểu rõ hơn về OpenGL không?

WinAPI, nếu bạn cảm thấy rằng bạn có thời gian và sẽ học lập trình Windows (nếu bạn đang phát triển cho Windows). FreeGLUT tốt cho việc học, nhưng cuối cùng bạn sẽ muốn nhiều chức năng hơn. Mặc dù vậy, nếu bạn muốn đi theo con đường hoàn toàn khác, bạn có thể khởi chạy OpenGL với các thư viện như SFML hoặc SDL. Hãy gắn bó với FreeGLUT, trừ khi bạn bướng bỉnh như tôi. Tôi đã đi thẳng cho WinAPI.


Này dreta, cảm ơn rất nhiều vì câu trả lời rất hay của bạn Tôi đã chờ đợi nó: P! May mắn thay, tôi đã biết cách phát hiện va chạm vì tôi đã thực hiện một số thuật toán cho mô phỏng vật lý :).
Grieverlove

@ user1294203 tuyệt vời, tôi đã bị mất khi bắt đầu, vì vậy chỉ cần đăng nó trong trường hợp
dreta

Tôi bỏ phiếu cho SFML, nếu bạn không muốn gây rối quá nhiều với mã cụ thể của nền tảng. Nó nhỏ, dễ dàng, sạch sẽ và bạn có thể dễ dàng đi sâu vào mã để hiểu cách nó bao bọc WINAPI chẳng hạn.
edin-m
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.