Como melhorar a performance do seu jogo na Construct 2

0 Flares 0 Flares ×

performance-construct2

Olá, pessoal! Nesse artigo vamos ver algumas dicas de performance para que você não tenha problemas de desempenho, principalmente em dispositivos móveis, com seus projetos desenvolvidos na Construct 2, que é uma das game engines preferidas pelos desenvolvedores.

E também, vamos desmentir alguns equívocos que muitos acreditam que sejam os causadores de mau desempenho.

Confira também o ebook gratuito: 12 Dicas Matadoras Para Criar Jogos na Construct 2.

Se você quer se aprofundar no desenvolvimento de jogos, não deixe de participar de uma aula online com o Raphael Dias. Você pode se inscrever por meio deste link.

Mobile

Computadores desktop são muito mais poderosos que dispositivos móveis. Geralmente, o principal problema com o desempenho é fazer seu jogo funcionar bem em celulares e tablets.

É mais difícil obter um bom desempenho nesses dispositivos porque na maioria das vezes eles têm um hardware mais fraco: CPUs mais lentas, chips gráficos (GPUs) mais lentos, e menos memória.

Como já mencionado no artigo de 9 Dicas Matadoras para Criar Jogos na Construct 2, se a sua ideia é criar um jogo para celulares, você deve testar no celular desde o início.

Como seu computador pode ser mais de dez vezes mais rápido do que o seu dispositivo móvel, você pode criar um jogo que não irá funcionar bem em um celular ou tablet. Para evitar surpresas teste regularmente no dispositivo pretendido para se certificar de que esteja rodando bem.

construct2-mobile

As dicas a seguir podem ajudá-lo a alcançar um melhor desempenho em dispositivos móveis:

  1. Certifique-se de que WebGL esteja habilitada, uma vez que em dispositivos que suportam, geralmente melhora significativamente o desempenho.
  1. Evite usar muitos objetos ou partículas, uma vez que os dispositivos móveis têm limites mais baixos do que computadores desktop.
  1. Coloque objetos usando os mesmos modos de mistura ou efeitos na mesma camada. Por exemplo, se você tem um monte de objetos que utilizam o aditivo modo de mesclagem (comumente utilizado para explosões, lasers e outros efeitos), certifique-se todos os objetos estejam na mesma camada. Também certifique-se que eles são criados nessa camada se os objetos são criados em tempo de execução.
  1. Evite objetos com grandes áreas de transparência. Pixels transparentes ocupam o tempo de renderização, mesmo que eles não apareçam visualmente. Recorte todas as imagens que você usa para remover o espaço transparente utilizando a ferramenta de “Crop” na tela de edição de imagem da Construct. Dividindo os objetos grandes com grandes áreas transparentes em uma série de objetos menores também pode aumentar o desempenho de renderização e diminuir o uso de memória.
  1. Evite grandes áreas de sobreposição entre os objetos. O renderizador funciona back-to-front, e se os objetos têm muita sobreposição, a área sobreposta terá os pixels renderizados diversas vezes. Isto pode sobrecarregara a capacidade de uma GPU móvel muito rapidamente.
  1. Se você tiver um background opaco, defina Clear Background para No nas propriedades do projeto. Isso evita a redundância de limpar a tela inteira a cada quadro, quando tudo seria apagado de qualquer maneira ao renderizar o seu background opaco.

As causas mais comuns de mal desempenho na Construct 2

Alguns dos motivos mais comuns que causam lentidão estão listados abaixo. Essa é uma listagem das causas mais prováveis, mas podem haver outras razões que estejam afetando a performance do seu jogo.

A falta de aceleração de hardware

Normalmente, até mesmo o mais lento renderizador Canvas 2D ainda é acelerado pela GPU (Graphics Processing Unit). No entanto, alguns dispositivos têm drivers gráficos instáveis e os fabricantes de browsers desativam o uso da GPU para evitar acidentes (como “GPU blacklisting”). Em dispositivos muito antigos a aceleração da GPU simplesmente pode não ser suportada.

Alterar texto objetos cada instante (Every tick)

