Thư viện GUI C ++ nào bạn có thể đề xuất? [đóng cửa]


26

Tôi đang xây dựng công cụ trò chơi của riêng mình trong C ++ và hiện tôi đang quyết định nên sử dụng giao diện người dùng nào.

Tôi có nên sử dụng một thư viện? Tôi có nên làm cho riêng mình?


3
Không rõ ý bạn là gì: GUI trong trò chơi? Hoặc GUI cho các công cụ? Mỗi người là một yêu cầu rất khác nhau ..
jacmoe

1
Ai cần công cụ khi bạn có ĐỘNG CƠ (nhạc sử thi)
Ricket

1
nếu bạn chỉ cần các hộp thoại phương thức, các hộp thoại tệp nhỏ trên sourceforge là một tệp đa nền tảng C C ++ duy nhất để thêm vào dự án của bạn. không có init, không có vòng lặp chính
tinyfiledialogs

Câu trả lời:


11

Trên thực tế, các widget Qt có thể được tích hợp với OpenGL và OpenGL có thể dễ dàng tích hợp với Qt (QGLWidget). Tất nhiên, các widget tìm kiếm nền tảng có thể không chính xác như những gì bạn đang tìm kiếm, nhưng đừng lo lắng, có nhiều cách để tùy chỉnh chúng, tạo riêng của bạn hoặc sử dụng một cái gì đó phù hợp hơn với nhu cầu của bạn, chẳng hạn như Qt Quick (mà bạn sẽ có thể tích hợp là tốt).

Nếu bạn quan tâm, đừng bỏ lỡ các liên kết sau: Các widget nhập vào chiều thứ ba: WolfenQtTăng tốc các widget của bạn bằng OpenGL


9

Tôi không nghĩ bạn nên tự viết, nhiệm vụ tạo ra một công cụ trò chơi là rất lớn, nếu bạn có nhiều thư viện có giấy phép tốt mà bạn có thể sử dụng và sửa đổi theo ý thích của mình.

Đối với một công cụ trò chơi, tôi sẽ sử dụng GUI chế độ ngay lập tức. Thêm thông tin tại đây: http://www.mollyrocket.com/forums/viewtopic.php?t=134

Ý tưởng chính là vẽ thành phần và kiểm soát sự tương tác cùng một lúc:

if (button(id, position, size)) 
{
    button_was_pressed();
}

Đối với một, Unity sử dụng một khái niệm tương tự.

Bạn có thể tìm thấy một triển khai của NVIDIA, được sử dụng trong các bản demo của họ: http://code.google.com.vn/p/nvidia-widgets/


4
IM GUI là một khái niệm thú vị, nhưng tôi đã thấy rằng có một số vấn đề xuất hiện khi bạn cố gắng làm những trò chơi. Nếu bạn muốn các thành phần menu hoạt hình vào / ra, bạn phải làm một cái gì đó như sửa đổi vị trí riêng của tất cả các widget hoặc làm một cái gì đó như sửa đổi ma trận biến đổi GUI cho cuộc gọi đó. Sẽ dễ dàng hơn nếu bạn có, ví dụ, một thùng chứa Window có hành động được dịch xuống cho con của nó và như vậy. Ngoài ra, vì một số lý do, hầu hết các triển khai IMGUI đều thiếu trạng thái widget "bị vô hiệu hóa".
Tetrad

@Tetrad: Thật dễ dàng để thực hiện các nhóm tiện ích với bố cục tự động, vị trí tương đối hoặc vị trí tuyệt đối (tiện ích Nvidia thực hiện việc này.) Nó cho phép bạn rất dễ dàng chứa các tiện ích bên trong cửa sổ hoặc bảng điều khiển. Đối với trạng thái "bị vô hiệu hóa", tôi không thể hiểu tại sao điều này sẽ không được thực hiện một cách tầm thường. Đối với "những thứ hay chơi", tôi nghĩ các khái niệm chế độ tức thời thực sự phù hợp hơn chế độ giữ lại, vì các vật dụng được cập nhật mọi khung hình.
Oskar N.

7

