2009-05-07 43 views
9

ở mức độ nào là hiện đại, C++ tính năng như:Modern C++ Game Programming Ví dụ

  1. đa hình,
  2. STL,
  3. ngoại lệ an toàn/xử lý,
  4. mẫu với thiết kế lớp dựa trên chính sách,
  5. con trỏ thông minh
  6. mới/xóa, vị trí mới/xóa

được sử dụng trong các studio trò chơi? Tôi sẽ được quan tâm để biết tên của thư viện và các tính năng C++ họ sử dụng. Ví dụ, Orge3D sử dụng tất cả các tính năng C++ hiện đại bao gồm các ngoại lệ và các con trỏ thông minh. Nói cách khác, nếu tôi sẽ tìm kiếm một ví dụ cho một thư viện trò chơi bằng cách sử dụng C++ hiện đại, tôi sẽ đi đến Orge3D. Nhưng tôi không biết liệu các tính năng này có ngăn chặn các studio trò chơi sử dụng Orge3D hay không.

Hơn nữa tôi không biết nếu có các ví dụ khác. Ví dụ, tôi đã sử dụng Box2D một thời gian trước một thời gian ngắn, nhưng nó chỉ sử dụng vị trí mới, và từ khóa lớp như các tính năng của C++. Ngay cả việc đóng gói cũng bị phá vỡ trong các lớp này vì tất cả các thành viên đều công khai.

Lý tưởng nhất, nếu các tính năng C++ sẽ là đối sánh tốt nhất cho tất cả các trường hợp, chúng sẽ được sử dụng thường xuyên nhất. Nhưng có vẻ như không. Trở kháng là gì? Điều hiển nhiên là phải đọc đống sách, nhưng đó chỉ là một nửa lý do. Câu hỏi này là theo dõi trên "C++ for Game Programming - Love or Distrust?" (Từ các câu trả lời ở đó tôi có ấn tượng rằng nhiều tính năng C++ vẫn không được sử dụng trong trò chơi; không nhất thiết phải là cách nó nên).

+0

Câu hỏi liên quan là ví dụ về thư viện bằng cách sử dụng C++ hiện đại: stackoverflow.com/questions/534311/…. Ngoài các ví dụ thông thường của Boost và Loki, cuộc thảo luận đề cập đến các thư viện Google Chrome, OpenOffice và Adobe. Xem thêm http://www.boost.org/users/uses_open.html để sử dụng tăng cường. –

+0

Googling Tôi đã tìm thấy http://www.deitel.com/ResourceCenters/Programming/CPlusPlusGameProgramming/tabid/1225/Default.aspx Nó chứa một vài liên kết mà bạn có thể quan tâm. P.S. Bạn có thể muốn tạo wiki cộng đồng câu hỏi này. – lothar

+0

@ lothar Tôi không biết liệu có cách nào để biến nó trở thành một cộng đồng wiki ngay bây giờ không. –

Trả lời

25

Tôi đã làm việc trong 2 công ty trò chơi, nhìn thấy một số mã và quan sát một số cuộc tranh luận về các vấn đề như trong số các nhà phát triển trò chơi, vì vậy tôi có thể đưa ra một số quan sát. Câu trả lời ngắn cho mỗi điểm là nó thay đổi rất cao từ studio đến studio hoặc thậm chí từ nhóm đến nhóm trong cùng một studio. câu trả lời dài được liệt kê dưới đây:

  • đa hình,

Được sử dụng bởi một số hãng phim nhưng không phải người khác. Nhiều đội vẫn muốn tránh nó. Các cuộc gọi chức năng ảo đi kèm với chi phí và chi phí đó đáng chú ý vào các thời điểm ngay cả trên các bảng điều khiển hiện đại. Trong số những người sử dụng đa hình, giả định hoài nghi của tôi là chỉ có một tỷ lệ phần trăm nhỏ sử dụng nó tốt.

  • STL,

