Você tem alguma dica / recomendação ao criar um jogo multiplataforma em C / C ++?
fonte
Você tem alguma dica / recomendação ao criar um jogo multiplataforma em C / C ++?
Ocultar qualquer coisa específica da plataforma atrás das camadas de abstração
Isso significa coisas como renderização, áudio, entrada do usuário e E / S de arquivo. Um truque comum para abstrair que, sem induzir uma penalidade no desempenho em tempo de execução, são os cabeçalhos independentes de plataforma com arquivos de implementação específicos da plataforma:
// FileSystem.h
class FileSystem {
public:
FileHandle OpenFile(const char * path);
// other stuff...
}
// FileSystemWindows.cpp
FileHandle FileSystem::OpenFile(const char * path) {
// call windows API...
}
Em seguida, configure as compilações para cada plataforma para compilar no arquivo .cpp apropriado.
Faça com que seus pipelines de conteúdo sejam lidos em ativos independentes da plataforma e gerem conteúdo específico para cada plataforma
Por exemplo, crie suas texturas como .tga ou apenas .psd e, em seguida, tenha um pipeline que possa convertê-las automaticamente para os diferentes formatos específicos de plataforma necessários.
Não assuma um layout de memória ou endianness específico em seus dados
As plataformas podem variar em ordem de bytes, preenchimento, alinhamento e tamanho da palavra. Qualquer código que se preocupe com isso deve ser exaustivamente testado em todas as plataformas.
Teste em todas as plataformas, o tempo todo
Você será mordido por erros específicos da plataforma. Você prefere ser mordido agora, ou quando está tentando colocar o jogo fora da porta?
#ifdef PLATFORM_WIN
ftwUse uma API como opengl / sdl, que oferecerá um mínimo de aborrecimentos ao passar de plataforma para plataforma.
Certifique-se de saber quais plataformas você deseja suportar. Não use o opengl apenas porque você acha que pode querer oferecer suporte a multiplataforma no futuro. Comece quando estiver preparado.
Saiba quais são as limitações de hardware em cada uma das plataformas que você deseja suportar.
fonte
Tente evitar a dispersão
#if defined(_FOO_) ... #elif defined(_BAR_) ... #else ... #endif
por todo o código.Às vezes, parece que é a maneira mais fácil, mas isso lhe trará problemas a longo prazo. Você deve tentar limitá-los ao seu próprio arquivo, para que cada implementação de plataforma seja independente.
A adição de uma plataforma deve incluir principalmente novos arquivos de implementação e apenas modificar os poucos arquivos existentes necessários.
fonte
Existem muitas bibliotecas que são multiplataforma; você não precisa escrever diretamente no OpenGL para executar em qualquer lugar. OGRE é um ótimo exemplo de um mecanismo de renderização que funciona em qualquer plataforma que você gostaria de nomear.
Na minha experiência, a maior preocupação é o seu sistema de compilação. Se você desenvolver no Windows com o Visual Studio, seu código poderá ser compilado no Linux, mas você terá dificuldades para compilar com facilidade. Veja sistemas de compilação como o CMake que podem usar as mesmas instruções de compilação para gerar arquivos de projeto específicos da plataforma (makefiles no linux, VS Projects no Windows, XCode Projects no Mac, etc.).
fonte
Ao escrever suas funções para salvar e carregar arquivos ou se comunicar através de uma rede, não se esqueça da continuidade .
Em vez de ler uma grande estrutura com uma única chamada para fread / fwrite ou algo de baixo nível como esse, crie um ReadByte / WriteByte e ReadFloat / WriteFloat. Então, você terá menos lugares para fazer alterações se decidir segmentar uma plataforma diferente posteriormente.
fonte