Bắt đầu với 2d Game Dev (C ++): DirectX hoặc OpenGL? [đóng cửa]


12

Vì vậy, tôi là một sinh viên đang tìm cách bước chân vào phát triển trò chơi và tôi đang tìm cách làm một cái gì đó 2D, có thể là một kẻ xâm lược không gian tetris / không gian / một cái gì đó với một bản sao tương tác chuột nhỏ.

Tôi đã chỉ các tìm kiếm của mình theo hướng C ++ và 2d và cuối cùng đã dẫn đến DirectX / OpenGL

Bây giờ theo tôi hiểu, tất cả các gói này sẽ làm cho tôi là vẽ những thứ trên màn hình. Và đó là tất cả những gì tôi thực sự quan tâm ở điểm này. Âm thanh không cần thiết. Đầu vào có thể được xử lý với stdlib có thể.

Vì vậy, đối với người mới bắt đầu thử tạo một trò chơi cơ bản trong C ++, bạn sẽ đề xuất DirectX hoặc OpenGL? Tại sao? Một số khác biệt tính năng chính giữa hai là gì? Cái nào có thể sử dụng hơn?

Câu trả lời:


16

Tôi muốn giới thiệu SDL ( http://www.libsdl.org/ ) cho 2D, đó là nơi lần đầu tiên tôi bắt đầu với công cụ đồ họa và nó khá dễ sử dụng, mặc dù lúc đó tôi hầu như không biết C ++.

Đây (gương) là tập hợp các bài hướng dẫn mà tôi bắt đầu với và thấy rất hữu ích (họ một chút ngày thậm chí ~ 4 năm trước, khi tôi làm việc qua chúng, nhưng tôi không nghĩ rằng SDL đã thay đổi nhiều và họ vẫn cần có liên quan ).

SDL cũng xử lý đầu vào và SDL_Mixer có thể thực hiện âm thanh cơ bản.

Tôi chưa bao giờ làm việc với DirectDraw hoặc OpenGL cho các công cụ 2D, vì vậy tôi không thể nhận xét ở đó, nhưng tôi chắc chắn có thể đề xuất SDL.


1
Tôi thấy SDL tốt nhưng rất khó để có đường dẫn và bao gồm thiết lập đúng.
Skeith

1
Ngoài ra, hãy kiểm tra lazyfoo.net/SDL_tutorials để biết một số hướng dẫn phù hợp (bao gồm hướng dẫn thiết lập cho các IDE khác nhau).
BeanBag

Đồng ý với @Skeith. Tôi không thể tưởng tượng được những vấn đề đau đầu khi thiết lập SDL lần đầu tiên cho người mới bắt đầu. Rất khó để xử lý một số vấn đề thiết lập phổ biến với người nghiệp dư hoặc thậm chí là chuyên gia. Sau khi nhận được thiết lập SDL lần đầu tiên, tôi đã có thể nhận được bất kỳ thiết lập nào cho đến hết đời, một cách dễ dàng. Đó là bao nhiêu đau đầu nó mang lại cho tôi; tôi đã học được bao nhiêu kinh nghiệm hơn là điển hình cho việc thiết lập thư viện. Cách đây quá lâu để nhớ lại chính xác những gì đã cho tôi nhiều vấn đề nhất, hoặc những vấn đề tôi gặp phải, nhưng tất cả các thư viện khác đều dễ cài đặt.
Carter81

7

Tôi đã sử dụng cả SDL và SFML cho các dự án trò chơi của mình. Tôi đã sử dụng SDL cho một trò chơi đã hoàn thành, một trò chơi tetris và tôi chủ yếu sử dụng SFML làm lớp cửa sổ cho các thí nghiệm đổ bóng. Từ kinh nghiệm của tôi, tôi phải nói rằng SDL là những gì nó nói. Đó là một lớp phương tiện trực tiếp đơn giản, trừu tượng hóa dữ liệu mà phương tiện của bạn (âm thanh và video) hoạt động ở mức bạn có thể tương tác với các nền tảng khác nhau. Đó là "tất cả" nó làm.

Do đó, bạn thường phải kết hợp nó với một vài thư viện khác, đáng chú ý nhất là SDL_mixer, SDL_gfx và SDL_image, cung cấp chức năng mà mọi người cần để tạo trò chơi.

Tất cả các thư viện này cũng dành cho ngôn ngữ lập trình C và chúng tuân theo các quy ước của nó. Không có gì sai với điều đó, nhưng nếu bạn muốn một cách tiếp cận hướng đối tượng đến cách bạn tương tác với io, thì về cơ bản bạn phải tự xây dựng lớp đó.

SFML đi kèm với mọi thứ ngay lập tức. Nó có âm thanh, nó có video, nó có sự pha trộn, nó có giới hạn khung hình, và nó được hướng đối tượng. Nếu đó là những gì bạn muốn, tôi khuyên bạn nên làm điều đó. SFML cũng có một lớp trừu tượng cho một số chức năng cơ bản trong opengl (cụ thể là startShape / EndShape và pixel shader). Tôi không nghĩ SDL có bất cứ thứ gì như vậy, chỉ là một phương pháp để hợp nhất với nó.

PS Không loại bỏ cuộc trò chuyện khỏi C / C ++, nhưng nếu bạn không sử dụng ngôn ngữ đó vì bất kỳ lý do cụ thể nào và muốn một cuộc trò chuyện dễ dàng hơn, luôn có pygame. Về cơ bản là SDL + cho Python.


2
SFML cũng là C ++, trong khi SDL là C. Điều này tạo ra sự khác biệt nếu bạn thực sự muốn học C ++.
jsimmons

5

http://www.gamedev.net/community/forums/mod/journal/journal.asp?jn=263140&reply_id=3598844

Tôi đồng ý với những nhận xét này và nghĩ rằng đó là một cuộc thảo luận tuyệt vời về lý do DirectX tốt hơn OpenGL.

Tạp chí đó là để đáp lại David tại Wolfire.

Tôi hy vọng rằng phục vụ để cân bằng nó một chút. ;)

