25
Desenvolvendo Games Multiplataforma André Santee (@DecoSantee) -Programador de games da Jera (@JeraSoftware) -Desenvolvo ferramentas e soluções para gamedev Projetos: -Ethanon Engine -GS2D

Desenvolvendo games multiplataforma

Embed Size (px)

DESCRIPTION

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

Citation preview

Page 1: Desenvolvendo games multiplataforma

Desenvolvendo Games Multiplataforma

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

Projetos:-Ethanon Engine-GS2D

Page 2: Desenvolvendo games multiplataforma
Page 3: Desenvolvendo games multiplataforma
Page 4: Desenvolvendo games multiplataforma
Page 5: Desenvolvendo games multiplataforma

Pensando multiplataforma

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

Page 6: Desenvolvendo games multiplataforma

Ficar preso a uma plataforma pode ser fatal

Page 7: Desenvolvendo games multiplataforma

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

E sua equipe?

Page 8: Desenvolvendo games multiplataforma

Existe linguagem flexível assim?

Page 9: Desenvolvendo games multiplataforma

Podemos levar C++ a qualquer lugar

Page 10: Desenvolvendo games multiplataforma

NinJump (Backflip Studios)Pinball Ride (Massive Finger)

Angry Birds (Rovio)

Page 11: Desenvolvendo games multiplataforma

Mas C++ não possuigarbage collection!

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

Page 12: Desenvolvendo games multiplataforma

Já eu, prefiro as linguagens dinâmicas

e modernas!

Justo!Sem problemas...

Page 13: Desenvolvendo games multiplataforma

Linguagens de scripting...

 

Page 14: Desenvolvendo games multiplataforma

Como/Porque funciona

Page 15: Desenvolvendo games multiplataforma

Interfaces (classes virtuais)

Page 16: Desenvolvendo games multiplataforma

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;};

Page 17: Desenvolvendo games multiplataforma

Scripting

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

Page 18: Desenvolvendo games multiplataforma

Outro modelo possível

(também multiplataforma)

Page 19: Desenvolvendo games multiplataforma
Page 20: Desenvolvendo games 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.

Page 21: Desenvolvendo games multiplataforma

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?"

         

Page 22: Desenvolvendo games multiplataforma

Ferramentas disponíveis hoje

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

Proprietárias:-Unity-Unreal Engine-BatteryTech

Page 23: Desenvolvendo games multiplataforma

www.ethanon.com.br

Page 24: Desenvolvendo games multiplataforma

O futuro é multiplataforma

Jamais fique preso a uma única plataforma

Page 25: Desenvolvendo games multiplataforma

Perguntas?

André Santee (@DecoSantee)