Alterar o tamanho ou o texto de um objeto de texto a cada instante provavelmente produzirá uma perda de desempenho, especialmente em dispositivos móveis. O problema é ainda pior se o objeto de texto é grande. Tente usar pequenos objetos de texto que não mudam regularmente. Se você precisar alterar o texto regularmente, considere o uso de uma Sprite Font, que é rápido mesmo quando mudada a cada instante.

Uso inadequado do Tilemap

Não é apropriado usar o objeto Tilemap para exibir imagens grandes. O objeto TileMap desenha tile-by-tile, mas pode ser otimizado se houverem áreas com mesmo tile.

Muitos objetos usando comportamentos de Física (Physics Behavior)

O comportamento de física (physics behavior) exige muito da CPU. Utilizar muitos objetos com o comportamento física pode causar uma considerável lentidão (quedas de framerate). Você deve projetar seus jogos para usar alguns objetos grandes ao invés de muitos objetos pequenos que utilizem física.

Criando muitos objetos

Embora os computadores modernos sejam muito rápidos, eles ainda têm uma capacidade de processamento limitada. A criação de mais de 1000 objetos em um único layout provavelmente fará seu jogo mais lento. Tente projetar o seu jogo para usar menos objetos.

Usando muitos efeitos

Efeitos são visualmente bonitos, mas podem prejudicar o desempenho do jogo consideravelmente se utilizados sem moderação, especialmente nos celulares. Usar um efeito sobre objetos com muitas instancias não é recomendado, muitas vezes, é mais eficiente colocar todos os objetos com o efeito em uma única camada e aplicar o efeito sobre a camada.

Isso permite processar o efeito tudo de uma vez só, ao invés de reexecutar o efeito de diversas vezes para cada instancia do objeto. Alguns efeitos também têm mais impacto no desempenho do que outros: blurs e glows tendem ser o mais impactante, distorção tendo um impacto médio, e as misturas de cores (como multiply e screen) são os mais fáceis para a GPU para processar.

Utilização desnecessária de efeitos

Nunca use efeitos estáticos em um objeto. Por exemplo, não use o efeito “Grayscale” para fazer um objeto sempre aparecer em tons de cinza. Isso vai prejudicar o desempenho quando você pode simplesmente importar uma imagem em tons de cinza.

Usando muitas partículas

O objeto de partículas (Particles object) pode facilmente criar centenas de partículas. Cada partícula é como uma sprite. Evite o uso de mais do que 200 partículas.

Usando Sprites em vez de Tile Background

Criar muitos objetos pode causar lentidão, e um erro comum é usar grades Sprite em vez de Tile Background. Isso é semelhante ao uso inadequado de tilemaps. Por exemplo, uma grade de sprites de 20×20 tem 400 objetos de um pixel, que causa um impacto significativo na contagem de objeto.

Um único Tile Background pode substituir a grade de sprites e só conta como um único objeto. Tile Background são otimizados para repetir sua textura, portanto, neste caso, é, literalmente, 400 vezes mais eficiente do que uma grade de sprites. Sempre use Tile Background em vez de Sprites repetidas sempre que possível.

Não colocar todos os objetos usados no layout

Se os objetos não são colocados em um layout, mas são criados por eventos, a Construct 2 irá carregar as texturas para os objetos no momento que você criá-los. Isso pode causar uma pausa momentânea ou “Jank” e tornar o jogo menos responsivo. Isto pode ser evitado colocando os objetos usados no layout. Eles podem ser colocados fora da tela e destruídos logo ao iniciar para evitar interferência com a jogabilidade. Assim a Construct 2 irá pré-carregar todas as texturas quando o layout é iniciado, evitando o “Jank”.

Usando muitas Loops

Este é mais raro, mas usando muitos loops como For, For Each e Repeat podem causar lentidão. Para testar se esse é o problema, tente desativar temporariamente os eventos looping.

Equívocos mais comuns

Os seguintes itens listados abaixo são frequentemente acusados, pelos desenvolvedores inexperientes, de afetar o desempenho (como, o framerate ou tempo de execução), mas provavelmente tem pouco ou nenhuma culpa pelo mau desempenho do seu jogo:

Renderização de objetos fora da visão da câmera

A Construct 2 não emite chamadas para desenhar objetos que não aparecem na janela, e a GPU também é inteligente o suficiente não renderizar qualquer conteúdo que está fora da janela – mesmo quando uma única imagem é exibida parcialmente na tela.

Formatos de imagem

Alguns formatos (como por exemplo JPEG, PNG-8 e PNG-32) afetam o tamanho de download, mas não têm nenhum efeito sobre o desempenho do tempo de execução ou utilização de memória (todos eles são descompactados a 32-bit bitmap na inicialização).

Formatos de áudio

Os formatos de áudio também afetam apenas o tamanho do download, mas não têm nenhum efeito sobre o desempenho do tempo de execução.

Número de camadas

Esse número geralmente não tem efeito sobre a performance, a menos que a maioria das camadas tenham sua opacidade alterada, ou tenha efeitos aplicados. No entanto normalmente não há nenhum impacto no desempenho no uso de múltiplas camadas.

Número de layouts

Também é improvável que o número de layouts tenha qualquer efeito sobre a performance que não seja no tamanho do download. O tamanho da disposição da tela também não tem qualquer efeito direto; layouts maiores não usam mais memória ou exigem mais processamento, a menos que você use mais objetos.

Sabendo dessas dicas você já pode projetar seu jogo de forma a minimizar ao máximo problemas de performance.

Me conta nos comentários quais das dicas deste artigo você acha que vão ser mais úteis para você! Você também pode compartilhar outras dicas que você já aplica para melhorar a performance do seu jogo!

Para obter mais dicas sobre a Construct 2, confira o ebook gratuito: 12 Dicas Matadoras Para Criar Jogos na Construct 2.

Um abraço e até a próxima. Valeu!

  • Guilherme Nunes

    Como usuário de C2 achei bem legais as dicas!
    Uma dica que acho legal faz parte do assunto de muitos objetos: Crie um sistema para destruir objetos não utilizados, como tiros e inimigos que saem da tela e não voltarão ao jogo.

  • Marcílio Costa Bezerra

    Muito bom o artigo. Eu também uso algumas outras técnicas além dessa:

    1) every seconds com 0.33 * dt ao invés de every tick por conta da forma que a engine calcula o tick ser mais custoso pra CPU do que usando o every seconds. Eu percebi uma melhoria mesmo em um jogo que fiz pra mobile.

    2) sprite único com frames de animação em speed 0 para reutilização e alteração do frame em tempo de execução para jogos em que precisa ficar criando vários objetos, como corridas infinitas, por exemplo. Dessa no momento do deploy forma ele agrupa tudo em um sprite-sheet só e senão me engano é mais leve mudar frame de um objeto já na memória do que criar um novo objeto.

    Podia escrever depois um artigo explicando os prós e contras para performance nos games que são exportados como:
    – Phonegap Build
    – Cordova puro
    – Intel XDK
    – Cocoon.io
    – Cordova com Crosswalk
    – Canvas+

    e demais formas de build pra mobile que tentam “resolver” o problema dos devices sem WebGL.

    • Herbert H.

      Vlw. Melhorou um pouco.

  • Joffre Macedo Neto

    Muito bom o artigo, só estou com dificuldades de entender sobre “Não é apropriado usar o objeto Tilemap para exibir imagens grandes. O objeto TileMap desenha tile-by-tile, mas pode ser otimizado se houverem áreas com mesmo tile.”… exibir imagens grandes? vc diz a imagem (arquivo) do Tilemap, ou montar uma imagem com tilemap em uma área grande na tela?…

  • Eduardo Macedo Sobrinho

    Muito show o artigo, sou praticantes de Jiu jitsu e gostei muito das dicas,
    também tenho um blog onde falo sobre “Como Conseguir Patrocínio para Qualquer Esporte”.
    patrocinioparaatletas.com

  • i G0LD

    eu fiz uma fase do jogo com pouquissimo conteudo e está dando quase 100 mb!! como posso reduzir o tamanho do jogo?