Nhưng nói chung, nếu bạn đang sử dụng khung API chéo, đa nền tảng:

Sử dụng DirectX trên Windows và OpenGL trên * nix.


Tuyệt vời đọc =) Thật là một mỏ khai thác chủ đề này ...
Nailer

6
404, không tìm thấy trang
axel22


Tôi nhận được 404 trên liên kết archive.gamedev.net / ....
Exilyth

4

http://blog.wolfire.com/2010/01/Why-you-should-use-OpenGL-and-not-DirectX

Tôi đồng ý với những nhận xét này và nghĩ rằng đó là một cuộc thảo luận tuyệt vời về lý do tại sao OpenGL tốt hơn DirectX.

Tuy nhiên, câu hỏi này hoàn toàn là vấn đề quan điểm và DirectX hoàn toàn có lợi ích của nó so với OpenGL, đặc biệt là 10 và 11 và đặc biệt là trong bối cảnh phát triển trò chơi.

Ngoài ra, nếu bạn chọn đi cùng với OpenGL, SDL là một thư viện tuyệt vời và rất phổ biến và có rất nhiều tài nguyên để học OpenGL (NeHe, v.v.) - nhưng có lẽ đó là nơi dành cho một câu hỏi khác.


1
Để đối chiếu với cuộc thảo luận OGL vs DX, các anh chàng Unity rõ ràng đã quyết định chuyển sang DirectX trên Windows vì trình điều khiển OpenGL mặc định cho hầu hết các thẻ video đều rất tệ. Tôi không có tài liệu tham khảo trước mặt tôi, nhưng tại một cuộc hội thảo của họ, họ đã nói điều gì đó dọc theo các trình điều khiển OGL là sự cố số 1 của họ trên Windows. May mắn thay, lớp trừu tượng của chúng có nghĩa là bạn không thực sự quan tâm từ góc độ người dùng.
Tetrad

