Biblioteca de jogos C ++ para jogos baseados em SVG [fechado]

8

Estou pensando em criar um mecanismo de jogo em estilo 2D de código aberto de plataforma cruzada para o ChaiScript .

Quero poder fazer todos os gráficos com SVG e precisar de entrada de joystick. Também preciso que as bibliotecas usadas sejam de código aberto e compatíveis com a licença BSD.

Estou familiarizado com allegro , ClanLib e SDL . Até onde eu sei, nenhuma dessas bibliotecas foi incorporada ou óbvia integração para o SVG. Além disso, estou ciente das conversas anteriores neste site sobre Qt para desenvolvimento de jogos SVG.

Espero evitar o Qt por causa do tamanho e da complexidade de torná-lo um requisito. Além disso, o Qt parece não ter suporte à entrada do joystick, o que exigiria que o SDL ou alguma outra biblioteca também fosse usada.

Portanto, minha pergunta pode ser resumida da seguinte forma:

  • Qual é a melhor maneira de obter suporte a SVG e joystick em uma biblioteca 2D C ++, minimizando ao máximo as dependências (de preferência evitando o Qt por completo)?
lefticus
fonte
11
Por que você precisa de SVG?
AttackingHobo
Não preciso de SVG, mas ajudaria a fornecer a aparência que desejo. Quero que o mecanismo seja facilmente escalável para vários tamanhos de tela diferentes, além de ter um zoom dinâmico da área de jogo ativa.
lefticus
11
Se você precisar de muito dimensionamento, esse pode ser um bom caminho. Mas com SVG ou qualquer outro formato vetorial, há uma grande desvantagem, cada objeto leva mais tempo para desenhar o que é mais complexo. Enquanto na arte raster, a maior parte do tempo do desenho depende do tamanho do objeto e, em certa medida, da quantidade de transformações.
AttackingHobo
11
A razão pela qual SVG é uma BOA IDÉIA (tm) para um formato a ser usado em um mecanismo de jogo baseado em vetor 2D pode ser resumida em uma palavra: Inkscape. A verdade é que o código é apenas metade do jogo. Sem uma ótima ferramenta para produção de conteúdo, você não conseguirá fazer todos, exceto o menor dos jogos.
Lennart Rolland
11
Você sempre pode tornar o SVG para uma spritesheet primeiro na carga
Sidar

Respostas:

2

Não vejo nenhuma razão para que você não possa usar o SDL ou outra biblioteca de entrada com uma biblioteca de gráficos 2D como o libcairo .

Quanto ao ChaiScript, você já ouviu falar de Lua ?

Bkersten
fonte
Eu ouvi falar de Lua. Sou um dos autores do ChaiScript e pretendo trabalhar em um projeto que exercite a linguagem. Além disso, é significativamente menos trabalhoso usar o ChaiScript com C ++ do que Lua (evento considerando SWIG ou LuaBind).
Lefticus
Em relação ao libcairo. Parece que há muito trabalho e um número significativo de dependências para obter a renderização libcairo para SDL, ou estou perdendo alguma coisa?
Lefticus
Oh, mais uma coisa. Não vejo nenhum método para carregar um arquivo SVG e renderizá-lo com a libcairo.
Lefticus
SVG é apenas XML. Tenho certeza de que existem bibliotecas para ler arquivos svg que atendem às suas necessidades. O Cairo, no entanto, é uma biblioteca gráfica rápida em 2D que forneceria o estilo visual que você procura. Usar o Cairo com SDL faz com que pareça simples.
bkersten
Portanto, se eu realmente estou no SVG e não quero criar meu próprio renderizador, isso significa librsvg, que requer libcairo, que requer libgdk e libgtk e, em seguida, sdl para gerenciamento de entrada de plataformas cruzadas. Ou apenas Qt. Por curiosidade, alguém tem experiência na construção de um mecanismo de jogo baseado em SVG que é uma plataforma cruzada?
Lefticus
2

Eu estou familiarizado com allegro, ClanLib e SDL. Até onde eu sei, nenhuma dessas bibliotecas foi incorporada ou integração óbvia para o SVG.

Já lhe ocorreu perguntar ... por que isso?

Certamente, SVG é uma especificação complicada para implementar em um nível básico de "obtenção do XML na memória e validação". Mas não acho que você aprecie completamente o simples fato de a renderização SVG não ser rápida .

Os navegadores da Web são rápidos se renderizam uma página da Web em menos de 500 ms. As imagens SVG podem demorar mais de 20 ms para renderizar, e são pequenas e simples. Algo que você pode encontrar em um jogo, um jogo não-graficamente trivial, vai levar muito, muito mais tempo. A renderização de imagem SVG não se destina à animação rápida.

Mesmo algo de nível inferior como o libCairo não é exatamente um renderizador de alto desempenho. Certamente, é rápido o suficiente para um navegador, mas não é exatamente o seu desempenho na renderização de software.

Em resumo, eu abandonaria o SVG inteiramente e veria se o libCairo pode atender às suas necessidades. Isso é apenas para fins de avaliação, para verificar se o desempenho é rápido o suficiente em circunstâncias que se aproximam do objetivo que você pretende para eles. Uma vez determinado, você pode decidir o que fazer em termos de tecnologia (Qt, SDL, qualquer que seja).

Nicol Bolas
fonte
1

No que diz respeito a este SVG, não é o melhor para gerar conteúdo on-the-fly e renderização em tempo real, mesmo em 2D, no entanto ....

Se você usar os arquivos SVG para criar seu conteúdo original, poderá ter uma fase de geração de pré-nível / área com tela de carregamento / cena em que você usaria o conteúdo SVG para renderizar imagens padrão da resolução necessária, isso permitiria que você codificasse simplesmente com imagens normais, mantendo a flexibilidade do SVG para o direcionamento de várias resoluções. Não é uma idéia, mas dessa maneira você pode aproveitar o hardware para reproduzir as imagens pré-renderizadas da maneira como foi projetado, em vez de tentar gerar conteúdo rapidamente a partir de arquivos SVG. Como o computador exibia apenas a tela de carregamento / cena de corte, você poderia dedicar uma grande proporção de recursos disponíveis para gerar as imagens padrão do SVG e, portanto, fazê-lo de maneira rápida e eficiente.

GMasucci
fonte
0

Irrlicht tem suporte a SVG e joystick

pyirrlicht
fonte
4
Com alguns links e mais explicações, isso pode ser uma boa resposta.
MichaelHouse