Cá nhân, tôi muốn giới thiệu CEGUI . Đó là nguồn mở và khá tốt. Tuy nhiên, điều bạn phải ghi nhớ là nó có thể rất, rất dài dòng nếu bạn viết ra mọi thứ bằng tay.

Nhưng, về mặt tích cực, nó có trình kết xuất cho cả OpenGL và DirectX. Tôi đã quản lý để đặt nó lên trên mẫu mà tôi thường sử dụng, ghi vào kết cấu trực tiếp bằng VBO (đó là kiểu hacky).

Các trò chơi trong câu hỏi là cho một nhiệm vụ mạng. Nhiệm vụ là có một trò chơi nối mạng, với một sảnh. Tôi biết tiền sảnh sẽ là một nỗi đau ở cổ, vì vậy tôi đã chọn một thư viện làm hầu hết cho tôi.


Đây là những gì tôi đang sử dụng. Tôi thấy rằng nó có quá nhiều phụ thuộc mặc dù. Và tôi đã gặp sự cố khi liên kết nó với dự án của mình (IIRC, giấy phép nói rằng tôi chỉ có thể liên kết với thư viện)
MrValdez

6
Nó có một số lượng phụ thuộc vô lý . Nó đã tăng số trò chơi demo nhỏ của tôi lên 50 MB!
hiệp sĩ666

Gì? Tôi nghĩ bạn đang làm sai :) Trọng lượng của CEGUI DLL trong trò chơi của tôi chưa đến 3 MB. Và với MrValdez: CEGUI theo giấy phép BSD ..
jacmoe

Giấy phép MIT - xin lỗi. CEGUI theo giấy phép MIT. :)
jacmoe

5

Vấn đề với hầu hết các thư viện GUI (Qt có lẽ là C ++ phổ biến nhất không chỉ dành cho Windows) là hầu hết sẽ không tích hợp tốt vào một công cụ. Theo truyền thống trong một ứng dụng GUI, thư viện GUI sẽ điều khiển vòng lặp chính và bạn chỉ cần nối lại các cuộc gọi lại với các sự kiện. Trong một công cụ trò chơi, bạn thường muốn kiểm soát vòng lặp, vì vậy nó có thể khó khăn nhất. Có lẽ bạn đang tìm kiếm thứ gì đó sẽ xử lý các điều khiển và hộp thoại vẽ và như vậy vào bối cảnh 3D mà bạn vượt qua? Những thứ đó có thể khó tìm hơn nhiều: - /


<pedantic> wxWidgets cũng là nền tảng chéo </ pedantic> mặc dù tôi có quan điểm của bạn về tích hợp động cơ
z Zebrabox

3
Tôi đã nói "phổ biến nhất", không phải "chỉ" :-P wx thậm chí còn ít hỗ trợ hơn để làm việc với bối cảnh 3D lần cuối tôi nhìn.
coderanger

4

Tôi tin tưởng mạnh mẽ vào việc viết của riêng bạn nhưng một lần nữa tôi rất già. Chiến đấu với một GUI lib khác để làm điều đó chỉ là một điều mà bạn muốn có xu hướng khiến tôi phát điên, thêm vào đó là hầu hết các GUI trò chơi khá tầm thường nên bạn không cần phải thiết kế MDI và siêu OO trong đó các nút có thể có các cuộn xem nổi bật khi bạn tình cờ di chuột qua một thanh tác vụ ở bên cạnh hộp kiểm với ngón tay cái có thể kéo được - hoặc đại loại như thế. Tôi đoán khác nhau cho những người khác nhau.


có những tình huống "viết của riêng bạn" không quá lạc hậu như người ta có thể nghĩ. Một trò chơi trong đó UI rất quan trọng, như trò chơi quản lý hoặc game nhập vai với cách quản lý vật phẩm phức tạp; UI sẽ là một phần rất lớn của trải nghiệm. joelonsoftware.com/articles/fog0000000007.html Nếu đó là chức năng kinh doanh cốt lõi - hãy tự làm, bất kể điều gì
v.oddou

3