Chúng tôi tạo phần mềm trực quan theo định hướng kinh doanh cho cả unix và windows và tôi có thể xác nhận rằng phần lớn các vấn đề chúng tôi thấy trên Windows có liên quan đến trình điều khiển OpenGL.
drxzcl

1

Nếu bạn chỉ mới bắt đầu, có lẽ tốt hơn là sử dụng một công cụ hoặc khung 2D hiện có như SFML .


1

Tôi thích Direct X và đã sử dụng nó trong nhiều năm cho nhiều dự án nhưng nếu việc học của bạn coi chừng các vấn đề về phiên bản.

Tôi thấy rằng phần lớn mã x trực tiếp sẽ không biên dịch theo một phiên bản khác và điều này có thể là địa ngục nếu bạn đang cố gắng làm theo hướng dẫn.

Tôi khuyên dùng Direct X vì có các tính năng cho mọi thứ giúp bạn dễ dàng hơn khi mới bắt đầu và sau đó là các cách nâng cao hơn để thao tác mọi thứ khi bạn tiến lên.


1

Công cụ trò chơi của Haaf

Tôi không biết nó cập nhật như thế nào (ý tôi là không, nhưng tôi không nghĩ có bất kỳ lý do nào mà nó không thể sử dụng được), nhưng tôi đã sử dụng nó một thời gian trước đây (C ++) và tôi thực sự rất thích nó HGE không được cập nhật kể từ ngày 05/8, nhưng một lần nữa, tôi nhớ nó khá đơn giản để học và nhanh chóng. Nó cũng đi kèm với tất cả các loại công cụ và trợ giúp như một hệ thống hạt.

Dù sao, nếu điều bạn muốn là tạo ra một trò chơi thực tế, trái ngược với việc học những thứ đang diễn ra "dưới mui xe" trong các quy trình vẽ và như vậy, tôi khuyên bạn nên sử dụng một thứ gì đó ở cấp độ cao hơn là openGL hoặc DirectX, hoặc bạn sẽ dành thời gian để vẽ những thứ trên màn hình trái ngược với việc tạo ra một trò chơi thực tế. Và HGE chắc chắn đáng để kiểm tra.

http://hge.relishgames.com/


0

Tôi đang ở vị trí tương tự như bạn, mới bắt đầu tự mình phát triển trò chơi (trên nền tảng iPhone) vài tháng trước. Đến từ nền C, tôi thực sự khuyên bạn nên sử dụng khung (Riêng Cocos2d).

Các ưu điểm của khung là nhiều hơn sau đó có thể được thảo luận trong bài viết này - nhưng chủ yếu là nó xử lý hầu hết việc xử lý ở mức độ thấp với OpenGL và cung cấp cho bạn các phương thức để đối phó với những gì bạn có thể sẽ yêu cầu cho nhà phát triển trò chơi. Họ có một cộng đồng tuyệt vời, là nguồn mở và do đó nếu bạn cần truy cập mã cốt lõi của khung / sửa đổi bất kỳ bit nào của nó để phù hợp với nhu cầu của bạn / chuyển đến OpenGL cấp thấp nếu cần - bạn vẫn được lựa chọn đó.

Bạn có thể đi theo con đường của OpenGL trực tiếp nhưng với tôi nó chỉ là quá mức cần thiết.

Bạn rất có thể cũng muốn xem xét các thư viện vật lý khác nhau tồn tại ngoài đó - Google Chipmunk và Box2D để biết thêm thông tin.

chúc mừng


1
+1 vì không xứng đáng ở mức -2. Quá nhiều troll trên trang web này đưa ra tiêu cực không có lý do. Thành thật mà nói, tôi thậm chí không hiểu tại sao họ thậm chí cho phép mọi thứ dưới 0 được hiển thị. Nó ngu ngốc như youtube cho phép downvote.
Carter81
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.