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?
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?
Câu trả lời:
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: WolfenQt và Tăng tốc các widget của bạn bằng OpenGL
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/
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.
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: - /
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.
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)
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ó.
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
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.