Desenvolvendo games multiplataforma

Preview:

DESCRIPTION

Palestra ministrada no The Developers Conference (TDC) em São Paulo no dia 10/07/2011 sobre desenvolvimento de games multiplataforma.

Citation preview

Desenvolvendo Games Multiplataforma

André Santee (@DecoSantee)-Programador de games da Jera (@JeraSoftware)-Desenvolvo ferramentas e soluções para gamedev

Projetos:-Ethanon Engine-GS2D

Pensando multiplataforma

-Por quanto tempo você quer que seu código sobreviva?-"Migrar" o código com pouco ou nenhum esforço? É possível?

Ficar preso a uma plataforma pode ser fatal

O código está pronto para novas plataformas? Não? Isso é OK (sério!)

E sua equipe?

Existe linguagem flexível assim?

Podemos levar C++ a qualquer lugar

NinJump (Backflip Studios)Pinball Ride (Massive Finger)

Angry Birds (Rovio)

Mas C++ não possuigarbage collection!

C++ possui bibliotecas de templates shared_ptr<>, weak_ptr<>, ...

Já eu, prefiro as linguagens dinâmicas

e modernas!

Justo!Sem problemas...

Linguagens de scripting...

 

Como/Porque funciona

Interfaces (classes virtuais)

class Texture{public:    virtual bool SetTexture(const unsigned int passIdx = 0) = 0;    virtual math::Vector2 GetBitmapSize() const = 0;

protected:    virtual bool LoadTexture(        VideoWeakPtr video,        const string& fileName, GS_COLOR mask,        const unsigned int width = 0, const unsigned int height = 0,        const unsigned int nMipMaps = 0    ) = 0;};

class GLES2Texture : public Texture{public:    GLES2Texture(VideoWeakPtr video, const str_type::string& fileName);    ~GLES2Texture();    bool SetTexture(const unsigned int passIdx = 0);    math::Vector2 GetBitmapSize() const;

protected:    bool LoadTexture(        VideoWeakPtr video,        const string& fileName,        GS_COLOR mask,        const unsigned int width = 0, const unsigned int height = 0,        const unsigned int nMipMaps = 0);

    GLuint m_textureID;};

Scripting

scriptEngine->RegisterGlobalFunction(  "void AddEntity(const string &in)",  FUNCTION(engine::AddEntity),  CALL_GENERIC);

Outro modelo possível

(também multiplataforma)

Mandamentos

I - Não utilizarás código específico da plataforma explicitamente dentro do código do game.

II - Lembrai do primeiro mandamento, SEMPRE.

Problemas comuns

Resoluções de tela: um desafio em games baseados em sprites

Métodos de entrada: teclado, mouse, dpad, touchscreen...

Codificação de strings: ANSI vs UTF-7 vs UTF-8 vs UTF-16  Suporte a RTTI e

Exceptions:"To boost or not to boost?"

         

Ferramentas disponíveis hoje

Open source:-Qt-Ogre-SDL-Löve-GS2D-Ethanon*

Proprietárias:-Unity-Unreal Engine-BatteryTech

www.ethanon.com.br

O futuro é multiplataforma

Jamais fique preso a uma única plataforma

Perguntas?

André Santee (@DecoSantee)