SlideShare a Scribd company logo
1 of 23
Download to read offline
Desenvolvimento 
Multiplataforma 
Apresentando UTools 
Alexandre Ribeiro de Sá - Vortex Game Studios
Tópicos 
• Quem sou? 
• Identificando e entendendo o problema 
• Planejando uma solução 
• Ação
Quem sou? 
• Fundador da Vortex Game Studios; 
• Organizador da SPJam; 
• Desenvolvedor (C, C++, C# e outros); 
• Atualmente, no desenvolvimento 
de jogos e ferramentas de apoio; 
• Gosto de bolo :) 
@VortexStudios 
@SPGameJam 
@TheMonkeyTail
Identificando e Entendendo o Problema
Tudo começa aqui:
Alguns problemas que encontramos 
• Input 
Para cada tipo de dispositivo de entrada (teclado, joystick, mobile, touch) 
há necessidade de códigos específicos e não padronizados 
• Arquivos 
A leitura e gravação de arquivos é diferente em cada plataforma. Nosso 
primeiros testes com gravação e leitura de arquivos no Android levavam 
os dispositivos a congelar. 
• Tradução 
Os assets disponíveis para tratar o tema não funcionam adequadamente 
em jogos multiplataforma. O que adquirimos não funciona em Windows 
Phone e OS X
E as coisas só pioravam...
Temos: 
• Diversos inputs, incluindo os desenhados na tela em jogos 
mobiles; 
• Leitura e Gravação de arquivos; 
• Bibliotecas que não compilam adequadamente em todas as 
plataformas; 
• Necessidade de integrar bibliotecas exclusivas para diferentes 
plataformas
Resultado 
• Longos periodos de produção e desenvolvimento; 
• Códigos não-padronizados; 
• Novo ciclo de aprendizado para cada plataforma; 
• Custo elevado de produção; 
• AHHHHHHHH!!!!
Ficou ó...
Planejando uma solução
O que queremos? 
• Reduzir o tempo de produção do seu jogo; 
• Padronização de código-fonte; 
• Reduzir o tempo de aprendizado para implementação de 
bibliotecas 
• Reduzir o custo de produção do seu jogo
Como tornar realidade?
O que é a UTools? 
• Qual o objetivo? 
Reduzir os custos e tempo de produção de jogos multiplataforma usando 
um framework padrão. 
• Como funciona? 
Através da implementação de módulos especializados, cada um fazendo 
a sua tarefa, independente da plataforma de destino! 
• E quais são os modulos? 
A imagem explica :)
Módulos da UTools
A UInput 
• Interface visual; 
• Permite configurar todas as entradas 
em um só lugar, incluindo virtual 
• Exportar e importar presets 
em formato JSON 
• Ativar, desativar ou mudar 
configurações em real-time
Exemplo (C#) 
float h = 0.0f; 
if ( isPC ) { 
h = Input.GetAxis("Horizontal"); 
} else if ( isMobile ) { 
if( Input.acceleration.x >= 0.1f && Input.acceleration.x < 0.2f ) { 
h = 0.5f; 
} else if( Input.acceleration.x <= -0.1f && Input.acceleration.x > -0.2f ) { 
h = -0.5f; 
} else if( Input.acceleration.x >= 0.2f ) { 
h = 1.0f; 
} else if( Input.acceleration.x <= -0.2f ) { 
h = -1.0f; 
} else{ 
h = 0.0f; 
} 
}
Exemplo (C# c/ UInput) 
float h = UInput.getAxis( "Player", "X" );
A UData 
• Sintaxes amigáveis 
• Leitura e gravação funcionando em qualquer plataforma, com 
a mesma implementação 
• Armazenamento automático em nuvem quando a plataforma 
permitir
Exemplo (C#) 
• Leitura 
BinaryWriter bW = new BinaryWriter( file ); 
bW.Write( section.id ); 
bW.Write( section.locked ); 
bW.Write( section.storeKey ); 
• Gravação 
BinaryReader bR = new BinaryReader( file ); 
section.id = bR.ReadUInt32(); 
section.locked = bR.ReadBoolean(); 
section.storeKey = bR.ReadString();
Exemplo (C# c/ UData) 
• Leitura 
udSave.OpenPlayerData( "jelly_save", false); // False = Leitura 
udSave.Write( section.id ); 
udSave.Write( section.locked ); 
udSave.Write( section.storeKey ); 
• Gravação 
udSave.OpenPlayerData( "jelly_save", true ); // True = Gravação 
section.id = udSave.Read<uint>(); 
section.locked = udSave.Read<bool>(); 
section.storeKey = udSave.Read<string>();
Ação
Obrigado! 
http://utools.rocks 
fb.com/UToolsFramework 
twitter.com/UToolsFramework

More Related Content

What's hot

Faça seu próprio servidor pirata com OpenVZ
Faça seu próprio servidor pirata com OpenVZFaça seu próprio servidor pirata com OpenVZ
Faça seu próprio servidor pirata com OpenVZRicardo Bánffy
 
Como migrar seu ambiente de desenvolvimento para Linux
Como migrar seu ambiente de desenvolvimento para LinuxComo migrar seu ambiente de desenvolvimento para Linux
Como migrar seu ambiente de desenvolvimento para LinuxMarcelo Sabadini
 
Coding Dojo e Test Driven Development
Coding Dojo e Test Driven DevelopmentCoding Dojo e Test Driven Development
Coding Dojo e Test Driven Developmentpugpe
 

What's hot (8)

Faça seu próprio servidor pirata com OpenVZ
Faça seu próprio servidor pirata com OpenVZFaça seu próprio servidor pirata com OpenVZ
Faça seu próprio servidor pirata com OpenVZ
 
Como migrar seu ambiente de desenvolvimento para Linux
Como migrar seu ambiente de desenvolvimento para LinuxComo migrar seu ambiente de desenvolvimento para Linux
Como migrar seu ambiente de desenvolvimento para Linux
 
Node JS - Parte 1
Node JS - Parte 1Node JS - Parte 1
Node JS - Parte 1
 
Node JS - Parte 3
Node JS - Parte 3Node JS - Parte 3
Node JS - Parte 3
 
Windows 7
Windows 7Windows 7
Windows 7
 
Node JS - Parte 4
Node JS - Parte 4Node JS - Parte 4
Node JS - Parte 4
 
Node JS - Parte 2
Node JS - Parte 2Node JS - Parte 2
Node JS - Parte 2
 
Coding Dojo e Test Driven Development
Coding Dojo e Test Driven DevelopmentCoding Dojo e Test Driven Development
Coding Dojo e Test Driven Development
 

Similar to Dev Multiplataforma com UTools

Playstation Mobile - Campus Party 2013
Playstation Mobile - Campus Party 2013Playstation Mobile - Campus Party 2013
Playstation Mobile - Campus Party 2013José Farias
 
Swift na linha de comando
Swift na linha de comandoSwift na linha de comando
Swift na linha de comandoTales Andrade
 
FLISOL 2015 - Desenvolvimento de jogos para Linux com MonoGame
FLISOL 2015 - Desenvolvimento de jogos para Linux com MonoGameFLISOL 2015 - Desenvolvimento de jogos para Linux com MonoGame
FLISOL 2015 - Desenvolvimento de jogos para Linux com MonoGameLucas Mousinho
 
Java alem das aplicacoes comerciais convencionais
Java alem das aplicacoes comerciais convencionaisJava alem das aplicacoes comerciais convencionais
Java alem das aplicacoes comerciais convencionaisLeonardo Simberg
 
Introdução a linguagem Python: simples e produtiva
Introdução a linguagem Python: simples e produtivaIntrodução a linguagem Python: simples e produtiva
Introdução a linguagem Python: simples e produtivaÁlvaro Justen
 
Desenv. jogos em java e Proj. Parallax
Desenv.  jogos em java e Proj. ParallaxDesenv.  jogos em java e Proj. Parallax
Desenv. jogos em java e Proj. ParallaxMichel Montenegro
 
ASP.NET vNext no MAC OS
ASP.NET vNext no MAC OSASP.NET vNext no MAC OS
ASP.NET vNext no MAC OSJorge Maia
 
Visao geralti netshoes04
Visao geralti netshoes04Visao geralti netshoes04
Visao geralti netshoes04Ale Uehara
 
Turbinando seu workflow com cakePHP
Turbinando seu workflow com cakePHPTurbinando seu workflow com cakePHP
Turbinando seu workflow com cakePHPTiago Matos
 
Construindo aplicações Desktop com HTML, CSS e JS - Rio.JS Conference 2013
Construindo aplicações Desktop com HTML, CSS e JS - Rio.JS Conference 2013Construindo aplicações Desktop com HTML, CSS e JS - Rio.JS Conference 2013
Construindo aplicações Desktop com HTML, CSS e JS - Rio.JS Conference 2013javamanrj
 
Minicurso de TotalCross e Litebase
Minicurso de TotalCross e LitebaseMinicurso de TotalCross e Litebase
Minicurso de TotalCross e LitebaseNécio de Lima Veras
 
TDC2011 - Desenvolvimento de jogos com Javascript e HTML5
TDC2011 - Desenvolvimento de jogos com Javascript e HTML5TDC2011 - Desenvolvimento de jogos com Javascript e HTML5
TDC2011 - Desenvolvimento de jogos com Javascript e HTML5Willian Molinari
 
Interoperabilidade com .NET em ambiente Mainframe
Interoperabilidade com .NET em ambiente MainframeInteroperabilidade com .NET em ambiente Mainframe
Interoperabilidade com .NET em ambiente MainframeAlessandro Binhara
 
P10 dev studio
P10 dev studioP10 dev studio
P10 dev studioPirata Mao
 
IntroduçãO Ao Xna Campus Party
IntroduçãO Ao Xna  Campus PartyIntroduçãO Ao Xna  Campus Party
IntroduçãO Ao Xna Campus PartyJosé Farias
 
T19_LM3: Projeto final e documentação de planificação
T19_LM3: Projeto final e documentação de planificaçãoT19_LM3: Projeto final e documentação de planificação
T19_LM3: Projeto final e documentação de planificaçãoCarlos Santos
 
TypeScript - Campus party 2013
TypeScript - Campus party 2013TypeScript - Campus party 2013
TypeScript - Campus party 2013Giovanni Bassi
 

Similar to Dev Multiplataforma com UTools (20)

Playstation Mobile - Campus Party 2013
Playstation Mobile - Campus Party 2013Playstation Mobile - Campus Party 2013
Playstation Mobile - Campus Party 2013
 
Swift na linha de comando
Swift na linha de comandoSwift na linha de comando
Swift na linha de comando
 
FLISOL 2015 - Desenvolvimento de jogos para Linux com MonoGame
FLISOL 2015 - Desenvolvimento de jogos para Linux com MonoGameFLISOL 2015 - Desenvolvimento de jogos para Linux com MonoGame
FLISOL 2015 - Desenvolvimento de jogos para Linux com MonoGame
 
Java alem das aplicacoes comerciais convencionais
Java alem das aplicacoes comerciais convencionaisJava alem das aplicacoes comerciais convencionais
Java alem das aplicacoes comerciais convencionais
 
Introdução a linguagem Python: simples e produtiva
Introdução a linguagem Python: simples e produtivaIntrodução a linguagem Python: simples e produtiva
Introdução a linguagem Python: simples e produtiva
 
Desenv. jogos em java e Proj. Parallax
Desenv.  jogos em java e Proj. ParallaxDesenv.  jogos em java e Proj. Parallax
Desenv. jogos em java e Proj. Parallax
 
ASP.NET vNext no MAC OS
ASP.NET vNext no MAC OSASP.NET vNext no MAC OS
ASP.NET vNext no MAC OS
 
Visao geralti netshoes04
Visao geralti netshoes04Visao geralti netshoes04
Visao geralti netshoes04
 
Visao geralti netshoes04
Visao geralti netshoes04Visao geralti netshoes04
Visao geralti netshoes04
 
Turbinando seu workflow com cakePHP
Turbinando seu workflow com cakePHPTurbinando seu workflow com cakePHP
Turbinando seu workflow com cakePHP
 
Construindo aplicações Desktop com HTML, CSS e JS - Rio.JS Conference 2013
Construindo aplicações Desktop com HTML, CSS e JS - Rio.JS Conference 2013Construindo aplicações Desktop com HTML, CSS e JS - Rio.JS Conference 2013
Construindo aplicações Desktop com HTML, CSS e JS - Rio.JS Conference 2013
 
Minicurso de TotalCross e Litebase
Minicurso de TotalCross e LitebaseMinicurso de TotalCross e Litebase
Minicurso de TotalCross e Litebase
 
TDC2011 - Desenvolvimento de jogos com Javascript e HTML5
TDC2011 - Desenvolvimento de jogos com Javascript e HTML5TDC2011 - Desenvolvimento de jogos com Javascript e HTML5
TDC2011 - Desenvolvimento de jogos com Javascript e HTML5
 
Interoperabilidade com .NET em ambiente Mainframe
Interoperabilidade com .NET em ambiente MainframeInteroperabilidade com .NET em ambiente Mainframe
Interoperabilidade com .NET em ambiente Mainframe
 
P10 dev studio
P10 dev studioP10 dev studio
P10 dev studio
 
Presentation ii
Presentation iiPresentation ii
Presentation ii
 
IntroduçãO Ao Xna Campus Party
IntroduçãO Ao Xna  Campus PartyIntroduçãO Ao Xna  Campus Party
IntroduçãO Ao Xna Campus Party
 
T19_LM3: Projeto final e documentação de planificação
T19_LM3: Projeto final e documentação de planificaçãoT19_LM3: Projeto final e documentação de planificação
T19_LM3: Projeto final e documentação de planificação
 
Py S60
Py S60Py S60
Py S60
 
TypeScript - Campus party 2013
TypeScript - Campus party 2013TypeScript - Campus party 2013
TypeScript - Campus party 2013
 

Dev Multiplataforma com UTools

  • 1. Desenvolvimento Multiplataforma Apresentando UTools Alexandre Ribeiro de Sá - Vortex Game Studios
  • 2. Tópicos • Quem sou? • Identificando e entendendo o problema • Planejando uma solução • Ação
  • 3. Quem sou? • Fundador da Vortex Game Studios; • Organizador da SPJam; • Desenvolvedor (C, C++, C# e outros); • Atualmente, no desenvolvimento de jogos e ferramentas de apoio; • Gosto de bolo :) @VortexStudios @SPGameJam @TheMonkeyTail
  • 6. Alguns problemas que encontramos • Input Para cada tipo de dispositivo de entrada (teclado, joystick, mobile, touch) há necessidade de códigos específicos e não padronizados • Arquivos A leitura e gravação de arquivos é diferente em cada plataforma. Nosso primeiros testes com gravação e leitura de arquivos no Android levavam os dispositivos a congelar. • Tradução Os assets disponíveis para tratar o tema não funcionam adequadamente em jogos multiplataforma. O que adquirimos não funciona em Windows Phone e OS X
  • 7. E as coisas só pioravam...
  • 8. Temos: • Diversos inputs, incluindo os desenhados na tela em jogos mobiles; • Leitura e Gravação de arquivos; • Bibliotecas que não compilam adequadamente em todas as plataformas; • Necessidade de integrar bibliotecas exclusivas para diferentes plataformas
  • 9. Resultado • Longos periodos de produção e desenvolvimento; • Códigos não-padronizados; • Novo ciclo de aprendizado para cada plataforma; • Custo elevado de produção; • AHHHHHHHH!!!!
  • 12. O que queremos? • Reduzir o tempo de produção do seu jogo; • Padronização de código-fonte; • Reduzir o tempo de aprendizado para implementação de bibliotecas • Reduzir o custo de produção do seu jogo
  • 14. O que é a UTools? • Qual o objetivo? Reduzir os custos e tempo de produção de jogos multiplataforma usando um framework padrão. • Como funciona? Através da implementação de módulos especializados, cada um fazendo a sua tarefa, independente da plataforma de destino! • E quais são os modulos? A imagem explica :)
  • 16. A UInput • Interface visual; • Permite configurar todas as entradas em um só lugar, incluindo virtual • Exportar e importar presets em formato JSON • Ativar, desativar ou mudar configurações em real-time
  • 17. Exemplo (C#) float h = 0.0f; if ( isPC ) { h = Input.GetAxis("Horizontal"); } else if ( isMobile ) { if( Input.acceleration.x >= 0.1f && Input.acceleration.x < 0.2f ) { h = 0.5f; } else if( Input.acceleration.x <= -0.1f && Input.acceleration.x > -0.2f ) { h = -0.5f; } else if( Input.acceleration.x >= 0.2f ) { h = 1.0f; } else if( Input.acceleration.x <= -0.2f ) { h = -1.0f; } else{ h = 0.0f; } }
  • 18. Exemplo (C# c/ UInput) float h = UInput.getAxis( "Player", "X" );
  • 19. A UData • Sintaxes amigáveis • Leitura e gravação funcionando em qualquer plataforma, com a mesma implementação • Armazenamento automático em nuvem quando a plataforma permitir
  • 20. Exemplo (C#) • Leitura BinaryWriter bW = new BinaryWriter( file ); bW.Write( section.id ); bW.Write( section.locked ); bW.Write( section.storeKey ); • Gravação BinaryReader bR = new BinaryReader( file ); section.id = bR.ReadUInt32(); section.locked = bR.ReadBoolean(); section.storeKey = bR.ReadString();
  • 21. Exemplo (C# c/ UData) • Leitura udSave.OpenPlayerData( "jelly_save", false); // False = Leitura udSave.Write( section.id ); udSave.Write( section.locked ); udSave.Write( section.storeKey ); • Gravação udSave.OpenPlayerData( "jelly_save", true ); // True = Gravação section.id = udSave.Read<uint>(); section.locked = udSave.Read<bool>(); section.storeKey = udSave.Read<string>();