Một tùy chọn có thể đáng để nghiên cứu là sử dụng WebKit để hiển thị giao diện người dùng của bạn và thực hiện tất cả giao diện người dùng của bạn với CSS / HTML / Javascript.

Đây là một triển khai nguồn mở (Berkelium) và đây là một nguồn đóng, giả định thương mại (Awesomium)


5
WebKit và người thân của nó hướng đến tốc độ làm mới một hoặc hai lần một giây, có thể khó thực hiện HUD cho một trò chơi định hướng hành động theo cách đó. Sẽ là tuyệt vời cho các menu hoặc bit chậm hơn mặc dù.
coderanger

1
@coderanger: Bạn có thể viết toàn bộ trò chơi bằng JavaScript / HTML5. Tôi đã xuất bản một trò chơi hành động thương mại cho Cửa hàng Chrome trực tuyến với tốc độ 60 FPS chỉ trong WebKit / Chrome.
Sean Middleditch

3

Tôi muốn đề xuất IUP - Giao diện người dùng di động: http://www.tecgraf.puc-rio.br/iup/

Tôi chỉ sử dụng nó với ngôn ngữ lập trình Lua nhưng nó rất dễ sử dụng. Nó chỉ có các hương vị C, LED và Lua nhưng bạn có thể dễ dàng tạo ra một vỏ bọc cho nó.


Trông có vẻ thú vị. Tôi sẽ kiểm tra nó sớm nhất có thể.
MrValdez

3

Cá nhân tôi đang sử dụng CEGUI trong dự án trò chơi của mình và đó là một giải pháp khá mạnh mẽ. Vấn đề là, đôi khi nó gần như cảm thấy muốn tạo ra một thay đổi nhỏ cho hàng tấn tệp thay đổi của bạn.

Tôi chưa sử dụng nó, nhưng libRocket hoàn toàn miễn phí, loại bỏ tất cả phí giấy phép và những gì không. Phần thú vị về lib này là bạn viết nó theo cú pháp html / css. http://librocket.com


2

Chỉ cần đưa ra một gợi ý thú vị, nếu phát triển trò chơi cho Windows, hãy sử dụng API Win32. Chỉ cần sử dụng các điều khiển cửa sổ bình thường (tôi sẽ khuyên bạn nên sử dụng các thư viện ATL / WTL) nhưng làm cho chúng trở thành chủ sở hữu.

Tôi thấy kỹ thuật này đang được sử dụng trong trò chơi Giải đấu thực tế đầu tiên, trong khi xem qua các tiêu đề được phát hành công khai (dành cho các nhà sản xuất mod).

Một trong những lợi ích chính để thực hiện việc này là có toàn bộ cơ sở hạ tầng giao diện người dùng Windows, cũng như duy trì các tùy chọn của người dùng về tốc độ lặp lại bàn phím, độ nhạy chuột, tốc độ nhấp đúp và các thứ khác. Ngoài ra nếu bạn tuân thủ các quy tắc, giao diện sẽ nhanh và không bị rung.

Hạn chế là bạn vẫn sẽ phải viết một số mã để phân lớp các điều khiển cửa sổ để khiến chúng sở hữu bản vẽ để bạn có thể áp dụng đồ họa và hiệu ứng của riêng mình cho chúng.

Chỉ cần ném nó ra như một ý tưởng.


1
Tôi tin rằng win32 / COM được mô phỏng trên Vista và Win 7. Không được đề xuất cho hiệu suất cao ...
Stephen Furlani

Tôi đoán nó phụ thuộc vào số lượng GUI bạn sẽ sử dụng trong trò chơi. Nếu nó chỉ dành cho hệ thống menu thì ai thực sự quan tâm, nếu bạn đang sử dụng nó nhiều trong phần quan trọng về tốc độ khung hình thì nó cần một số công việc và suy nghĩ.
Daemin

@StephenFurlani Win32 / COM không được mô phỏng trên Vista và Windows 7, nó là bản gốc và tốc độ đầy đủ. Hơn nữa, ATL / WTL không phụ thuộc vào COM, nhưng DirectX thì có.
Daemin
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.