Thư viện trò chơi C ++ cho trò chơi dựa trên SVG [đã đóng]


8

Tôi đang tìm cách xây dựng một công cụ trò chơi 2D RPG đa nền tảng mở cho ChaiScript .

Tôi muốn có thể thực hiện tất cả các đồ họa với SVG và cần nhập phím điều khiển. Tôi cũng cần các thư viện tôi sử dụng để là nguồn mở và tương thích với giấy phép BSD.

Tôi quen thuộc với allegro , ClanLibSDL . Theo như tôi có thể nói, không có thư viện nào trong số này được tích hợp hoặc tích hợp rõ ràng cho SVG. Ngoài ra, tôi biết về các cuộc hội thoại trước đây trên trang web này liên quan đến phát triển trò chơi Qt cho SVG.

Tôi hy vọng tránh Qt vì quy mô và sự phức tạp của việc biến nó thành một yêu cầu. Ngoài ra, Qt dường như không có hỗ trợ đầu vào cần điều khiển, điều này sẽ yêu cầu SDL hoặc một số thư viện khác cũng được sử dụng.

Vì vậy, câu hỏi của tôi có thể được tóm tắt như thế này:

  • Cách tốt nhất để có được hỗ trợ SVG và cần điều khiển trong thư viện 2D C ++ trong khi giảm thiểu phụ thuộc càng nhiều càng tốt (tốt nhất là tránh hoàn toàn Qt)?

1
Tại sao bạn cần SVG?
Tấn

Tôi không cần SVG, nhưng nó sẽ giúp cung cấp giao diện mà tôi muốn. Tôi muốn động cơ có thể dễ dàng mở rộng với nhiều kích thước màn hình khác nhau, cộng với việc thu phóng động của khu vực trò chơi đang hoạt động.
lefticus

1
Nếu bạn cần nhiều quy mô có thể là một cách tốt để đi. Nhưng với SVG hoặc bất kỳ định dạng vectơ nào khác, có một nhược điểm lớn, mỗi đối tượng mất nhiều thời gian hơn để vẽ nó phức tạp hơn. Trong khi với nghệ thuật raster, hầu hết thời gian vẽ phụ thuộc vào kích thước của vật thể, và ở một mức độ nào đó, lượng biến đổi.
Tấn

1
Lý do tại sao SVG là một IDEA TỐT (tm) cho một định dạng để sử dụng trong công cụ trò chơi dựa trên vectơ 2D có thể được tóm tắt trong một từ: Inkscape. Sự thật là mã chỉ là một nửa của trò chơi. Nếu không có một công cụ tuyệt vời để sản xuất nội dung, bạn sẽ không thành công trong việc tạo ra tất cả trừ những trò chơi nhỏ nhất.
Lennart Rolland

1
Bạn luôn có thể kết xuất SVG thành một spritesheet trước khi tải
Sidar

Câu trả lời:


2

Tôi không thấy bất kỳ lý do nào khiến bạn không thể sử dụng SDL hoặc thư viện đầu vào khác có thư viện đồ họa 2D như libcairo .

Đối với ChaiScript, bạn đã nghe nói về Lua chưa?


Tôi đã nghe nói về Lua. Tôi là một trong những tác giả của ChaiScript và đang nhắm đến việc thực hiện một dự án thực hiện ngôn ngữ này. Bên cạnh đó, việc sử dụng ChaiScript với C ++ sau đó là Lua ít hơn đáng kể (sự kiện có tính đến SWIG hoặc LuaBind).
lefticus

Về libcairo. Dường như có rất nhiều công việc và một số lượng đáng kể phụ thuộc để có được kết xuất libcairo sang SDL, hoặc tôi đang thiếu một cái gì đó?
lefticus

Ồ, một điều khác. Tôi không thấy bất kỳ phương pháp nào để thực sự tải tệp SVG và hiển thị nó bằng libcairo.
lefticus