Chia phá trung lộ, đối với nhiều người trong những lý do tương tự như đa hình. STL dễ sử dụng không chính xác, vì vậy nhiều hãng phim chọn để tránh nó trên những căn cứ này. Trong số những người sử dụng nó rất nhiều, nhiều người ghép nối nó với các trình phân bổ tùy chỉnh. EA đã tạo ra EASTL, địa chỉ nhiều vấn đề STL gây ra trong phát triển trò chơi.

  • ngoại lệ an toàn/xử lý,

Rất ít hãng sử dụng xử lý ngoại lệ. Một trong những khuyến nghị đầu tiên cho bảng điều khiển hiện đại là tắt cả RTTI và ngoại lệ. Trò chơi PC có thể sử dụng ngoại lệ cho hiệu ứng lớn hơn nhiều, nhưng trong số các trường hợp ngoại lệ của studio điều khiển thì rất thường xuyên bị choáng. Họ tăng kích thước mã, có thể ở mức phí bảo hiểm và theo nghĩa đen không được hỗ trợ trên một số nền tảng có liên quan.

  • mẫu với thiết kế lớp dựa trên chính sách, thiết kế

Policy dựa ... Tôi đã không gặp bất kỳ của nó. Các mẫu được sử dụng khá thường xuyên cho những thứ như nội suy/phản ánh và sử dụng lại mã. Thiết kế dựa trên chính sách, khi tôi đọc cuốn sách của Alexandrescu, có vẻ như một lời hứa không hoàn hảo đối với tôi. Tôi nghi ngờ nó được sử dụng rất nhiều trong ngành công nghiệp game, nhưng nó sẽ thay đổi rất cao từ studio đến studio.

  • con trỏ thông minh

con trỏ thông minh được chấp nhận bởi rất nhiều các hãng phim cũng sử dụng đa hình và STL. Quản lý bộ nhớ trong game console là cực kỳ quan trọng, do đó, rất nhiều người không thích tham khảo đếm con trỏ thông minh bởi vì họ không rõ ràng về khi họ miễn phí ... nhưng đây chắc chắn không phải là loại duy nhất của con trỏ thông minh. Ý tưởng con trỏ thông minh nói chung vẫn đang đạt được lực kéo. Tôi nghĩ nó sẽ phổ biến hơn trong 2-3 năm tới.

  • mới/xóa, vị trí mới/xóa

Chúng được sử dụng thường xuyên. Chúng thường bị ghi đè để sử dụng các trình phân bổ tùy chỉnh bên dưới, để bộ nhớ có thể được theo dõi và rò rỉ có thể được tìm thấy dễ dàng.

Tôi nghĩ rằng tôi đồng ý với kết luận của bạn. C++ không được sử dụng trong các studio trò chơi đến mức có thể.Có những lý do tốt và xấu cho việc này. Những cái tốt là vì những tác động về hiệu suất hay những mối quan tâm về bộ nhớ, những cái xấu là bởi vì mọi người bị mắc kẹt trong một rut. Có rất nhiều cách để làm mọi việc theo cách mà chúng luôn luôn được thực hiện, và nếu điều đó có nghĩa C với C++ giới hạn thì nó có nghĩa là C với C++ giới hạn. Nhưng có một số thành kiến ​​chống C++ nổi xung quanh ... một số hợp lý và một số thì không.

