Tôi phải bắt đầu từ đâu nếu tôi muốn viết một trò chơi C ++ 2d? [đóng cửa]


17

Tôi là một nhà phát triển web C # và tôi muốn mở rộng bộ kỹ năng của mình và có một số niềm vui trong khi thực hiện nó. Tôi biết một số điều cơ bản về C ++ và tôi rất thích viết một công cụ trò chơi / trò chơi 2d đơn giản cho chính mình bằng C ++. Tôi cần những thư viện hoặc SDK nào khác và tôi sẽ tìm thấy một số hướng dẫn và tài nguyên thông tin ở đâu để tiến lên?

Tôi đã xem xét XNA với C #. Có rất nhiều tài nguyên cho việc đó nhưng tôi muốn sử dụng các sản phẩm không phải của Microsoft. Điểm của điều này là để có một niềm vui nhỏ trong khi trở thành một lập trình viên tròn tốt hơn.

Xin lưu ý rằng tôi không yêu cầu nơi tốt nhất để bắt đầu. Tôi chỉ yêu cầu một nơi để bắt đầu.

Cảm ơn vì bất kì sự giúp đỡ!

Câu trả lời:


27

Nơi bắt đầu tiêu chuẩn (theo kinh nghiệm của tôi) cho nhà phát triển trò chơi C ++ là SDL . Bạn đã có được bàn tay của bạn bẩn hơn một chút so với XNA.

Nếu bạn muốn thử một cái gì đó cao hơn một chút thì tôi sẽ đề xuất SFML . Nó xử lý một số nhiệm vụ mang tính chất đàn ông hơn cho bạn nhưng bạn vẫn phải theo dõi việc sử dụng bộ nhớ của mình, v.v.


1
Tôi sẽ xem xét những thứ đó. Vấn đề lớn nhất của tôi với XNA là nó đơn giản đến mức tôi không cảm thấy mình thực sự đang học những thứ cấp thấp hơn mà tôi thích khám phá.
quakkels

6
SFML có thiết kế đẹp, nhưng vẫn còn một chút lỗi và đang trong quá trình thiết kế lại API chính - Tôi sẽ không sử dụng nó cho các trò chơi phức tạp hơn cho đến khi bản phát hành tiếp theo được đánh bóng tốt.
Bitgarden

Nếu bạn muốn thứ gì đó thách thức hơn SDL một chút, hãy thử ClanLib . Giống như XNA, nó hỗ trợ tăng tốc phần cứng, nhưng cũng hoạt động trên Linux và cũng là độc quyền 2D.
ChrisC

2
Bạn cũng có thể đi thẳng vào cổ họng - OpenGL là sở thích cá nhân của tôi (bạn có thể gói nó bằng SDL hoặc SFML)
ultifinitus

9

Tôi sẽ đề nghị sử dụng SDL . Đã có từ rất lâu nên tài liệu và hỗ trợ khá tốt, và đó là một trong những cách dễ nhất mà tôi biết để có được bề mặt vẽ trên màn hình. Nó sẽ cung cấp cho bạn thực hành các lớp viết trong C ++ (vì có thể bạn sẽ muốn thực hiện nhiều lệnh gọi hàm SDL C) và cũng cung cấp cho bạn một số kinh nghiệm sử dụng con trỏ và tham chiếu và thực hiện một số quản lý bộ nhớ cơ bản. Quản lý bộ nhớ của riêng bạn là một trong những khác biệt chính giữa C ++ và C #.


9