SVG chỉ là XML. Tôi chắc chắn có thư viện để đọc các tập tin svg phù hợp với nhu cầu của bạn. Cairo tuy nhiên là một thư viện đồ họa 2D nhanh sẽ cung cấp cho bạn phong cách hình ảnh mà bạn đang theo đuổi. Sử dụng Cairo với SDL làm cho nó trông đơn giản.
bkersten

Vì vậy, nếu tôi thực sự thiết lập SVG và tôi không muốn cuộn trình kết xuất của riêng mình, điều đó có nghĩa là librsvg yêu cầu libcairo, yêu cầu libgdk và libgtk và sau đó sdl để quản lý đầu vào đa nền tảng. Hoặc chỉ Qt. Vì tò mò, có ai có kinh nghiệm xây dựng một công cụ trò chơi dựa trên SVG đó là nền tảng chéo không?
lefticus

2

Tôi quen thuộc với allegro, ClanLib và SDL. Theo như tôi có thể nói, không có thư viện nào trong số này được tích hợp hoặc tích hợp rõ ràng cho SVG.

Có bao giờ xảy ra với bạn để hỏi ... tại sao lại như vậy?

Chắc chắn, SVG là một đặc tả kỹ thuật phức tạp để thực hiện ở mức độ "đưa XML vào bộ nhớ và xác thực nó" cơ bản. Nhưng tôi không nghĩ rằng bạn hoàn toàn đánh giá cao sự thật đơn giản rằng kết xuất SVG không nhanh .

Trình duyệt web rất nhanh nếu chúng hiển thị một trang web trong vòng chưa đến 500ms. Hình ảnh SVG có thể mất 20ms + để hiển thị và đó là những hình ảnh nhỏ, đơn giản. Một cái gì đó bạn có thể tìm thấy trong một trò chơi, một trò chơi không có đồ họa tầm thường, sẽ mất nhiều thời gian hơn nhiều . Kết xuất hình ảnh SVG không dành cho hoạt hình nhanh.

Ngay cả một cái gì đó cấp thấp hơn như libCairo không chính xác là một trình kết xuất hiệu suất cao. Chắc chắn, nó đủ nhanh cho một trình duyệt, nhưng nó không thực sự rực rỡ trong hiệu suất kết xuất phần mềm của nó.

Nói tóm lại, tôi sẽ bỏ SVG hoàn toàn và xem libCairo có thể phục vụ nhu cầu của bạn không. Điều đó chỉ nhằm mục đích đánh giá, để xem liệu nó có thực hiện đủ nhanh trong các trường hợp gần đúng với mục đích bạn dự định cho chúng hay không. Khi đã xác định, bạn có thể quyết định nên làm gì tiếp theo về mặt công nghệ (Qt, SDL, bất cứ điều gì).


1

Liên quan đến SVG này không phải là tốt nhất để tạo nội dung nhanh chóng và hiển thị thời gian thực, ngay cả trong 2d, tuy nhiên ....

Nếu bạn sử dụng các tệp SVG để tạo nội dung gốc của mình thì bạn có thể có giai đoạn tạo mức trước / khu vực với màn hình / cảnh cắt tải thích hợp trong đó bạn sẽ sử dụng nội dung SVG để hiển thị hình ảnh chuẩn của độ phân giải bạn cần, điều này sẽ cho phép bạn mã hóa đơn giản với các hình ảnh bình thường trong khi vẫn giữ được tính linh hoạt của SVG để nhắm mục tiêu đa độ phân giải. Đây không phải là ý tưởng nhưng theo cách này bạn có thể tận dụng phần cứng để chơi với các hình ảnh được chuẩn bị trước theo cách nó được thiết kế để thực hiện, thay vì cố gắng tạo nội dung một cách nhanh chóng từ các tệp SVG. Vì máy tính sẽ chỉ hiển thị màn hình tải / cắt cảnh, bạn có thể dành một tỷ lệ lớn tài nguyên có sẵn để tạo ra hình ảnh tiêu chuẩn từ SVG và do đó thực hiện nó một cách nhanh chóng và hiệu quả.


0

Irrlicht có hỗ trợ SVG và cần điều khiển


4
Với một số liên kết và giải thích thêm đây có thể là một câu trả lời tốt.
MichaelHouse
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.