10
  1. Khá rộng rãi, mặc dù mọi người đều quan tâm đến những phí của chức năng ảo gọi
  2. Nó phụ thuộc. Một số nhà phát triển thề nó hoàn toàn, những người khác sử dụng hạn chế các thùng chứa như vectơ sẽ có sự kết hợp bộ nhớ cache tốt và hiệu suất thời gian chạy và sẽ không phân bổ liên tục. Tôi nghĩ rằng một quan sát chung sẽ được rằng nhiều hơn giao diện điều khiển theo định hướng studio ít STL họ sử dụng. Các nhà phát triển PC có thể thoát khỏi nó vì chúng có thể rơi vào hệ thống bộ nhớ ảo và có rất nhiều CPU. Những người điều khiển sẽ quan tâm đến mọi phân bổ và nếu bạn đang làm một tựa game đa nền tảng, bạn sẽ có được một thế giới tuyệt vời của các triển khai STL khác nhau của nền tảng hoạt động khác nhau và có lỗi khác nhau, mặc dù tình trạng này đã được cải thiện trong những năm gần đây. Các nhà phát triển trò chơi cũng muốn quản lý đống và phân bổ riêng của họ và điều này có thể khó giải quyết với STL.
  3. Mong đợi nó bị tắt trong cài đặt trình biên dịch
  4. Haha, tốt nhất.
  5. Tôi không chắc chắn. Tôi đã không thực sự nhìn thấy sử dụng con trỏ thông minh trong mã trò chơi, mặc dù ngoài một sự ác cảm chung cho bộ nhớ động Tôi không nghĩ rằng có bất cứ điều gì đặc biệt phản đối về con trỏ thông minh từ một quan điểm phát triển trò chơi.
  6. Điều này một lần nữa phụ thuộc. PC guys có thể phân bổ và deallocate như họ chỉ không quan tâm. Những người điều khiển quan tâm đến mọi phân bổ. Điều đó không có nghĩa là không có mới và xóa nhưng nó có thể có nghĩa là phân bổ động chỉ được thực hiện một lần khi trò chơi hoặc cấp độ hiện tại được thiết lập và sau đó còn lại cho đến khi trò chơi hoặc cấp hiện tại bị rách. Mỗi khung phân bổ và deallocating là tốt nhất tránh được, không chỉ để giữ tổng số bộ nhớ sử dụng xuống nhưng để tránh phân mảnh. Bạn sẽ thấy rất nhiều mảng có kích thước cố định và cấu trúc được phân bổ tĩnh trong một công cụ trò chơi trên bàn điều khiển.
+0

# 2: STL cho phép bạn kiểm soát hoàn toàn việc quản lý bộ nhớ của bất kỳ vùng chứa nào # 4: Tại sao? –

+0

Liên kết Dan được đăng lên giấy EASTL có mức độ phù hợp tốt về chủ đề này. –

+0

Tôi không hiểu câu trả lời của bạn cho # 4. – Klaim

7
  1. Rất nhiều
  2. Cách nhiều. Nhưng chúng tôi đang cố gắng để hạn chế bản thân để std :: vector lúc chạy.
  3. Không có gì là bao giờ hết.
  4. Cái gì?
  5. Mã của chúng tôi đã bị nhiễm bệnh này. Chúng tôi sẽ bắt đầu whipping người cho lan rộng tai họa tuy nhiên.
  6. Có. Rất nhiều.
+2

Tôi không biết tại sao câu trả lời này đã bị bỏ phiếu. Nó trông giống như một câu trả lời trung thực (có thể không phải là câu trả lời "đúng", nếu bạn thích), và tôi sẽ bình chọn nó. –

+0

Tôi sẽ tự mình nhập ... Đó là một câu trả lời thực tế mô tả trạng thái hiện tại nơi tôi làm việc. Cảm ơn bạn đã bỏ phiếu :) – JJacobsson

-1

Với tất cả sự tôn trọng, 5 trong số 6 điểm bạn đã đề cập là thuật ngữ chuẩn C++. Đó không phải là "lập trình trò chơi" nó sử dụng ngây thơ của các từ buzz. Đề xuất của tôi sẽ là điều này; học toán của bạn ... đặc biệt là trig. Sau đó nhận được một số datasheets và tìm hiểu về nền tảng phần cứng đồ họa hiện đại ... không nhạy cảm feely C# từ bullony .. tìm hiểu lập trình lắp ráp.

Vào cuối ngày, trở thành người lập trình trò chơi, bạn phải có khả năng thực hiện toán học. Đó là số

+1

Đây không phải là câu trả lời hữu ích mà không có chi tiết cụ thể và quá nhiều áp phích của người đăng. – bcr