Editor de níveis + Jogo -> Duplicar código específico de renderização / jogo?

14

Eu tenho lido sobre como criar código para um jogo. Uma coisa que não consegui descobrir é: como você consegue escrever um editor de nível fora do jogo (não um 'editor de nível no jogo') sem 'copiar' o código do jogo? Por exemplo, pode ser necessário copiar todo o código sobre os diferentes tipos de entidades que você pode ter. Você precisará adicionar o código de renderização do jogo.

Meu palpite é que isso pode ser feito criando uma DLL da parte 'engine' do jogo. Em seguida, compartilhe-o entre o jogo real e o editor de níveis.

Ou existe uma maneira melhor / mais fácil de fazer isso?

Utkarsh Sinha
fonte

Respostas:

13

Você precisará separar seu código em projetos separados (na mesma solução). Normalmente você teria a seguinte configuração:

-Engine Core       (DLL)
-Game + Game Logic (EXE)
-Content Pipeline  (DLL)
-Editor            (EXE)

Para projetos ainda maiores, convém separar o Núcleo do mecanismo em vários projetos como Núcleo, Física, Gráficos, Áudio, Entrada e Rede. Todos esses projetos não podem fazer referência um ao outro, mas todos fazem referência ao Core, onde você pode armazenar alguns tipos de base comuns.

Se eles se referissem, a separação seria inútil.

De qualquer forma, isso deve ajudá-lo a reutilizar partes do seu mecanismo em outros projetos. Por exemplo, para o editor, você precisaria fazer referência ao projeto Graphics que faz referência ao próprio Core.

Essa separação também significa que agora você pode usar tecnologias Somente Windows, como WPF, em seu editor, enquanto o jogo ainda pode ser direcionado para Windows e XBLIG.

Para obter mais informações sobre o uso do XNA em um ambiente WPF, consulte este link: http://blogs.msdn.com/b/nicgrave/archive/2010/07/25/rendering-with-xna-framework-4-0-inside- of-a-wpf-application.aspx

Roy T.
fonte
Obrigado! Um pouco mais de observação e achei isso - create.msdn.com/en-US/education/catalog/sample/… - Parece que o WinForms é suportado melhor que o WPF!
Utkarsh Sinha
Ei, isso é verdade, mas essa amostra é de 2008, antes que o WPF realmente decolasse. Eu mudei do WinForms para o WPF há um ano e não mudaria de volta :). Se você quiser se manter compatível com esse exemplo, sempre poderá usar o WinFormsControlHost em um aplicativo WPF :).
Roy T.
4

Separe a lógica de renderização da melhor maneira possível da lógica de jogo real ao projetar seu mecanismo de jogo. Uma maneira de fazer isso é usar o padrão Component ao criar seu mecanismo de jogo. Por exemplo, o XNA usa esse padrão no nível da estrutura para flexibilidade. Use a mesma base de código para renderizar com seu editor de níveis; escreva wrappers, se necessário.

Da mesma forma, outro padrão um tanto popular é o MVC (Model-View-Controller), que também pode ajudar. Codifique seu mecanismo usando o MVC normalmente. Você pode usar o mesmo código para Exibir e modelar, mas injetar um controlador personalizado para editar o modelo para o seu editor de níveis, em vez do controlador do mecanismo de jogo que é atualizado de acordo com a entrada do jogo. Implemente serialização para modelos de jogos para carregá-los / salvá-los do editor ou jogo.

Manter os componentes em montagens separadas, é claro, incentivará a separação ...

XiaoChuan Yu
fonte