Prévia do material em texto
W
BA
08
95
_V
1.
0
PROJETO DE JOGOS 2D: GAME ART
E PROGRAMAÇÃO
2
Marcelo Henrique dos Santos
Gabrielly Del Carlo Richene
São Paulo
Platos Soluções Educacionais S.A
2021
PROJETO DE JOGOS 2D: GAME ART E
PROGRAMAÇÃO
1ª edição
3
2021
Platos Soluções Educacionais S.A
Alameda Santos, n° 960 – Cerqueira César
CEP: 01418-002— São Paulo — SP
Homepage: https://www.platosedu.com.br/
Head de Platos Soluções Educacionais S.A
Silvia Rodrigues Cima Bizatto
Conselho Acadêmico
Carlos Roberto Pagani Junior
Camila Braga de Oliveira Higa
Camila Turchetti Bacan Gabiatti
Giani Vendramel de Oliveira
Gislaine Denisale Ferreira
Henrique Salustiano Silva
Mariana Gerardi Mello
Nirse Ruscheinsky Breternitz
Priscila Pereira Silva
Tayra Carolina Nascimento Aleixo
Coordenador
Henrique Salustiano Silva
Revisor
Felipe Orsini Martinelli
Editorial
Alessandra Cristina Fahl
Beatriz Meloni Montefusco
Carolina Yaly
Mariana de Campos Barroso
Paola Andressa Machado Leal
Dados Internacionais de Catalogação na Publicação (CIP)_________________________________________________________________________________________
Richene, Gabrielly Del Carlo
R528p Projeto de jogos 2D: game art e programação /
Gabrielly Del Carlo Richene, Marcelo Henrique dos Santos.
– São Paulo: Platos Soluções Educacionais S.A., 2021.
44 p.
ISBN 978-65-5356-054-3
1. Programar jogos 2D. 2. Manipulação de sprites.
3. Desenvolvimento de jogo digital. I. Santos, Marcelo Henrique dos. II. Título.
CDD 006
____________________________________________________________________________________________
Evelyn Moraes – CRB: 8 010289
© 2021 por Platos Soluções Educacionais S.A.
Todos os direitos reservados. Nenhuma parte desta publicação poderá ser
reproduzida ou transmitida de qualquer modo ou por qualquer outro meio,
eletrônico ou mecânico, incluindo fotocópia, gravação ou qualquer outro tipo de
sistema de armazenamento e transmissão de informação, sem prévia autorização,
por escrito, da Platos Soluções Educacionais S.A.
https://www.platosedu.com.br/
4
SUMÁRIO
Games 2D: conceitos e processos ____________________________ 05
Interface/GUI (manipulação de sprites) para jogos 2D _______ 19
Programação estruturada e orientada a objetos _____________ 32
Desenvolvimento de um jogo digital 2D a partir de uma game
engine ________________________________________________________ 46
PROJETO DE JOGOS 2D: GAME ART E PROGRAMAÇÃO
5
Games 2D: conceitos e processos
Autoria: Gabrielly Del Carlo Richene
Leitura crítica: Felipe Orsini Martinelli
Objetivos
• Conceituar o universo dos games enquanto teoria e
criação.
• Apresentar ideias e expectativas para a produção
de um jogo eletrônico através das experiências de
autores do meio.
• Mapear abordagens teóricas e práticas na
construção de games.
• Apresentar games 2D de sucesso e outros pareceres.
6
1. Um panorama geral
Os videogames se popularizaram rapidamente nos últimos anos.
Antes, eram aparelhos de entretenimento para poucos, porém, hoje,
apresentam um leque de definições, indo desde um gratuito produto de
lazer e distração até um meio esportivo competitivo.
Este material abrange vários conceitos sobre o game digital, adentrando
o assunto para seu método de criação: ideias, expectativas dentro do
projeto do game, práticas, produção, jogabilidade e psique.
2. Games 2D
Aqui, você verá sobre o universo dos jogos eletrônicos em duas
dimensões, bem como definições e outros conceitos, para depois
adentrar com detalhes em composição e construção do jogo.
2.1 O que são
2D é a abreviação para “duas dimensões”, resultante do conjunto entre
largura e altura. A bidimensionalidade pode ser facilmente desenhada
em uma folha de papel real ou com recursos virtuais. Ao traçar um lápis
para cima ou para baixo e movimentar em direções opostas (direita
e esquerda), é possível criar o famoso homem-palito, personagens,
cenários e até mesmo ilustrações, como no exemplo a seguir:
Figura 1 - Exemplo de desenho bidimensional trabalhado em pixel art
Fonte: chuckchee/iStock.com.
7
Desenhos em 2D podem compor uma série de ilustrações com estilos
diferenciados, como no caso da pixel art mostrada na Figura 1 ou
outras com o uso de técnicas variadas, por exemplo, tintas guache,
aquareláveis, hachura, caneta, arte digital, etc. Os desenhos que
compõem os jogos eletrônicos, por sua vez, podem compor todo o tipo
de gráfico desejado pelos criadores, uma vez em que ele fizer sentido à
temática abordada no game.
Além do 2D, temos o 3D, cuja dimensão extra seria a profundidade, ou
seja, a mesma realidade que vivemos atualmente. Embora a sonoridade
da palavra 2D faça a mente recordar automaticamente jogos que apenas
se movimentam para os lados, para cima e para baixo (como em jogos
de plataforma), existem vários modos de criar a tridimensionalidade
dentro das limitações da bidimensionalidade.
Pode-se simular o efeito de profundidade pelo efeito parallax (mais
detalhes em 4.2.2), criando um jogo em camadas, que é o caso,
por exemplo, de alguns jogos de corrida e plataforma. Em outros
casos, temos exemplos que utilizam recursos extras para projetar
profundidade, como em Star Fox (1993), para Super Nintendo
Entertainment System, e Super Mario World 2: Yoshi’s Island (1995).
Em uma terceira opção, pode-se reforçar a estética visual do
game agregando luzes e sombras nos contornos das formas e das
personagens. Por fim, outro exemplo seria apelar para máquinas com
capacidades monstruosas de processamento que criem renders em 3D
para videogames e filmes, que é o caso de Donkey Kong Country (1994),
também para Super Nintendo.
Embora a maioria dos jogos mencionados seja de tempos antigos,
compreende-se que a história dos games é o que constrói os conceitos
sobre os jogos da atualidade. Felizmente, hoje em dia, os novos game
designers não precisam preocupar-se com altos investimentos que as
8
grandes empresas faziam antigamente, pois estão munidos de bons
programas e aplicativos para criarem seus primeiros jogos em 2D.
Embora pareça que os jogos antigos sejam bidimensionais pela ausência
de tecnologia, comprovou-se que a limitação nunca foi um impeditivo
para buscar a inovação.
A seguir, você verá alguns conceitos que fundamentam a aplicabilidade
dos games.
2.2 Onde se aplicam
Criar um game nos leva a procurar o local onde ele será projetado para
ser jogado, ou seja, o videogame. Nos tempos modernos, não é preciso
utilizar somente um console para operar um jogo de videogame, pois
existem outros meios de reprodução dele.
Na obra de Santaella e Feitoza (2008), os autores classificam os
videogames como console, arcade e computadores. Dentro da categoria
consoles, podemos citar videogames de mesa e outros portáteis. Já os
arcades englobam fliperamas, máquinas que podem ser consideradas
retrô ou não necessariamente, uma vez em que existem várias casas de
jogos espalhadas pelo mundo com fliperamas bem trabalhados e atuais.
Por fim, jogos para computador podem ser os chamados PC games ou
até mesmo em versão para aparelho mobile.
Outra coisa a ser levada em consideração é a condição de que os
games e os meios de entretenimento estão em constante inovação.
Comparando os anos 1990 com os tempos modernos, antigamente
era preciso aguardar um determinado horário para assistir a um certo
programa de televisão que tinha horário fixo para ser transmitido.
Hoje em dia, evoluímos para os canais de streaming, que transmitem o
programa desejado no momento desejado. Com os games, acontece um
processo bem similar.
9
Além dos emuladores de jogos antigos para computador e mobile, há,
hoje, uma boa variedade de lojas virtuais, como o caso da Steam (da
Valve, lançada em 2003), da Origin (lançada em 2009), entre outras.
Embora estas lojas não funcionem exatamente como um canal por
assinatura de jogos, mas, sim, como uma comunidade, na qual é possível
adicionar novos amigos para comprar e jogar seusnão fornecem são as concessões. A Unreal está disposta a apoiar
desenvolvedores de jogos independentes com dinheiro, para ajudar a
financiar seus jogos. Além disso, ela possui muita documentação, guias e
vídeos em toda a internet (SOLOGAMESTUDIOS, 2020).
Segue a relação de prós e contras:
Prós:
• Conhecido pelo desenvolvimento de jogos AAA.
• Apoiado por Fortnite.
• Disponibilidade de diversas ferramentas.
• Loja de ativos.
• Tecnologia de renderização eficiente.
52
Contras:
• Necessita de uma cópia licenciada para trabalhar.
• Não é amigável para iniciantes.
• Mais adequado para uma equipe de desenvolvedores.
1.3 RPG Maker
RPG Maker pode ser uma boa escolha para o desenvolvimento de
um jogo de RPG 2D, pois possui uma curva de aprendizado fácil
(SOLOGAMESTUDIOS, 2020).
Seguem alguns pontos positivos e negativos da ferramenta:
Prós:
• Muito amigável para iniciantes.
• Mecanismo focado em RPG.
Contras:
• A importação de gráficos é limitada.
• Não é uma ferramenta gratuita (outros mecanismos gratuitos
podem fazer o mesmo).
1.4 OGRE Engine
A Game Engine OGRE ainda é utilizada, porém muito menos do que as
demais ferramentas. Apresenta um mecanismo de programação de
baixo nível, o que significa que exige o conhecimento mais aprofundado
do desenvolvedor – isso ocorre porque OGRE é, principalmente, um
53
mecanismo de renderização; não é um motor de jogo completo, como as
demais opções do mercado (SOLOGAMESTUDIOS, 2020).
Seguem alguns pontos positivos e negativos:
Prós:
• Muito flexível.
• Programação de baixo nível.
Contras:
• Curva de aprendizado elevada (difícil utilização).
• Pouco material de referência (documentação, tutorial, fórum/
comunidade).
1.5 Godot
A game engine Godot é outra ótima opção para o desenvolvimento de
jogos 2D e 3D, pois é muito flexível. É uma ferramenta open source
(código aberto), ou seja, o desenvolvedor possui todos os direitos
sobre ele e não precisará pagar nenhuma taxa/royalties no futuro.
Esta é uma ótima escolha para um desenvolvedor de jogos indie, mas
é preciso levar em consideração que não há tanta documentação,
guias e vídeos como as game engine Unity ou Unreal, pois a
comunidade é muito menor (SOLOGAMESTUDIOS, 2020).
Segue uma relação dos pontos positivos e negativos da ferramenta:
Prós:
• Muito flexível.
54
• Ótima maneira de entender e ver seu trabalho organizado.
• Código aberto.
• Licença MIT (o que significa que não será necessário pagar
qualquer tipo de taxa posteriormente).
• Depurador de alto nível.
• O motor é desenvolvido de forma muito ativa.
Contras:
• Não é amigável para iniciantes.
• Possui uma pequena comunidade de desenvolvedores.
• A documentação não é adequada (bem como os materiais
disponíveis).
1.6 Game Maker Studio
Este motor é excelente para a criação de jogos 2D, pois é o seu
foco principal. É fácil de aprender, além disso, está tudo codificado
em Javascript. No entanto, esse mecanismo não é de uso livre. As
taxas de licença podem ficar muito caras, pois é necessário pagar
por uma licença para cada plataforma na qual deseja desenvolver
(SOLOGAMESTUDIOS, 2020).
Segue uma relação dos pontos positivos e negativos da ferramenta:
Prós:
• Plataforma para desenvolvimento de jogos 2D.
55
• Muito flexível, capaz de exportar jogos para quase todas as
plataformas.
• Interface amigável e simples.
Contras:
• Custo de utilização.
• Comunidade pequena em comparação com as demais game engine
(por exemplo, Unity e Unreal).
2. Otimização de projeto
A otimização é um componente-chave do desenvolvimento em GPUs
(Graphics Processing Unit, ou Unidade de Processamento Gráfico),
para que os desenvolvedores possam executar aplicativos e jogos nos
dispositivos de maneira eficiente. Para aplicativos gráficos, a otimização
geralmente significa modificar um aplicativo para torná-lo mais
eficiente. Uma taxa de quadros baixa pode tornar os aplicativos de jogos
insatisfatórios para o usuário final. Várias práticas de otimização podem
melhorar os aplicativos, o que, por sua vez, torna o uso do aplicativo
uma experiência melhor e mais suave (ARM, 2021).
De acordo com Sloka-Frey (2018), para muitos desenvolvedores iniciantes,
a otimização de código é algo que deve ser olhado apenas no final do
projeto. Ele é preterido em favor de motores ou estruturas, ou pode ser
considerado uma técnica avançada, que está fora de alcance. No entanto,
existem métodos de otimização que podem ser utilizados de maneira
objetiva e simples, permitindo que o jogo opere com mais eficiência.
Os exemplos a seguir são de vários tipos de otimizações:
• Aumentar a taxa de quadros.
56
• Tornar o conteúdo mais detalhado.
• Reduzir o consumo de energia.
• Usar menos largura de banda de memória.
• Usar menos ciclos de clock por quadro.
• Reduzir o consumo de memória.
• Reduzir o tamanho do download.
A partir desse contexto, na Figura 3, é possível observar uma
representação do processo de otimização de projetos.
Figura 3 - Representação do processo de otimização de projetos
Fonte: ipopba/iStock.com.
Conforme Thoman (2016), as predefinições gráficas – o comum “baixo”,
“médio”, “alto”, “muito alto”, “ultra” – quase nunca são diretamente
comparáveis entre os jogos, mas são muito importantes, pois orientam
os jogadores sobre a forma como o projeto será executado em seu
57
dispositivo (equipamento). Um caminho adequado é utilizar o recurso
de predefinição gráfica com a opção “média”, com base nas restrições e
nas expectativas de hardware, e todo design e arte seguem esse padrão.
Perto do lançamento, a equipe técnica deriva as configurações para cada
predefinição, tentando equilibrar os recursos gráficos e o desempenho
em cada nível. É interessante categorizar cada opção de desempenho
como limite da CPU, da GPU ou da capacidade da memória, em vez de
deixar que o usuário descubra isso.
De acordo com Defold Foundation (OPTIMIZING..., 2021), é importante
entender as restrições técnicas da(s) plataforma(s) em que o jogo
deve ser executado e otimizar o jogo para a(s) plataforma(s) durante o
desenvolvimento do jogo. Existem vários aspectos a considerar, como:
• Tamanho do aplicativo.
• Velocidade.
• Uso de memória.
• Uso de bateria.
• Otimizar o tamanho do aplicativo.
Algumas plataformas de destino e canais de distribuição possuem
limitações no tamanho do aplicativo, por exemplo, a Apple e o Google
definiram limites de tamanho de aplicativo ao fazer download em redes
móveis (em oposição ao download por Wi-Fi). Em 2019, esses limites
eram de 100 MB para o Google Play e 150 MB para a Apple App Store. O
Facebook possui uma recomendação de que um Facebook Instant Game
deve iniciar em menos de cinco segundos e, de preferência, em menos
de três segundos. O que isso significa para o tamanho real do aplicativo
não está claramente definido, mas estamos falando de um tamanho na
faixa de até 20 MB (OPTIMIZING..., 2021).
58
O processo da otimização de código (no significado prático da ciência da
computação) é desafiador. Segundo Thoman (2016), o pior pesadelo da
otimização é olhar para a saída do profiler e ver a função principal ocupar
3% do tempo. O profiler ajuda a identificar as partes do sistema que mais
contribuem para o problema de desempenho e mostra onde concentrar os
nossos esforços. Quando a função superior leva 3% do tempo, isso significa
que, mesmo que você consiga melhorá-lo para ser duas vezes mais rápido
– o que pode exigir muito esforço –, o programa completo só vai acelerar
em 1,5%. Como essas situações são comuns em grandes bases de código
escritas de forma competente, otimizá-las ainda mais se torna uma tarefa
gradual e trabalhosa. A otimização não se trata apenas de gráficos.
Thoman (2016) apresenta que a otimização também significa melhorar
decisões ruins com os controles, o fluxo do jogo e a IU, ajustar o sistema
de salvar/carregar, melhorar o código de rede e até consertar antigos
bugs do título original.
As otimizações de GPU e gráficospodem se tornar muito complicadas e
profundas, então há muito mais que você pode otimizar. Por exemplo,
as operações síncronas são executadas uma após a outra, enquanto
as operações assíncronas podem ser executadas simultaneamente.
A maioria dos programas é executada de forma síncrona. Os
programas assíncronos utilizam threads para iniciar uma nova tarefa
e, ainda, permitem que o código de chamada continue em execução.
A programação assíncrona pode ser difícil de gerenciar, mas pode
melhorar muito o desempenho em certas tarefas. As tarefas precisam
ser capazes de paralelização, por exemplo, renderização, IA inimiga,
pathfinding, etc. (LOWREY, 2017).
Lowrey (2017) afirma que as chamadas de rede devem ser usadas de
forma assíncrona. Mais comumente, os desenvolvedores esperarão
para usar chamadas de rede até que o usuário clique em algo e, em
seguida, farão o usuário esperar o retorno. Busque esses dados com
antecedência e não faça os usuários esperarem.
59
Não é incomum para desenvolvedores independentes emularem os
métodos de otimização de empresas maiores. Não é necessariamente
uma ação ruim, mas se esforçar para otimizar o jogo além do ponto
de retorno útil é uma tarefa inviável. Uma tática inteligente para
acompanhar a eficácia das otimizações é segmentar o público-alvo e
observar os tipos de especificações de suas máquinas. Comparar o jogo
com os computadores e consoles que os jogadores em potencial estão
usando ajudará a manter um equilíbrio (SLOKA-FREY, 2018).
Referências
ARM. Optimization on Arm Mali GPUs. ARM Developer, 2021. Disponível em:
https://developer.arm.com/tools-and-software/graphics-and-gaming/optimization.
Acesso em: 20 set. 2021.
BARCZAK, A.; WOŹNIAK, H. Comparative Study on Game Engines. Journals of
Siedlce University of Natural Sciences and Humanities, v, 23, n. 1-2, 2020.
Disponível em: https://repozytorium.uph.edu.pl/bitstream/handle/11331/3488/
Barczak.A.Wozniak.H.Comparative_Study_on_Game_Engines.pdf?sequence=1.
Acesso em: 20 set. 2021.
GREGORY J. Game Engine Architecture. 2. ed. Wellesley, Massachusetts:
Taylor&Francis Ltda., 2014.
LOWREY, J. Basic Game Optimization Techniques. JRL, 2017. Disponível em: https://
jarlowrey.com/blog/game-optimizations. Acesso em: 20 set. 2021.
OPTIMIZING a Defold game. Defold Foundation, 2021. Disponível em: https://
defold.com/manuals/optimization/. Acesso em: 22 set. 2021.
SLOKA-FREY, K. Code Optimizations for Game Development: Basic Structures and
Mindsets. Envato Tuts+, 2018. Disponível em: https://gamedevelopment.tutsplus.
com/tutorials/code-optimizations-for-game-development-basic-structures-and-
mindsets—cms-30760. Acesso em: 20 Set. 2021.
SOLOGAMESTUDIOS. Comparison of Game Engines 2020. IndieGameDev, 2020.
Disponível em: https://indiegamedev.net/2020/02/11/comparison-of-game-
engines-2020/. Acesso em: 20 set. 2021.
THOMAN, P. What ‘optimization’ really means in games. PC GAMER, 2016.
Disponível em: https://www.pcgamer.com/what-optimization-really-means-in-
games/3/. Acesso em: 20 set. 2021.
UNITY TECHNOLOGIES. Unity Personal. Unity Store, 2021. Disponível em: https://
store.unity.com/pt/products/unity-personal. Acesso em: 7 out. 2021.
https://developer.arm.com/tools-and-software/graphics-and-gaming/optimization
https://repozytorium.uph.edu.pl/bitstream/handle/11331/3488/Barczak.A.Wozniak.H.Comparative_Study_on_Game_Engines.pdf?sequence=1
https://repozytorium.uph.edu.pl/bitstream/handle/11331/3488/Barczak.A.Wozniak.H.Comparative_Study_on_Game_Engines.pdf?sequence=1
https://jarlowrey.com/blog/game-optimizations
https://jarlowrey.com/blog/game-optimizations
https://defold.com/manuals/optimization/
https://defold.com/manuals/optimization/
https://gamedevelopment.tutsplus.com/tutorials/code-optimizations-for-game-development-basic-structures-and-mindsets—cms-30760
https://gamedevelopment.tutsplus.com/tutorials/code-optimizations-for-game-development-basic-structures-and-mindsets—cms-30760
https://gamedevelopment.tutsplus.com/tutorials/code-optimizations-for-game-development-basic-structures-and-mindsets—cms-30760
https://indiegamedev.net/2020/02/11/comparison-of-game-engines-2020/
https://indiegamedev.net/2020/02/11/comparison-of-game-engines-2020/
https://www.pcgamer.com/what-optimization-really-means-in-games/3/
https://www.pcgamer.com/what-optimization-really-means-in-games/3/
https://store.unity.com/pt/products/unity-personal
https://store.unity.com/pt/products/unity-personal
60
BONS ESTUDOS!
Sumário
Games 2D: conceitos e processos
Objetivos
1. Um panorama geral
2. Games 2D
3. Conceitos e abordagens de criação
4. Fundamentos de criação
Referências
Interface/GUI (manipulação de sprites) para jogos 2D
Objetivos
1. Introdução à pixel art e aos sprites
2. Graphical User Interfaces (GUI) para jogos 2D
3. Papel da UI (User Interface) em jogos
4. Métodos de usabilidade usados na indústria de jogos
Referências
Programação estruturada e orientada a objetos
Objetivos
1. Programação estruturada
2. Programação orientada a objetos
3. Programação de jogos 2D
Referências
Desenvolvimento de um jogo digital 2D a partir de uma game engine
Objetivos
1. Game engine 2D
2. Otimização de projeto
Referênciasgames on-line.
Portanto, os desenvolvedores de um jogo a ser produzido podem definir
as plataformas dele no momento de sua criação, ou elaborar esse game
para uma plataforma específica, criando, assim, um jogo exclusivo. A
seguir, você conferirá a próxima etapa do processo de criação de um
jogo.
3. Conceitos e abordagens de criação
Muitas pessoas estão entrando neste universo, a fim de “criar um
jogo para fazer dinheiro”. Sendo gamers (jogadores) ou não, elas estão
buscando isso para aumentarem suas fontes de renda. Embora criar
qualquer jogo eletrônico seja um processo relativamente simples, a
criação de um bom jogo requer mais empenho e esforço. Isso nos leva a
questionar alguns conceitos que serão debatidos a seguir.
Segundo Rogers (2012), a popularização dos computadores de mesa nos
anos 1970 criou uma geração inteira de programadores caseiros. Não
muito diferente nos tempos modernos, quando temos outra enorme
amplitude de programadores para jogos de celulares, uma vez em que
criar jogos para mobile é muito mais barato e rápido.
Se jogos eletrônicos são entretenimento, então compreende-se que todo
jogo eletrônico deve ser divertido para funcionar e, portanto, faturar. No
entanto, todos sabemos que isso depende muito do meio e do fim a que
esse jogo ou a desenvolvedora se destinará.
10
Embora a teoria seja simples, na prática, temos vários cenários de
programadores em formação e outros que aprenderam com a prática
e a curiosidade, como também designers gráficos que aprenderam
sozinhos ou que cursaram desenho para dominar a arte. Por fim,
nenhuma dessas alternativas está correta ou errada, apenas é preciso
buscar criar bons jogos para não ser classificado como algo ruim. Isso
nos leva a relembrar uma frase do criador da franquia Super Mario Bros.:
“um jogo atrasado tem chances de ser avaliado como bom, mas um jogo
feito com pressa é eternamente ruim” (PARKIN, 2012, [s. p.]).
Rogers (2012) deixa bem claro em sua obra que o criador deve se
preocupar com duas coisas essenciais:
• Qual é a idade do público do game que você está criando?
• Para qual tipo de jogador você está desenvolvendo o seu game:
para o jogador casual ou para o jogador hardcore?
Conseguir decodificar o que você quer criar e para quem o auxiliará a
criar a linguagem visual adequada para esse público-alvo. É como fazer
um logo para uma nova marca, ou comprar roupas para uma pessoa.
Antes de fazer uma aquisição de vestimenta, é preciso saber a idade e o
porte dessa pessoa, correto? Ou daria para vestir roupa infantil tamanho
1 em um adulto tamanho XG?
Da mesma forma, a definição do público-alvo de seu game aumentará
as chances de ser bem aceito, pois, assim, o desenvolvedor poderá
trabalhar os gráficos e as imagens apropriados para a leitura visual
desse segmento ser bem aceita.
Em termos de psique, ou seja, o modo como os games afetam a mente
humana e os efeitos colaterais que isso gera, pode alternar entre duas
variáveis. A primeira consiste no propósito pelo qual o game foi criado.
Algumas pessoas já projetam um jogo, um filme, uma animação ou
uma história qualquer com o intuito de causar, repassar, ensinar algo. A
11
maneira que a trama é planejada visa trabalhar todo um envolvimento
da história para com o jogador, a fim de causar um impacto maior.
Já a outra variável é termos um game que foi desenvolvido a partir de
ideias e esforços e, por sua vez, acabou provocando ou não reações
adversas nos jogadores. Outro fator não citado aqui e que também
implica a psique consiste no repertório pessoal de cada pessoa, de
cada jogador. Este repertório é composto pelas memórias de sua
criação, de sua infância, adolescência, vida adulta, conceitos culturais,
maiores segredos, coisas vistas na vida que foram marcantes ou não,
meio de falar, sons favoritos, cheiros, etc. Enfim, tudo o que compõe as
lembranças e, consequentemente, o ser humano.
4. Fundamentos de criação
“O desenvolvimento de games é um processo estimulante – não há nada
mais satisfatório que criar uma experiência interativa de jogo que pode
oferecer horas de divertimento para o jogador.” (SCHUYTEMA, 2016, p.
17). Criar um jogo é como revelar um novo universo a uma pessoa que
terá o controle sobre as decisões dentro de um conjunto de regras. E
é justamente a expectativa gerada por essas decisões que tornam a
criação do jogo tão emocionante.
Nesta seção, você verá alguns conceitos que compõem a criação do jogo,
como o roteiro, a arte, o som e a câmera.
4.1 Roteiro
Assim como nos filmes e nas peças teatrais, para compor um game,
precisamos de um roteiro. Neste documento, o designer trabalhará a
trama do jogo. Segundo Schuytema (2016, p. 14), este mesmo designer
pode ser chamado de escritor ou designer de história. Todos os
12
conteúdos e detalhes do game devem ser adicionados neste arquivo:
enredos, histórias, diálogos entre personagens, gameplay, narrativas,
momentos de cada som e efeitos sonoros, etc. Ou seja, é aqui que toda
a história será construída.
Com o roteiro em mãos, o restante da equipe poderá proceder para
as demais criações: personagens, renders, programações e linguagem,
mapeamentos, gravação de som, etc. É possível também ter mais que
somente um roteiro.
4.2 Arte
A arte de um jogo é o que compõe toda a comunicação e linguagem
visual dele. Ela pode ser composta por diferentes tipos de arte. Pode-
se criar todos os gráficos do game com a mesma arte, ou cada item
do jogo de uma maneira. Por exemplo, podemos ter personagens
tridimensionais com cenários em pixel art, e os ícones da barra de
vidas e outros detalhes de pontuação em render tridimensional.
Obviamente, é preciso combinar o tipo de arte a ser trabalhada, para
que ornem e criem uma linguagem em comum, e não apenas feitos
puramente ao acaso.
Antigamente, a arte da capa do jogo era uma ilustração do assunto
tratado no game, mas diferente dos gráficos compostos nele, com
exceção do jogo Donkey Kong Country (1994), no qual tanto a capa quanto
os gráficos do jogo foram criados pelo mesmo processador.
Na construção de um cenário por camadas, a regra é clara: a ordem
dos fatores altera o produto. Em uma arte para jogo bidimensional,
o esquema é trabalhar o visual por camadas, em que a personagem
sempre estará nas camadas da frente, junto a elementos importantes,
13
como marcados de vidas, totalidade de pontuação atingida no estágio,
barra de HP ou vida, etc.
Já nas camadas por trás desses elementos, teremos cenários e outros
objetos menos importantes que os essenciais, porém não menos
significativos, uma vez que todo detalhe na estética do game pode fazer
a diferença.
Em outras palavras, as camadas trabalham por hierarquia, tal qual as
mesmas camadas utilizadas para a construção artística no programa
Adobe Photoshop. Na Figura 2, confira um painel de camadas.
Figura 2 - Camadas de cima se sobressaem às camadas de baixo.
Fonte: elaborada pela autora.
Na próxima figura, temos um exemplo sobre uma game art 2D
organizada em quatro camadas. Na primeira camada, temos os ícones
que representam a vida da personagem; na segunda camada, a própria
personagem; na terceira camada, a grama na qual a personagem está
pisando; na quarta camada, o cenário azul.
14
Figura 3 - Arte de game 2D
Fonte: robuart/iStock.com.
4.2.1 Sprites
Sprites são sequências de cenas de imagens de um determinado objeto
animado do jogo. Muito mais presente em jogos 2D e em outros games
antigos, eles são feitos um a um e, depois, organizados em uma única
imagem, na qual a programação realizará a leitura de combinação dos
botões do controlador para realizar a troca do sprite. Confira, na imagem
a seguir, um exemplo.
Figura 4 - Sprites de uma nave espacial com gráficos em estilo
Sega Genesis
Fonte: ChrisGorgio/iStock.com.
15
4.2.2 Cenário
Existem várias formas de criar um cenário para jogo 2D. Em um jogo 2D
de RPG, por exemplo, o cenário fica esticado por todo o mapa da tela,
como se as personagens estivessemandando sobre o mapa-múndi.
Em outros casos, temos o chamado efeito parallax scrolling (rolagem em
paralaxe – Figura 5), em que o cenário é separado por várias camadas,
e cada uma se movimenta em uma velocidade específica, para dar a
mesma impressão que viajar de carro: ao olhar para o chão, o cenário
passa rapidamente, ao contrário da paisagem, a qual, quanto mais
distante do carro, mais lentamente ela passa.
Figura 5 - Exemplo de cenário em parallax
Fonte: mrdeymons/iStock.com.
4.3 Detalhes gráficos e ícones
Primeiramente, é importante reconhecer que um desenho pode
comportar vários tipos de artes, camadas e estilos gráficos. Nem tudo
se resume a apenas mais um desenho. Todo e qualquer detalhe – ou a
soma deles – pode compor um desenho mais robusto e enriquecedor
para o olhar.
16
Além da criação de desenhos, renders e ilustrações de cada elemento
do game, é preciso atentar-se também aos detalhes visuais que
enriquecem a obra, como texturas, ajuste de cores (saturação, matiz,
etc.), transparências, filtros, luzes e sombras e suas projeções no plano do
game, iluminação, posicionamento dos elementos no plano do game, etc.
Outro recurso gráfico presente na tela do jogo são os heads-up displays.
Os HUDs, assim batizados por causa das aeronaves modernas, são os
ícones informativos destacados na tela do jogo. Barra de vidas, mira,
pontuação atingida, munição disponível, inventário, placar e qualquer
outro elemento que possa ser alterado.
Figura 6 - Exemplo de ilustração com HUDs destacados por
numeração
Fonte: Rogers (2012, p. 191).
4.4 Câmera
Tão importante quanto a game art de um game é o estilo da câmera do
jogo, e este pode influenciar quase que completamente se um jogo terá
um bom rating (colocação, pontuação) ou não. Embora para um jogo em
2D a câmera possa não parecer tão relevante, é importante determinar
o distanciamento dela em comparação à personagem e ao que está ao
alcance do olhar do jogador.
17
A posição em que a câmera se encontrar poderá conter mistérios sobre
o estágio em que o jogador se situa, tornando o jogo mais curioso e
interessante. Na figura a seguir, você confere um exemplo sobre o
assunto.
Figura 7 - Alcance da câmera
Fonte: Rogers (2012, p. 119).
Existem várias determinantes que influenciam o tipo de câmera do
jogador, a começar pelo tipo de jogo. Jogos de atirador costumam ser
em primeira pessoa, portanto o nome first person shooter. Este costuma
ter a câmera no ângulo de visão da personagem, então o usuário
precisará percorrer o cenário como se estivesse encarnado na própria
personagem.
Já os jogos de plataforma, como os da franquia Mario e The Legend of
Zelda, contam com câmeras em terceira pessoa, nas quais vemos a
personagem de longe e podemos movimentá-la livremente, mas dentro
das regras do jogo, é claro.
Portanto, o tipo da câmera escolhida pode ser determinado durante o
processo de roteirização do jogo ou modificado à medida que a game art
é trabalhada.
18
4.5 Som
O som não é o último elemento que compõe o game design, mas temos
também a sonoplastia com a trilha sonora que compõe um jogo. Efeitos
sonoros, músicas em segundo plano, temas de personagens, falas e
dublagens de narração de personagens, ajustes de timbre, graves e
agudos e remixes.
O primeiro game de um novo desenvolvedor de jogos tende a comportar
músicas existentes ou até mesmo algum novo som criado por ele
mesmo e por sua equipe.
Para encerrar, o som deve acompanhar exatamente cada momento dos
elementos gráficos e da trama do jogo, uma vez em que a música tem
uma altíssima capacidade de promover as maiores e melhores emoções
e experiências dentro da imersão no game.
Referências
PARKIN, S. Shigeru Miyamoto: A rushed game is forever bad. The Guardian, 2012.
Disponível em: https://www.theguardian.com/technology/gamesblog/2012/apr/27/
shigeru-miyamoto-rushed-game-forever-bad. Acesso em: 13 out. 2021.
RABIN, S. Introdução ao desenvolvimento de games: entendendo o universo
dos jogos. São Paulo, SP: Cengage Learning, 2011. Disponível em: https://integrada.
minhabiblioteca.com.br/reader/books/9788522113231/pageid/2. Acesso em: 19 set.
2021.
ROGERS, S. Level UP: um guia para o design de grandes jogos. São Paulo,
SP: Blucher, 2012. Disponível em: https://plataforma.bvirtual.com.br/Leitor/
Publicacao/177891/pdf/0. Acesso em: 16 set. 2021.
SANTAELLA, L.; FEITOZA, M. Mapa do Jogo: a diversidade cultural dos games. São
Paulo, SP: Cengage Learning, 2008.
SCHUYTEMA, P. Design de games: uma abordagem prática. São Paulo, SP: Cengage
Learning, 2016. Disponível em: https://integrada.minhabiblioteca.com.br/reader/
books/9788522127269/pageid/2. Acesso em: 19 set. 2021.
https://www.theguardian.com/technology/gamesblog/2012/apr/27/shigeru-miyamoto-rushed-game-forever-bad
https://www.theguardian.com/technology/gamesblog/2012/apr/27/shigeru-miyamoto-rushed-game-forever-bad
https://integrada.minhabiblioteca.com.br/reader/books/9788522113231/pageid/2
https://integrada.minhabiblioteca.com.br/reader/books/9788522113231/pageid/2
https://plataforma.bvirtual.com.br/Leitor/Publicacao/177891/pdf/0
https://plataforma.bvirtual.com.br/Leitor/Publicacao/177891/pdf/0
https://integrada.minhabiblioteca.com.br/reader/books/9788522127269/pageid/2
https://integrada.minhabiblioteca.com.br/reader/books/9788522127269/pageid/2
19
Interface/GUI (manipulação de
sprites) para jogos 2D
Autoria: Marcelo Henrique dos Santos
Leitura crítica: Felipe Orsini Martinelli
Objetivos
• Compreender o processo de criação de pixel art e
sprites no desenvolvimento de jogos 2D.
• Compreender a criação e o desenvolvimento da
Graphical User Interfaces (GUI) para jogos 2D.
• Refletir sobre os métodos de usabilidade usados na
indústria de jogos.
20
1. Introdução à pixel art e aos sprites
Os sprites 2D são os blocos de construção visuais de quase todos os
jogos 2D. Eles são imagens ou animações bidimensionais sobrepostas
em uma cena. São também os elementos não estáticos dentro de um
jogo 2D, movendo-se independentemente do plano de fundo.
Frequentemente usados para representar personagens controlados
pelo jogador, adereços, unidades inimigas, etc., os sprites podem
ser compostos de várias peças ou sprites menores. Além disso, eles
também são usados no desenvolvimento web (como os sprites CSS que
combinam várias imagens pequenas em uma folha para melhorar o
tempo de carregamento da página).
Sprites são animações, como personagens ou objetos que podem ser
usados no desenvolvimento de jogos. Eles podem ser feitos de qualquer
fonte de imagem imaginável e animado de várias maneiras, e são um
dos visuais mais usado para o desenvolvimento de jogos 2D.
O pixel art é uma forma de arte digital, em que a cor é aplicada a
pixels individuais para criar uma imagem. O termo foi publicado pela
primeira vez em 1982, embora o conceito já existisse. O pixel art é salvo
em formatos de arquivo que usam compressão de dados sem perdas,
como o formato GIF ou PNG. A arte de pixel pode ser categorizada em
duas formas principais: isométrica e não isométrica. A arte de pixel
isométrica possui uma aparência tridimensional uniforme, embora
a imagem ainda seja uma forma 2D. A arte de pixel não isométrica
apresenta um lado de um objeto, como a parte superior ou a frente
(INTRODUCTION..., 2020).
A partir desse contexto, na Figura 1, é possível observar uma
representação do processo de desenvolvimento de uma imagem em
pixel art.
21
Figura 1 - Representação do processo de criação de imagens em
pixel art
Fonte: Kaleb da Silva Pereira/iStock.com.
De acordo com AHMED (2021), a arte de pixel de 8 e 16 bits possui
charme e uma estética elegante. Enquanto alguns jogos de pixel art
modernos farão os jogadores se sentirem nostálgicos por causa
de seu estilo retrô, alguns expandem o que a pixel art pode ser de
novas maneiras. Os jogos pixel provam repetidamente que visuais de
aparência realista não são necessários para transmitir mensagens,
histórias, atmosfera e emoções.2. Graphical User Interfaces (GUI) para jogos 2D
No passado, os sistemas de computador utilizavam um texto básico
para executar os desejos do usuário. No entanto, era difícil até mesmo
executar comandos simples. Com a invenção da interface gráfica do
usuário (GUI), os computadores tornaram-se mais fáceis de usar. A GUI é
um meio de permitir a interação do usuário com dispositivos eletrônicos,
como computadores ou dispositivos portáteis. As interfaces gráficas são
conhecidas como interfaces gráficas do usuário (Graphical User Interfaces).
22
Normalmente, esperamos que esses tipos de interfaces estejam
disponíveis em ambientes multitarefas ou em aplicativos de software que
envolvem um grau considerável de complexidade (ABDO, 2016).
A partir desse contexto, na Figura 2, é possível observar uma
representação do processo de desenvolvimento de uma GUI.
Figura 2 - Representação do processo de criação de uma GUI
Fonte: VikiVector/iStock.com.
Consequentemente, a etapa mais importante antes de se construir
qualquer interface é conhecer os usuários/jogadores. Eles e seus desejos
são a principal razão por trás da construção de qualquer projeto,
por exemplo, quando um usuário visita um site que consiga atender
às suas necessidades e aos seus desejos, ele fica motivado a visitar
o site novamente. Projetar uma boa interface envolve mais do que
programação; uma GUI de sucesso depende do processo de conseguir
compreender por que os usuários gostam, não gostam ou preferem um
site específico. Os designers da interface do usuário devem ser focados
nas características do usuário para ajudá-lo a atingir seus objetivos
(ABDO, 2016).
23
A primeira impressão dos usuários de um site, aplicativo ou jogo
também pode ser determinada pelo tempo de carregamento do
projeto. A consistência na concepção de projetos digitais é um aspecto
muito significativo, pois isso envolve ampliar a satisfação do usuário
e o conhecimento dele sobre o projeto. Os usuários lidam facilmente
com um projeto que é projetado de forma consistente a partir de uma
linguística e de pontos de vista visuais (ABDO, 2016).
A consistência da GUI significa que ela deve ser exibida de maneira
adequada em todos os dispositivos. Além disso, a consistência significa
como os elementos da GUI são organizados para apoiar os objetivos do
projeto. Outra característica de um bom projeto digital é o fornecimento
de boas ferramentas que facilitam a navegação eficaz pela informação.
Um bom designer apresenta uma interface de usuário apropriada que
atende aos desejos do usuário com apenas alguns cliques e/ou toques.
A navegação também pode ser adicionada à lista de recursos de uma
boa interface. Um projeto digital eficaz possui ferramentas eficazes para
conectar uma enorme quantidade de informações. Por fim, é de extrema
importância que o usuário/jogador não encontre nenhuma dificuldade
quando eles navegam o projeto (ABDO, 2016).
3. Papel da UI (User Interface) em jogos
Um videogame é considerado, principalmente, uma plataforma criativa
para narrativa interativa. Mesmo nos jogos mais básicos, é necessário
interagir com um menu de navegação para iniciar, carregar ou salvar
um jogo. A UI de um jogo deve ser definida pela complexidade dele. Se
a jogabilidade geral for simples, interfaces complexas, provavelmente,
desorientarão o usuário. A hierarquia visual bem definida é um fator-
chave para uma boa UI. As informações mais importantes devem estar
sempre disponíveis: a UI do jogo deve, na medida do possível, suportar a
imersão (NÉMETHI, 2021).
24
Uma ótima UI é projetada com o usuário em mente e considera a forma
como os humanos trabalham e pensam ao interagir com o dispositivo.
A UI é uma interação de mão dupla entre o computador e o usuário, em
que as informações são repassadas pelo usuário e pelo computador
(APPLE, 2012).
A UI pode desempenhar um papel muito importante na satisfação do
jogador, pois uma interface confusa, difícil e frustrante pode arruinar
um jogo. Caso esta seja a primeira coisa que o jogador experimenta ao
entrar no jogo, é provável que ele desistirá do projeto (FEDEROFF, 2002).
A UI deve permitir que o jogador se comunique com o software do jogo.
Uma interface do usuário do jogo pode auxiliar a tornar a experiência
mais divertida. Federoff (2002) descreve a interface do usuário do
jogo como sendo instrumentos de exibição visual na tela e quaisquer
dispositivos controladores físicos usados para controlar os jogos.
A interface visual impacta no jogo, pois permite aos jogadores obterem
certas informações para ajudá-los a avançar. Permite também que vejam
visualmente o impacto de suas ações feitas no jogo. HUD (Heads-Up
Display) é uma ferramenta inestimável, usada para informar o jogador
sobre elementos importantes durante o jogo. Ele é feito de forma
separada, com elementos que indicam várias mensagens para o jogador,
como: estado de saúde dele, onde ele está classificado em indicadores
de jogo e navegação, para que saiba para onde ir (FEDEROFF, 2002).
O HUD não é exclusivo para jogos. Sua primeira aplicação foi em
aeronaves modernas, com o qual os pilotos de caça podiam verificar
informações importantes no próprio para-brisa, causando uma redução
na distração durante o voo. Uma versão comercializada apareceu
também nos carros, em que os estados mais importantes do veículo
são projetados no para-brisa para que os motoristas possam acessar
essas informações sem tirar os olhos da estrada. O objetivo do HUD nos
jogos é o mesmo: permitir que o jogador observe algumas informações
25
e status importantes sem a mínima obstrução da jogabilidade. O estado
de saúde ou a direção do fogo inimigo é algo que devemos apresentar
para os usuários/jogadores (NÉMETHI, 2021).
A partir desse contexto, na Figura 3, é possível observar uma
representação do processo de desenvolvimento do HUD.
Figura 3 - Representação do processo de criação de um HUD
Fonte: beresnev/iStock.com.
HUD é um tipo de informação permanente fornecida ao jogador no
jogo, que contém dados sobre o estado de saúde, armas disponíveis,
armaduras, recursos, etc., que dependem do gênero do jogo. HUD é,
normalmente, uma interface transparente sobrepondo um jogo. Ela
comunica informações importantes ao jogador sem que ele tenha que
desviar o olhar do jogo ou abrir um menu. Idealmente, os jogadores
devem ser capazes de personalizar o tamanho e o posicionamento de
todos os elementos do HUD de um jogo de acordo com sua preferência.
Isso não apenas ajuda os jogadores mais experientes a ajustar o projeto,
26
como também os jogadores com baixa visão ou com um campo de visão
estreito a visualizarem claramente o que está acontecendo.
O desenvolvimento de um HUD personalizável pelo usuário pode
consumir muito tempo para alguns desenvolvedores de jogos,
então fornecer uma opção para dimensionar todo o HUD é uma boa
alternativa. Se isso não for possível, uma possibilidade seria criar
um design inteligente para manipular os elementos da interface. Por
exemplo, o estilo dos ponteiros e cursores do jogo é uma oportunidade
para refletir o estilo do jogo na UI, bem como mostrar ao jogador quais
ações ele pode realizar.
O uso do HUD para ensinar os jogadores como usar a interface de um
jogo é amplamente comum no mundo dos jogos. Nesse sentido, o HUD
possui uma função informativa.
A animação do HUD é, em sua maior parte, um componente do
desenvolvimento de videogames. É comumente usada para fornecer
informações (incluindo informações extras) e instruções aos usuários
durante o jogo. O HUD é frequentemente colocado na tela, uma vez
que o jogador está sempre na mesma posição, e representa aspectos
específicos do jogo. Por exemplo, se o jogador tem uma barra cheia de
vida, o HUD a indicará, facilitando a comunicação com o usuário.
Mesmo que o HUD esteja sempre visível na tela, ele deve permanecer
despercebido. Alguns jogos oferecem a opção de ocultá-lo, enquanto
outros permitem escurecê-lo ou torná-lotransparente.
Os designers de HUD têm a tarefa de produzir animações de HUD que
sejam funcionais e instrutivas, em vez de obstrutivas. Alguns aspectos
estão frequentemente presentes nas animações do HUD que os tornam
mais bem-sucedidos. A seguir, estão alguns exemplos de elementos de
animação HUD usados em jogos:
27
• Uma barra de saúde.
• Um mapa em miniatura.
• Uma ampla gama de produtos.
• Nível de munição.
• Nível de jogo.
Criativamente, poderíamos construir cursores para indicar diferentes
ações. Assim como passar o mouse sobre os links muda o cursor do
usuário para uma mão em um navegador da web, podemos criar
alternativas dentro do jogo para fornecer um feedback ao usuário
sobre com quais itens do UI e objetos no jogo os usuários podem ou
não interagir. É fundamental incluir feedback de áudio e visual, para
que o jogador saiba quando a entrada é bem-sucedida ou falha. Por
exemplo, os jogos da série Sims utilizam dezenas de cursores diferentes
para indicar quais ações o jogador pode realizar, como mover o jogador,
mover a câmera ou interagir com objetos.
Idealmente, os jogadores podem personalizar o tamanho dos ponteiros
e cursores para que aqueles com pouca ou nenhuma visão possam
ver o cursor. Isso também beneficia os jogadores que usam monitores
de alta resolução, que costumam sofrer com uma UI pequena e mal
dimensionada.
Os ambientes virtuais, como videogames, simulam a presença física
de um usuário em um lugar que imita o mundo real ou representa
um mundo imaginário. Dois elementos devem ser levados em
consideração para descrever a interface deste tipo de ambiente: a
forma que o usuário pode interagir com o ambiente e as informações
exibidas pela interface, que permitem a interação com o usuário
(STANNEY et al., 2003).
28
Essas informações podem ser exibidas de acordo com diferentes
modalidades sensoriais, mas o modo visual é, geralmente, o mais
utilizado (STANNEY et al., 2003). As interfaces visuais dos videogames,
normalmente, consistem em uma cena de ação principal contendo
objetos com os quais o jogador pode interagir (por exemplo, avatares,
inimigos ou alvos) e um fundo complexo e móvel (por exemplo,
interiores, paisagens). Tradicionalmente, o HUD é, muitas vezes,
sobreposto à cena de ação principal. Esta exibição fornece informações
contextuais associadas à situação atual na forma de palavras, listas de
palavras, números ou símbolos. Na maioria dos casos, as informações
mais ou menos permanentes são organizadas em torno da borda da tela
(por exemplo, pontuação, pontos vitais, mapa do mundo virtual, etc.).
Em contraste, as informações não permanentes são frequentemente
exibidas na área central (por exemplo, mensagens de aviso). Os HUDs
variam em função do contexto. Alguns exemplos aumentam a percepção
do usuário sobre o ambiente do jogo ao sobrepor o contexto às
informações sobre uma cena real.
4. Métodos de usabilidade usados na indústria
de jogos
A usabilidade de videogames pode ser vista pela facilidade com que
o jogador é capaz de controlar, aprender e entender o jogo. Malone
(1982) foi o primeiro a utilizar os princípios de software de heurística de
usabilidade e aplicá-los no processo de desenvolvimento de jogos. Em
seu artigo, ele usa vários testadores de jogo para explorar a diferença da
interface do videogame em comparação com as interfaces encontradas
em aplicativos de software.
Laitinen (2005) afirma que podemos utilizar dois métodos de teste
de usabilidade na indústria de jogos: avaliação de especialista em
usabilidade e teste de usabilidade.
29
O teste de usabilidade é essencialmente o mesmo que o teste do
usuário, elaborado por métodos de avaliação de usabilidade de
software. Como explica Laitinen (2005), este método envolve testar o
jogo em playtesters especialmente selecionados, que representam o
grupo-alvo do jogo. Normalmente, usa-se de três a seis jogadores. Um
protótipo é frequentemente usado neste tipo de teste e fornece a prova
de conceito inicial e a primeira versão de trabalho do jogo. Isso deve ser
alcançado o mais rápido possível no ciclo de desenvolvimento, uma vez
que prevê feedback sobre os principais elementos do jogo. Os playtesters
são testados separadamente dentro do ambiente de laboratório, onde
os testadores receberão partes selecionadas do jogo. Essas sessões de
teste podem durar entre uma e duas horas, e um testador experiente,
geralmente, se sentará em cada sessão e observará, solicitará e dará
tarefas aos jogadores.
Laitinen (2005) explica que os testadores devem pensar em voz alta,
para que seu comportamento possa ser monitorado. O método de
teste de usabilidade é bom para identificar se o jogador entende
como jogar o jogo.
Esse teste pode ser visto como sendo um método que aplica
procedimentos usados dentro da psicologia para descobrir os
problemas de usabilidade. É aqui que os jogadores devem jogar em
um ambiente estritamente controlado, em que o limite de tempo, as
especificações do software e as condições do ambiente permanecem os
mesmos para cada sessão.
O teste de jogabilidade é outra forma de teste de usabilidade em
videogames, embora com algumas diferenças. Ele utiliza métodos
alternativos para coletar as informações dos playtesters, como
entrevistas e pesquisas.
A partir desse contexto, na Figura 4, é possível observar uma
representação do processo da realização do teste de jogabilidade.
30
Figura 4 - Representação do processo de realização do teste de
jogabilidade
Fonte: sesame/iStock.com.
Por fim, Laitinen (2005) apresenta que o uso da avaliação de especialista
em usabilidade, normalmente, emprega três especialistas em usabilidade
para avaliar o jogo e, ao contrário do teste de usabilidade, é mais flexível,
pois pode ser aplicado ao processo de desenvolvimento do jogo em quase
qualquer ponto. Neste método, os especialistas em usabilidade revisam
separadamente o jogo, em busca de problemas com base na experiência
e no conhecimento. Uma vez realizada esta etapa, todos os especialistas
realizam uma reunião, relatam suas descobertas juntos e avaliam a
gravidade de cada problema de usabilidade. Cada um desses problemas
é listado, declarando o título, a classificação de gravidade e uma solução,
para, depois, serem apresentados para a equipe de desenvolvimento.
Referências
ABDO, A. Graphical User Interface Features In Building Attractive And Successful
Websites. European Journal of Scientific Research, v. 12, n. 15, p. 332-336, 2016.
31
Disponível em: https://www.researchgate.net/publication/311887679_Graphical_
User_Interface_Features_In_Building_Attractive_And_Successful_Websites. Acesso
em: 17 out. 2021.
AHMED, S. 24 Games To Play If You Love Pixel Art. GAMERANT, 2021. Disponível em:
https://gamerant.com/games-play-love-pixel-art/. Acesso em: 17 out. 2021.
APPLE. iOS Human Interface Guidelines. Apple Developer, 2012. Disponível em:
https://developer.apple.com/design/human-interface-guidelines/ios/overview/
themes/. Acesso em: 17 out. 2021.
FEDEROFF, M. A. Heuristics and usability guidelines for the creation and
evaluation of fun in video games. 2002. Dissertação (Mestrado em Ciência)
– Indiana University, Indiana, 2002. Disponível em: http://citeseerx.ist.psu.edu/
viewdoc/download?doi=10.1.1.89.8294&rep=rep1&type=pdf. Acesso em: 17 out.
2021.
INTRODUCTION to Pixel Art and Sprites. Town Close, 2020. Disponível em: https://
townclose.com/wp-content/uploads/2020/07/Year-6-Introduction-to-Pixel-Art-and-
Sprites.pdf. Acesso em: 17 out. 2021.
LAITINEN, S. Better Games Through Usability Evaluation and Testing. Game
Developer, 2005. Disponível em: http://www.gamasutra.com/view/feature/130745/
better_games_through_usability_.php. Acesso em: 17 out. 2021.
MALONE, T. W. Heuristics for designing Enjoyable User Interfaces: Lessons from
Computer Games. [S. l.]: ACM. 1982.
NÉMETHI, G. What’s Make or Break in Game UI Design? UXSTUDIO, 2021. Disponível
em: https://uxstudioteam.com/ux-blog/whats-make-or-break-in-game-ui-design/.Acesso em: 17 out. 2021.
PIXEL ART. Techopedia, 2021. Disponível em: https://www.techopedia.com/
definition/8884/pixel-art. Acesso em: 17 out. 2021.
STANNEY, K. M. et al. Usability engineering of virtual environments (VEs): Identifying
multiple criteria that drive effective VE system design. Int. J. Hum.-Comput. Stud.,
v. 58, n. 4, 2003. Disponível em: https://stars.library.ucf.edu/facultybib2000/4043/.
Acesso em: 18 out. 2021.
https://www.researchgate.net/publication/311887679_Graphical_User_Interface_Features_In_Building_Attractive_And_Successful_Websites
https://www.researchgate.net/publication/311887679_Graphical_User_Interface_Features_In_Building_Attractive_And_Successful_Websites
https://gamerant.com/games-play-love-pixel-art/
https://developer.apple.com/design/human-interface-guidelines/ios/overview/themes/
https://developer.apple.com/design/human-interface-guidelines/ios/overview/themes/
http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.89.8294&rep=rep1&type=pdf
http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.89.8294&rep=rep1&type=pdf
https://townclose.com/wp-content/uploads/2020/07/Year-6-Introduction-to-Pixel-Art-and-Sprites.pdf
https://townclose.com/wp-content/uploads/2020/07/Year-6-Introduction-to-Pixel-Art-and-Sprites.pdf
https://townclose.com/wp-content/uploads/2020/07/Year-6-Introduction-to-Pixel-Art-and-Sprites.pdf
http://www.gamasutra.com/view/feature/130745/better_games_through_usability_.php
http://www.gamasutra.com/view/feature/130745/better_games_through_usability_.php
https://uxstudioteam.com/ux-blog/whats-make-or-break-in-game-ui-design/
https://www.techopedia.com/definition/8884/pixel-art
https://www.techopedia.com/definition/8884/pixel-art
https://stars.library.ucf.edu/facultybib2000/4043/
32
Programação estruturada e
orientada a objetos
Autoria: Marcelo Henrique dos Santos
Leitura crítica: Felipe Orsini Martinelli
Objetivos
• Compreender os princípios da programação
estruturada e da programação orientada a objetos.
• Compreender sobre o processo de desenvolvimento
de jogos 2D a partir de uma game engine
• Refletir sobre o desenvolvimento de jogos 2D.
33
1. Programação estruturada
A programação estruturada é um paradigma de programação que
facilita a criação de programas com código legível e componentes
reutilizáveis. Todas as linguagens de programação modernas oferecem
suporte à programação estruturada, mas os mecanismos de suporte,
como a sintaxe das linguagens de programação, variam.
O termo paradigma de programação refere-se a um estilo de
programação, não a uma linguagem específica, mas, sim, à maneira
como programamos. Existem muitas linguagens de programação,
porém todas elas precisam seguir alguma estratégia quando são
implementadas. E essa estratégia é um paradigma.
A programação estruturada incentiva a divisão de um programa de
aplicação em uma hierarquia de módulos ou elementos autônomos,
que podem, por sua vez, conter outros desses elementos. Dentro de
cada elemento, o código pode ser estruturado ainda mais usando
blocos de lógica relacionada projetada para melhorar a legibilidade
e a manutenção. Isso pode incluir a estrutura Caso, que testa uma
variável em relação a um conjunto de valores; Repita, Enquanto e
Para, que constroem loops que continuam até que uma condição
seja atendida. Os módulos ou elementos de código podem
ser reutilizados de uma biblioteca. É possível também construir
um código estruturado usando módulos escritos em diferentes
linguagens, desde que possam obedecer a uma interface de módulo
comum, ou uma especificação de interface de programa de aplicativo
(API). No entanto, quando os módulos são reutilizados, é possível
comprometer a segurança e a governança dos dados, por isso, é
importante definir e aplicar uma política de privacidade que controle
o uso de módulos, que traz com ela os direitos implícitos de acesso
aos dados (NOLLE, 2020).
34
Uma linguagem de programação estruturada facilita ou impõe práticas
de programação estruturada. Essas práticas também podem ser
suportadas com linguagens não estruturadas, mas isso exigirá etapas
específicas no design e na implementação do programa. As práticas
de programação estruturada, portanto, datam do surgimento das
linguagens de programação estruturada. A base teórica da programação
estruturada remonta à década de 1950, com o surgimento das
linguagens ALGOL 58 e 60. Até então, a clareza do código era reduzida
pela necessidade de construir testes de condição/ação, fazendo com que
os programadores escrevessem testes e ações vinculados explicitamente
(usando a instrução goto ou seu equivalente), resultando no que
costumava ser chamado de spaghetti code (código espaguete). ALGOL
incluía uma estrutura de bloco, onde um elemento de código incluía
uma condição e uma ação (NOLLE, 2020).
A programação modular, que hoje é vista como sinônimo de
programação estruturada, surgiu uma década depois, quando ficou claro
que a reutilização de código comum poderia melhorar a produtividade
do desenvolvedor. Na programação modular, um programa é dividido
em módulos semi-independentes, e cada um deles é chamado quando
necessário. A programação modular requer independência real dos
módulos, mas a maioria das equipes de desenvolvimento considera
qualquer programa que divide a lógica em elementos separados, mesmo
se esses elementos existirem no mesmo programa, como modular
(NOLLE, 2020).
As linguagens de programação modernas são universalmente capazes
de produzir código estruturado. Da mesma forma, elas também
são capazes de produzir código razoavelmente descrito como não
estruturado, se usado incorretamente. Os mecanismos para impor
a estrutura variam de acordo com a linguagem, com algumas
linguagens exigindo estrutura e outras aceitando código menos
estruturado.
35
2. Programação orientada a objetos
Em ciência da computação, um programa é composto por uma série de
comandos, que são executados em um computador ou em um circuito
eletrônico. A programação de um computador é o processo de escrever
um algoritmo e é também o processo de codificar um algoritmo em uma
notação denominada como linguagem de programação.
A programação orientada a objetos (POO) lida sobre como as
informações são representadas na mente humana. Como uma
abordagem de programação de computador, a POO é útil para
fornecer uma modelagem fácil para a dinâmica da construção e do
desenvolvimento de entidades reais. Esta abordagem visa modelar as
entidades e as relações existentes entre elas. A POO permite que os
programadores definam as classes necessárias para criar os objetos e
apliquem essas modificações (manipulações) sobre eles. Além disso,
pode fornecer recursos de herança, polimorfismo e encapsulamento
para os desenvolvedores.
De acordo com Ledgard (1996), o paradigma de programação é um
estilo fundamental de programação de computadores que classifica
as linguagens de programação. A abordagem orientada a objetos
permite dividir um sistema complexo em partes menores e em
módulos gerenciáveis, que tornam o processo de desenvolvimento
mais fácil de entender e compartilhar entre os membros de uma
equipe de desenvolvedores e de se comunicar com os usuários que são
necessários para fornecer requisitos e confirmar o quão bem o sistema
atende aos requisitos ao longo do processo. Assim, a POO permite
a aplicação da modularidade e abstração com maior compreensão,
manutenção e expansão do código.
Grady Booch, autor do método Booch do projeto orientado a objetos,
muito popular na década de 1990, criador da empresa Rational –
36
fabricante da ferramenta Rose para engenharia de software orientado
a objetos – e impulsor da linguagem unificada de modelo UML, define
a programação orientada a objetos (POO) como um método de
implementação, no qual os programas são organizados como coleções
cooperativas de objetos, cada uma das quais representando uma
instância de alguma classe, cujas classes são membros de uma hierarquia
de classesunidas mediante relações de herança. (AGUILAR, 2008).
A POO é formada pela coleção de objetos que se comunicam uns
com os outros para realizar tarefas. Essa comunicação é baseada em
mensagens, e os objetos são criados a partir de classes. A classe é uma
estrutura usada para definir os objetos que descrevem o seu conteúdo.
Esses atributos são membros de dados ou variáveis, e os métodos são
comportamentos dinâmicos, também chamadas de funções-membro.
Na maioria das linguagens de programação, a palavra-chave Class é
usada para definir uma classe. A declaração da classe deve conter o
nome da classe que o programador declara, como o exemplo a seguir:
Class NomeDaClasse {
...
}
Já o objeto ajuda os usuários a entender a noção de orientação a
objetos. Objetos, também chamados de instâncias de uma classe, são
modelados em entidades reais. Todas as instâncias de uma classe
possuem propriedades semelhantes. Basicamente, os objetos têm duas
características fundamentais: estado e comportamento. O estado é a
condição de um item que captura os aspectos relevantes de um objeto,
e o comportamento são os efeitos observáveis de uma operação ou
evento. Por exemplo, um objeto de software que modelou uma criança
possui os seguintes elementos:
37
• Seu nome é Benjamin.
• Sua nacionalidade é brasileira.
• Sua idade são cinco anos.
Essas variáveis são formalmente conhecidas como instância, porque
contêm o estado de um objeto específico. Na terminologia orientada
a objeto, um objeto específico é chamado de instância. Além de suas
variáveis, esse objeto “criança” possui métodos de comportamentos:
falar, andar, jogar bola, etc.
Uma classe pode conter uma variável, a qual é compartilhada por todas
as instâncias de classe. Essa variável é definida dentro de uma classe.
O programador pode criar objetos que podem herdar o número de
características dos objetos existentes. Os objetos podem se comunicar
uns com os outros passando uma mensagem, a qual é uma chamada de
método do objeto remetente para um objeto receptor. O objeto responde a
uma mensagem executando um de seus métodos (LEGDARG, 1996).
De acordo com Ledgard (1996), a POO possui diversos recursos que a
tornam utilizável, incluindo os seguintes:
• Herança.
• Polimorfismo.
• Abstração.
• Encapsulamento.
2.1 Herança
Este conceito aponta a reutilização do código sem a necessidade de
repetição ou reescrita dele. Esse processo inclui a criação de novas
38
classes (chamadas de classes derivadas ou subclasses) a partir de classes
existentes.
A classe existente é chamada de classe base, classe pai ou superclasse. A
classe derivada reutiliza a base dos membros da classe, além disso, pode
adicioná-la e alterá-la. Dessa forma, os programadores podem evitar o
processo de reescrita, o que possibilita a realização dos testes de código
que já existe. O objetivo da herança é apoiar o refinamento de classes
ou subclasses. Existem muitas vantagens de usar o conceito de herança
na programação orientada a objetos.
A herança é a propriedade que permite definir novas classes usando
como base as classes já existentes. A nova classe (classe derivada) herda
os atributos e comportamentos que são específicos dela. A herança é
uma ferramenta poderosa, que proporciona um marco adequado para
produzir software confiável, compreensível, com baixo custo, adaptável
e reutilizável (AGUILAR, 2008).
A modelagem direta de tais hierarquias torna a estrutura conceitual
dos programas mais fácil para compreender. A herança apoia as
propriedades das classes fatoradas, que são descritas uma vez e
reutilizadas quando necessário.
Isso resulta em modularidade e torna os programas complicados
mais fáceis de compreender e manter. Uma classe herda declarações
de variáveis de instância, bem como métodos de sua classe base.
Adicionando novas variáveis de instância e novos métodos e
substituindo os métodos da classe base, a classe derivada pode ser
modificada e redefinida. Uma classe derivada tem acesso aos membros
públicos e protegidos de sua classe base. Eles são herdáveis e visíveis
para os usuários.
Herança em POO é análoga à herança em humanos. Todos nós
herdamos características genéticas de nossos pais. Se tivermos sorte,
39
podemos mesmo ter alguns ancestrais que nos deixaram uma herança
em valor monetário. À medida que crescemos, nos beneficiamos dos
recursos, dos conhecimentos e das experiências de nossos ancestrais,
mas nossas experiências não afetaram em como nossos pais ou
ancestrais se desenvolveram (KOFFMAN; WOLFGANG, 2012).
2.2 Polimorfismo
Na ciência da computação, polimorfismo se refere à capacidade de
uma linguagem de programação para descrever os objetos de maneiras
diferentes com base em sua classe ou tipo de dados.
O polimorfismo, em sua expressão mais simples, é o uso de um nome
ou um símbolo – por exemplo, um operador – para representar ou
significar mais de uma ação. Assim, em C, Pascal, FORTRAN, entre outras
linguagens, os operadores aritméticos representam um exemplo dessa
característica (AGUILAR, 2008).
Segundo Tykhomyrov (2002), a palavra polimorfismo, de origem
grega, significa um nome, muitas formas, e é, talvez, o termo mais
difícil de explicar, especialmente na terminologia do mundo real. Por
exemplo, ao observar um carro, suponha que ele tenha três funções:
neutro, dirigir e marcha ré. Sabemos que existe apenas um método
denominado marcha ré. Sempre que selecionamos neutro, o motor de
um carro é desconectado da transmissão. Enquanto dirigimos um carro
para seguir em frente, selecionamos a função dirigir. Dependendo de
vários conjuntos de condições em tempo de execução, o mecanismo
do sistema de transmissão automática decide qual versão da função
dirigir aplicar em cada situação concreta. A versão específica da função
será usada dependendo da atual situação. Este é um análogo ao
chamado polimorfismo de tempo de execução. Portanto, o carro exibe
um comportamento polimórfico ao ir para a frente, mas exibe um
comportamento não polimórfico ao retroceder.
40
O polimorfismo é usado para personalizar o comportamento de uma
instância de um tipo (um objeto) com base nas condições existentes.
Em POO, o polimorfismo representa a ideia de uma interface com
múltiplos métodos, e significa que as funções ou os operadores não são
implicitamente reconhecidos pelo compilador (TYKHOMYROV, 2002).
O polimorfismo – a capacidade de um cliente de enviar uma mensagem
implementada por objetos de diferentes tipos sem a necessidade de
saber o tipo exato do objeto que responderá à mensagem – é a base
da POO. A partir da sua utilização, pretende-se aplicar uma forma de
facilitar a modularidade e extensibilidade dos sistemas de software,
ocultando a variabilidade de comportamento por trás de uma interface
unificada e permitindo que o cliente e o fornecedor sejam dissociados
na sua evolução. A desvantagem do polimorfismo é que ele espalha
a implementação do comportamento em várias classes, o que pode
resultar em um código mais difícil de entender.
Exemplo da vida real de polimorfismo: uma pessoa, ao mesmo tempo,
pode ter características diferentes, como um homem que é pai, marido e
empregado. Logo, a mesma pessoa possui um comportamento diferente
em diferentes situações.
2.3 Abstração
O princípio de abstração está atrelado ao desenvolvimento de modelos
em termos de interface e funcionalidade, em vez de detalhes de
implementação. Portanto, está relacionado ao encapsulamento e à
ocultação de dados. A abstração é aplicada ao modelo considerando o
processo de identificação do objeto.
Abstração é a especificação de um tipo de dado abstrato e inclui uma
especificação da representação e do comportamento dos dados. Isso
mostra que os dados podem ser mantidos no novo tipo de dados, e
todas as formas de manipulação deles.
41
Graças à abstração, as partes internas da classe são protegidas de erros
no nível do usuário, que quebra o estado dos objetos. A classe abstrata
é uma classe pai,que permite a aplicação dos princípios de herança,
contendo membros abstratos. Esses membros são apenas declarados,
não implementados. A implementação de membros abstratos é
feita dentro da classe derivada. Outro tipo de membro é o virtual. Ao
contrário do membro abstrato, os membros virtuais são implementados
na classe pai.
2.4 Encapsulamento
Do ponto de vista do usuário, uma série de recursos são empacotados
em uma cápsula para formar uma entidade, a qual oferece uma
série de serviços na forma de interfaces, ocultando os detalhes da
implementação (BOOCH et al., 2007).
O termo encapsulamento é usado para descrever a ocultação dos
detalhes de implementação. As vantagens do encapsulamento são
a ocultação de informações e a independência de implementação.
Variáveis locais estão escondidas em funções, e os membros privados
estão escondidos nas classes (BOOCH et al., 2007).
Os conceitos de encapsulamento e herança são as bases que facilitam
a reutilização. Um programador pode utilizar uma classe existente
e, sem modificá-la, acrescentar novas características e novos dados.
Conseguimos esta operação derivando uma classe da classe base
existente. A nova classe herda as propriedades da antiga, mas podem
ser somadas novas propriedades (AGUILAR, 2008).
O encapsulamento é uma técnica para minimizar as interdependências
entre os módulos escritos separadamente, definindo interfaces externas
estritas. A interface externa de um módulo serve como um contrato entre
o módulo e seus clientes e, portanto, entre o designer do módulo e outros
designers. Se os clientes dependem apenas da interface externa, o módulo
42
pode ser reimplementado sem afetar nenhum cliente, desde que a nova
implementação suporte a mesma interface externa (ou uma compatível).
Assim, os efeitos das mudanças compatíveis podem ser limitados.
O encapsulamento, portanto, garante aos designers que as alterações
compatíveis possam ser feitas com segurança, o que facilita a evolução
e a manutenção do programa. Esses benefícios são especialmente
importantes para sistemas grandes e dados de longa duração. Para
maximizar as vantagens do encapsulamento, deve-se minimizar a
exposição de detalhes de implementação em interfaces externas.
Uma linguagem de programação suporta o encapsulamento para
o grau em que permite que interfaces externas mínimas sejam
definidas e aplicadas. De acordo com Tykhomyrov (2002), podemos
melhorar o suporte de encapsulamento fornecido por uma linguagem,
estendendo-o com declarações adicionais (na forma de comentários
legíveis por máquina), e escrever o programa para verificar se os clientes
obedecem a essas declarações. No entanto, o resultado efetivo desta
abordagem é que um novo programa e/ou software foi definido (de uma
forma que aconteça para evitar a mudança do compilador existente);
a versão original não se tornou menos deficiente. Este suporte pode
ser caracterizado pelos tipos de mudanças que podem ser feitas
com segurança na implementação de um módulo. Por exemplo, uma
característica de uma linguagem orientada a objetos é observar se ela
permite que um designer defina uma classe de forma que suas variáveis
de instância possam ser renomeadas sem afetar os clientes.
3. Programação de jogos 2D
O desenvolvimento de videogames é um processo complexo, que requer
conhecimentos e habilidades multidisciplinares, desde a visão artística
e narrativa até a capacidade de solucionar os desafios tecnológicos.
43
Desde seus primeiros passos como uma indústria, os desenvolvedores
tentaram integrar esses processos, a fim de acelerar os tempos de
produção e otimizar o gerenciamento de recursos.
A partir dessa tendência, o conceito de game engine nasceu como um
ambiente onde se compõe e implementa games, independentemente
de seu gênero. Atualmente, os motores de jogos são ferramentas
indispensáveis para fazer jogos comerciais, e todo estúdio profissional
trabalha com um, seja um software proprietário ou de terceiros.
A game engine GameMaker foi lançada pela primeira vez com o nome
de Animo, em 1991, e era adequada para criar jogos 2D. Embora o
mecanismo de jogo seja adequado para jogos 2D, ele permite ao usuário
adicionar gráficos 3D e física. A ferramenta é fácil de usar para usuários
novatos, pois não requer conhecimento de programação.
O uso de linguagens de programação ou programação de jogos é
um subconjunto do desenvolvimento de jogos. A linguagem C # é
amplamente usada para criar jogos usando a game engine Unity 3D.
Mais de um terço dos principais jogos para celular são desenvolvidos
usando a linguagem de programação C #.
Outra linguagem muito utilizada no desenvolvimento de jogos 2D é o
Java. A linguagem de programação Java utiliza para desenvolver jogos
o framework LibGDX ou OpenGL. Por exemplo, para construir um jogo
para Android, podemos utilizar o Java com o Android SDK nativo.
Já o Javascript é comumente usado para criar jogos da web em
navegadores da web. A linguagem utiliza algumas tecnologias, como
o WebGL, para fazer jogos para navegadores da web com a ajuda do
HTML e CSS.
De acordo com Alomari et al. (2015), ao comparar seis linguagens de
programação (PL – Programming Languages) com base na legibilidade, na
44
capacidade de escrita e na reutilização, cada linguagem é mais adequada
para um determinado domínio do aplicativo, devido ao design interno
e à estrutura da PL. Reddy et al. (2018), em comparação com várias PL
com base na velocidade de tempo de execução e na memória, concluem
que cada PL possui o seu ambiente e tempo de execução definidos, mas
tudo depende da finalidade em que são usados.
Parveen e Nazish (2016), ao compararem três PL (C #, C ++ e Java) com
base na velocidade, na flexibilidade e na eficiência, concluem que Java
é a melhor linguagem de desenvolvimento por causa do ambiente de
execução e dos recursos exaustivos em comparação com C ++ e C #.
No Quadro 1, é possível observar algumas características das game
engine 2D:
Quadro 1 - Classificação de algumas game engine 2D
Game engine Linguagem Suporte 2D 3D
Unity 3D C# Desktop: Windows, Mac OS, Linux.
Mobile: Android, IOS. x x
LibGDX Java
Desktop: Windows, Mac OS, Linux.
Mobile: Android, IOS,
Blackberry, HTML5.
x x
CopperCube
JavaScript,
Flash,
WebGL
Desktop: Windows, Mac OS
Mobile: Android x x
Corona
SDK 61 Lua
Desktop: Windows, Mac OS
Mobile: iOS; Android;
Windows Phone
x
3D Game
Studio C++, C# Desktop: Windows x x
Irrlicht Yes
Yes Free
C++, C#,
VB.Net
Desktop: Windows, Mac
OS, and Linux.
Mobile: iOS; Android.
x x
Fonte: adaptado de Zarrad (2018).
45
As game engine são ferramentas que agilizam o processo altamente
exigente de desenvolvimento de jogos. A escolha da ferramenta
que será utilizada no desenvolvimento do jogo depende do perfil do
usuário (por exemplo, especialistas de domínio, programadores), do
seu conhecimento, do resultado que se deseja alcançar, bem como dos
recursos e do tempo.
Referências
AGUILAR, L. J. Fundamentos de programação: algoritmos, estruturas de dados e
objetos. São Paulo, SP: AMGH, 2008.
ALOMARI, Z. et al. Comparative Studies of Six Programming Languages. [S. l.:
s. n.], 2015. Disponível em: https://www.semanticscholar.org/paper/Comparative-
Studies-of-Six-Programming-Languages-Alomari-Halimi/934c0b1ca08e5f4875d69d5
4f5cef90ac8563823. Acesso em: 13 set. 2021.
BOOCH, G. et al. Object-Oriented Analysis and Design with Applications. 3. ed.
Boston, MA: AddisonWesley Professional, 2007.
KOFFMAN, E. B.; WOLFGANG, P. T. Objetos, abstração, estrutura de dados e
projeto usando C++. Rio de Janeiro, RJ: LTC, 2012.
LEDGARD, H. F. The Little Book of Object Oriented Programming. Upper Saddle
River, NJ: Prentice Hall, 1996.
NOLLE, T. Structured programming (modular programming). 2020. Disponível
em: https://searchsoftwarequality.techtarget.com/definition/structured-
programming-modular-programming. Acesso em: 11 jan. 2021.
PARVEEN, Z.; NAZISH, F. Performance comparison of most common highlevel
programming languages. Int. J. Comput. Acad. Res., v. 5, n. 5, p.246-258, 2016.
Disponível em: https://www.researchgate.net/publication/349665549_Performance_
Comparison_of_Most_Common_High_Level_Programming_Languages. Acesso em:
13 set. 2021.
REDDY, K. P. N. et al. Comparison of Programming Languages: Review.
International Journal of Computer Science & Communication, v. 9, p. 113-122,
mar.-set. 2018. Disponível em: http://csjournals.com/IJCSC/PDF9-2/18.%20Reddy.
pdf. Acesso em: 13 set. 2021.
TYKHOMYROV, O. Introducing to Object-Oriented Programming. [S. l.: s. n.], 2002.
Disponível em: http://indico.ictp.it/event/a01167/material/1/4.pdf. Acesso em: 13
set. 2021.
ZARRAD, A. Game Engine Solutions. IntechOpen, 2018. Disponível em: http://dx.doi.
org/10.5772/intechopen.71429. Acesso em: 13 set. 2021.
https://www.semanticscholar.org/paper/Comparative-Studies-of-Six-Programming-Languages-Alomari-Halimi/934c0b1ca08e5f4875d69d54f5cef90ac8563823
https://www.semanticscholar.org/paper/Comparative-Studies-of-Six-Programming-Languages-Alomari-Halimi/934c0b1ca08e5f4875d69d54f5cef90ac8563823
https://www.semanticscholar.org/paper/Comparative-Studies-of-Six-Programming-Languages-Alomari-Halimi/934c0b1ca08e5f4875d69d54f5cef90ac8563823
https://searchsoftwarequality.techtarget.com/definition/structured-programming-modular-programming
https://searchsoftwarequality.techtarget.com/definition/structured-programming-modular-programming
https://www.researchgate.net/publication/349665549_Performance_Comparison_of_Most_Common_High_Level_Programming_Languages
https://www.researchgate.net/publication/349665549_Performance_Comparison_of_Most_Common_High_Level_Programming_Languages
http://csjournals.com/IJCSC/PDF9-2/18.%20Reddy.pdf
http://csjournals.com/IJCSC/PDF9-2/18.%20Reddy.pdf
http://indico.ictp.it/event/a01167/material/1/4.pdf
http://dx.doi.org/10.5772/intechopen.71429
http://dx.doi.org/10.5772/intechopen.71429
46
Desenvolvimento de um jogo
digital 2D a partir de uma game
engine
Autoria: Marcelo Henrique dos Santos
Leitura crítica: Felipe Orsini Martinelli
Objetivos
• Compreender os princípios das game engine 2D.
• Aplicar os conceitos do desenvolvimento de jogos a
partir de uma game engine.
• Refletir sobre as game engine 2D disponíveis no
mercado.
47
1. Game engine 2D
A game engine (motor do jogo) é construída com componentes que
fornecem a funcionalidade necessária para se criar um jogo. De acordo com
Gregory (2014), os componentes do motor de jogo mais comuns são:
1. Módulo de áudio: a principal função deste componente é gerar
efeitos sonoros nos jogos.
2. Motor de renderização: a principal tarefa deste componente é
converter os dados de entrada para pixels exibidos na tela.
3. Módulo de Inteligência Artificial: um componente responsável
por fornecer técnicas para definir regras de comportamento com
personagens não controlados por jogadores (NPCs–Non-Player
Character).
4. Módulo de animação: executa animações, por exemplo,
movimento e mudanças na forma de objetos virtuais.
5. Módulo de rede: o componente de rede do motor de jogo
permite que vários jogadores joguem juntos ao mesmo tempo,
usando dispositivos conectados à internet.
6. Mecânica do jogo (lógica): a mecânica do jogo (jogabilidade)
consiste nos elementos que compõem o jogo, ou seja, as regras
que governam o mundo virtual, as habilidades dos personagens
controlados pelos jogadores, os personagens comandados por
inteligência artificial, os objetos do mundo virtual, os objetivos e as
tarefas dos jogadores.
7. Ferramentas de software: ferramentas que otimizam e
aumentam a eficiência do trabalho com o motor do jogo. Elas
fornecem a capacidade de adicionar tipos diferentes de elementos
para os jogos, animação e efeitos de áudio a algoritmos de
inteligência artificial.
A partir desse contexto, na Figura 1, é possível observar uma
representação do processo de desenvolvimento de games.
48
Figura 1 - Representação do processo de desenvolvimento de games
Fonte: anyaberkut/iStock.com.
1.1 Unity
Unity é um motor de jogo desenvolvido pela Unity Technologies. Este
software permite criar jogos 3D e 2D. O motor foi apresentado pela
primeira vez em 2005. Nas primeiras versões, a única plataforma
compatível era o Mac OS (BARCZAK; WOŹNIAK, 2020), contudo,
junto às versões subsequentes, os desenvolvedores aumentaram
consistentemente o número de plataformas, como jogos para PC (Linux,
Mac OS), consoles (PS4, Xbox One, Nintendo Switch), dispositivos móveis
e sistemas de realidade virtual (Oculus Rift, Playstation VR e GearVR).
O Unity permite que você escreva a lógica do jogo na linguagem de
programação C #. Eea apresenta um sistema modular baseado em
componentes para a construção de objetos em jogos. Nesse tipo de
sistema, um componente é um conjunto de funcionalidades. Esta
solução permite que você crie objetos usando uma combinação de
recursos em vez de usar herança, que é usada com uma abordagem
de programação orientada a objeto padrão. A vantagem da abordagem
modular é o aumento da flexibilidade, que permite a correspondência
49
de componentes eficientes e sem problemas, sem a necessidade de
refatorar a cadeia de herança a cada mudança nos objetos (BARCZAK;
WOŹNIAK, 2020).
O Unity é muito amigável para iniciantes, e é uma engine
recomendada, principalmente, como uma primeira escolha
para entrar no desenvolvimento de jogos indie, já que há uma
abundância de documentação, guias e vídeos por toda a internet
(SOLOGAMESTUDIOS, 2020).
A partir desse contexto, seguem os prós e contras da ferramenta:
Prós:
• Amigável para iniciantes.
• Compatível com várias plataformas.
• Excelente loja de ativos.
• Custo barato/grátis para usar.
• Infinitas possibilidades.
Contras:
• Unity é pesado e ocupa muito espaço no disco rígido.
• Mesmo os jogos pequenos são construídos com um grande
tamanho final (o arquivo executável).
• Não oferece concessões. De acordo com a Unity Technologies
(2021, [s. p.]), “o Unity Personal é para indivíduos, amadores e
pequenas empresas com menos de US$ 100 mil em receita ou
recursos arrecadados nos 12 meses anteriores”.
50
1.2 Unreal Engine
A Unreal Engine foi lançada em 1998, quando foi apresentada por
seus criadores, da Epic Games. Inicialmente, este motor permitia
apenas modificar e adicionar novos elementos ao jogo unreal para
as necessidades das quais foi criada. Ao longo dos anos, passou por
profundas mudanças e, atualmente, permite o desenvolvimento de
jogos para diversas plataformas, incluindo Windows, Linux, Mac OS, iOS,
Android, Playstation 4, Xbox One, HTML5 e dispositivos de realidade
virtual: SteamVR, HTC Vive, Oculus Rift (BARCZAK; WOŹNIAK, 2020).
A Unreal Engine oferece suporte à escrita de scripts na linguagem C ++.
Está equipada com um sistema próprio de Blue Print, proporcionando
a possibilidade de implementar a lógica do jogo com o uso de
diagramas gráficos. A lógica escrita usando diagramas gráficos pode
completamente substituir a necessidade de escrever código em
linguagem C ++ (BARCZAK; WOŹNIAK, 2020).
A partir desse contexto, na Figura 2, é possível observar uma imagem do
BluePrint da game engine Unreal Engine.
Figura 2 - Imagem do Blue Print
Fonte: https://answers.unrealengine.com/questions/381677/change-mediaplayer-material-
in-blueprints-for-gear.html. Acesso em: 6 jan. 2022.
https://answers.unrealengine.com/questions/381677/change-mediaplayer-material-in-blueprints-for-gear.html
https://answers.unrealengine.com/questions/381677/change-mediaplayer-material-in-blueprints-for-gear.html
51
Barczak e Woźniak (2020) afirmam que a Unreal Engine consiste nos
seguintes componentes:
• Motor de som: Sound Cue.
• Mecanismo de física: PhysX.
• Motor gráfico: suporta DirectX 11/12, OpenGL, bibliotecas
Javascript/WebGL.
• Esqueleto do jogo: funções que controlam o curso do jogo.
• Efeitos pós-processo.
• Inteligência artificial.
• Módulo de rede.
Uma dinâmica que o Unreal faz e que muitos outros motores de jogos