Cá nhân, tôi sẽ chọn Allegro 5 , vì những lý do sau:

  1. Nó có một hệ thống xây dựng dựa trên CMake. Điều này làm cho nó dễ dàng hơn nhiều so với hầu hết các hệ thống xây dựng để làm việc trên nhiều nền tảng. Điều này có vẻ như là một điều nhỏ, nhưng nó khá quan trọng về tổng thể. Nó làm cho việc xây dựng thư viện đơn giản hơn nhiều.

  2. SFML vẫn còn trong thông lượng quan trọng. 2.0 là một thay đổi khá đáng kể. Trong khi đó Allegro đã trải qua một sự thay đổi đáng kể với phiên bản 5, và giờ đây tất cả là về sự ổn định.

  3. Nó bao gồm tính mô đun theo một cách khác với SFML. Với SFML, bạn yêu cầu các thành phần cụ thể, nhưng bạn có được tất cả chúng. Nếu bạn yêu cầu thành phần đồ họa, bạn sẽ có được tất cả các thành phần đồ họa. Với Allegro 5, bạn luôn có được thành phần đồ họa. Nhưng nếu bạn không muốn sử dụng trình tải bitmap của Allegro, bạn không phải làm vậy; bạn có thể sử dụng của riêng bạn.

  4. Nó có tài liệu rất tốt. SFML sử dụng tài liệu theo kiểu Doxygen, nhưng thậm chí đó là Spartan khá. Trong khi đó Allegro 5 toàn diện hơn, với các chức năng được nhóm lại với nhau dựa trên các hệ thống cụ thể mà chúng bao gồm. Nó không hoàn hảo, nhưng nó là tổng thể tốt hơn.

  5. Họ đủ thông minh để không cố gắng thực hiện phân luồng. Với C ++ 11 / Boost.Thread có sẵn rộng rãi hoặc chỉ quanh góc, sử dụng một trình bao bọc luồng khác có thể không chỉ là vấn đề: có thể nguy hiểm khi làm cho mã của bạn hoạt động đúng.


Tại sao bạn muốn / đề xuất Allegro hơn SDL hoặc SFML?
Quazi Irfan

@iamcreasy: Nếu bạn khăng khăng.
Nicol Bolas

Bạn vẫn không đề cập đến SDL ...
Kỹ sư

@NickWiggill: SDL có các luồng và hệ thống xây dựng dành riêng cho nền tảng. Tôi không cảm thấy cần phải gọi nó ra cho bất cứ điều gì cụ thể.
Nicol Bolas

@ nicol-bolas bạn đã không đề cập đến nhược điểm của Allegro. Giống như số lượng rất thấp của hướng dẫn so sánh.
Quazi Irfan

4

Tôi nghĩ rằng một nơi tuyệt vời để bắt đầu là LazyFoo . Điều này sẽ giúp bạn đứng dậy và chạy với SDL nhanh hơn bất kỳ nơi nào khác tôi từng thấy. Tôi khuyên bạn nên nhanh chóng truy cập OpenGL (ngay khi bạn có thể kiểm tra nó) bởi vì bạn sẽ nhận được nhiều tiền hơn cho đồng đô la lập trình của mình - với khả năng tăng tốc phần cứng. Nếu bạn đi theo con đường đó, tôi khuyên bạn nên Hướng dẫn này .


2

Tôi muốn giới thiệu SFML nếu bạn đang sử dụng c ++. Nó sẽ giúp bạn có được một cái gì đó trên màn hình một cách nhanh chóng và sử dụng nó với mã trò chơi c ++ của bạn là điều dễ dàng.


2
  • SFML - em bé trong nhóm, nhưng có khả năng dễ sử dụng nhất từ ​​những gì tôi đã đọc.
  • SDL - đường giữa. Thư viện rất trưởng thành, hợp lý, thường súc tích nếu thỉnh thoảng hơi phức tạp và là một lựa chọn rất phổ biến. Thiết lập các định dạng hiển thị có thể là một chút khốn, tôi đã sử dụng các hướng dẫn của lazyfoo để giúp đỡ về mặt đó.
  • Allegro - Lão, nó đã xuất hiện từ thời Atari ST. Vì lý do đó, rất nhiều mã kết xuất 2D (mà tôi nghĩ chỉ có trong Allegro 4) khá nhanh chóng vì logic được xây dựng cho các hệ thống thông số kỹ thuật thấp hơn nhiều. Cá nhân tôi không thấy nó rất trực quan, thậm chí xem xét tài liệu.

Việc xem xét OpenGL tăng tốc khía cạnh 2D của những thứ hiện nay, việc truy cập vào các trình kết xuất phần mềm nhanh mà Allegro và SDL có (hoặc có trong các phiên bản trước đó) không quan trọng lắm. Tuy nhiên, khi tôi chọn một thư viện, tôi tập trung vào sự trưởng thành của dự án, cơ sở người dùng và tài liệu nhiều hơn tốc độ (miễn là tốc độ là hợp lý), và tôi sẽ nói SDL và Allegro giành chiến thắng trên các mặt trận đó. SDL cũng đã phát hành ba tựa game AAA như Civil: Call to Power.

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.