Pustaka Game C ++ untuk Game Berbasis SVG [ditutup]

8

Saya sedang mencari untuk membangun lintas platform platform engine 2D gaya permainan RPG untuk ChaiScript .

Saya ingin dapat melakukan semua gambar dengan SVG dan membutuhkan input joystick. Saya juga membutuhkan perpustakaan yang saya gunakan untuk menjadi opensource dan kompatibel dengan lisensi BSD.

Saya kenal dengan allegro , ClanLib , dan SDL . Sejauh yang saya tahu, tidak ada perpustakaan yang dibangun atau integrasi yang jelas untuk SVG. Juga, saya mengetahui percakapan sebelumnya di situs ini mengenai Qt untuk pengembangan game SVG.

Saya berharap untuk menghindari Qt karena ukuran dan kompleksitas membuatnya menjadi persyaratan. Selain itu, Qt tampaknya tidak memiliki dukungan input joystick, yang mengharuskan SDL atau pustaka lain juga digunakan.

Jadi pertanyaan saya dapat disimpulkan sebagai berikut:

  • Apa cara terbaik untuk mendapatkan dukungan SVG dan joystick di perpustakaan 2D C ++ sambil meminimalkan ketergantungan sebanyak mungkin (lebih baik menghindari Qt sama sekali)?
lefticus
sumber
1
Mengapa Anda membutuhkan SVG?
AttackingHobo
Saya tidak membutuhkan SVG, tetapi itu akan membantu memberikan tampilan dan perasaan yang saya inginkan. Saya ingin mesinnya mudah diukur ke berbagai ukuran layar, ditambah pembesaran dinamis area permainan aktif.
lefticus
1
Jika Anda membutuhkan banyak penskalaan, itu mungkin cara yang baik untuk melakukannya. Tetapi dengan SVG atau format vektor lainnya, ada kelemahan besar, setiap objek membutuhkan waktu lebih lama untuk menggambar semakin kompleks itu. Sementara dengan seni raster, sebagian besar waktu menggambar tergantung pada ukuran objek, dan sampai batas tertentu jumlah transformasi.
AttackingHobo
1
Alasan mengapa SVG adalah GOOD IDEA (tm) untuk format yang digunakan dalam mesin game berbasis vektor 2D dapat diringkas dalam satu kata: Inkscape. Yang benar adalah bahwa kode ini hanya setengah dari permainan. Tanpa alat yang hebat untuk produksi konten, Anda tidak akan berhasil membuat semua kecuali gim terkecil.
Lennart Rolland
1
Anda selalu dapat merender SVG menjadi spritesheet terlebih dahulu saat memuat
Sidar

Jawaban:

2

Saya tidak melihat alasan mengapa Anda tidak bisa menggunakan SDL atau perpustakaan input lain dengan perpustakaan grafis 2D seperti libcairo .

Adapun ChaiScript, pernahkah Anda mendengar tentang Lua ?

bkersten
sumber
Saya telah mendengar tentang Lua. Saya salah satu penulis ChaiScript dan saya bertujuan untuk mengerjakan proyek yang melatih bahasa. Selain itu secara signifikan kurang bekerja untuk menggunakan ChaiScript dengan C ++ kemudian Lua (event dengan mempertimbangkan SWIG atau LuaBind).
lefticus
Tentang libcairo. Tampaknya ada banyak pekerjaan dan sejumlah besar dependensi untuk mendapatkan rendering libcairo ke SDL, atau apakah saya kehilangan sesuatu?
lefticus
Oh, satu hal lagi. Saya tidak melihat metode untuk benar-benar memuat file SVG dan merendernya dengan libcairo.
lefticus
SVG hanya XML. Saya yakin ada perpustakaan untuk membaca file svg yang sesuai dengan kebutuhan Anda. Namun Kairo adalah perpustakaan grafis 2D cepat yang akan memberi Anda gaya visual yang Anda cari. Menggunakan Kairo dengan SDL membuatnya terlihat sederhana.
bkersten
Jadi, jika saya benar-benar menggunakan SVG dan saya tidak ingin menggulung renderer saya sendiri, itu berarti librsvg yang memerlukan libcairo, yang membutuhkan libgdk dan libgtk dan kemudian sdl untuk manajemen input lintas platform. Atau hanya Qt. Karena penasaran, apakah ada yang punya pengalaman dengan membangun mesin game berbasis SVG yang crossplatform?
lefticus
2

Saya kenal dengan allegro, ClanLib, dan SDL. Sejauh yang saya tahu, tidak ada perpustakaan yang dibangun atau integrasi yang jelas untuk SVG.

Pernahkah terpikir oleh Anda untuk bertanya ... mengapa begitu?

Tentu, SVG adalah spesifikasi yang rumit untuk diterapkan pada level dasar "memasukkan XML ke memori dan memvalidasinya". Tapi saya tidak berpikir Anda sepenuhnya menghargai fakta sederhana bahwa rendering SVG tidak cepat .

Browser web cepat jika mereka membuat halaman web kurang dari 500 ms atau lebih. Gambar SVG mungkin membutuhkan waktu 20 ms + untuk diurai, dan itu untuk yang kecil, sederhana. Sesuatu yang mungkin Anda temukan dalam sebuah game, sebuah game non-grafis-sepele, akan memakan waktu lebih lama. Render gambar SVG tidak dimaksudkan untuk animasi cepat.

Bahkan sesuatu tingkat rendah seperti libCairo bukanlah penyaji berkinerja tinggi. Tentu saja, ini cukup cepat untuk peramban, tetapi tidak terlalu bagus dalam kinerja rendering perangkat lunaknya.

Singkatnya, saya akan membuang sepenuhnya SVG dan melihat apakah libCairo dapat melayani kebutuhan Anda. Itu hanya untuk tujuan evaluasi, untuk melihat apakah kinerjanya cukup cepat dalam keadaan yang mendekati tujuan yang Anda inginkan. Setelah itu ditentukan, Anda dapat memutuskan apa yang harus dilakukan selanjutnya dalam hal teknologi (Qt, SDL, apa pun).

Nicol Bolas
sumber
1

Mengenai SVG ini bukan yang terbaik untuk menghasilkan konten on-the-fly dan untuk rendering real-time, bahkan dalam 2d, namun ....

Jika Anda menggunakan file SVG untuk membuat konten asli Anda, maka Anda bisa memiliki fase generasi pra-level / area dengan layar pemuatan / cut-scene yang sesuai di mana Anda akan menggunakan konten SVG untuk membuat gambar standar dari resolusi yang Anda butuhkan, ini akan memungkinkan Anda untuk kode hanya dengan gambar normal sambil mempertahankan fleksibilitas SVG untuk penargetan multi-resolusi. Ini bukan ide, tetapi dengan cara ini Anda dapat memanfaatkan perangkat keras untuk bermain dengan gambar yang telah ditentukan sebelumnya seperti yang dirancang untuk dilakukan, daripada mencoba menghasilkan konten dengan cepat dari file SVG. Karena komputer hanya akan menampilkan layar pemuatan / cut-scene, Anda dapat mendedikasikan sebagian besar sumber daya yang tersedia untuk menghasilkan gambar standar dari SVG dan karenanya melakukannya dengan cepat dan efisien.

GMasucci
sumber
0

Irrlicht memiliki dukungan SVG dan joystick

pyirrlicht
sumber
4
Dengan beberapa tautan dan penjelasan lebih lanjut, ini bisa menjadi jawaban yang bagus.
MichaelHouse