Entrar
Últimos assuntos
» player não consegue andarpor lovn7 Qui 21 Nov 2024, 13:33
» É possível fazer istó no game maker
por William Lima Qui 21 Nov 2024, 10:56
» Rio Rise - novo launcher do Gta San Andreas SAMP Brasil
por Lua Sáb 16 Nov 2024, 20:22
» (Resolvido) Cenario longo x Texture Pages
por josuedemoraes Sáb 16 Nov 2024, 15:31
» Kids' band
por Adilson Lucindo Santos Sex 15 Nov 2024, 12:23
» (RESOLVIDO) Engasgos-Troca de Sprites/animações
por josuedemoraes Ter 12 Nov 2024, 01:49
» Block Room - DEMO
por Joton Qua 06 Nov 2024, 22:58
» Game Infinito vertical (subindo)
por macmilam Sáb 26 Out 2024, 12:36
» Retorno da GMBR!!!
por Dancity Ter 22 Out 2024, 16:36
» Máquina de estados
por aminaro Qui 10 Out 2024, 13:33
» como faço pra um objeto colidir com o outro e diminuir a vida do player ?
por josuedemoraes Qui 03 Out 2024, 16:51
» RESOLVIDO: Colisão com objetos moveis
por josuedemoraes Qua 02 Out 2024, 20:28
» Crypt of the Blood Moon
por divin sphere Qua 11 Set 2024, 18:18
» como fazer um objeto seguir?
por divin sphere Dom 18 Ago 2024, 18:08
» Procuro de alguém para Modelar/Texturizar/Animar objetos 3D
por un00brn Dom 11 Ago 2024, 11:10
» Destruição de cenário (estilo DD Tank)
por CoronelZeg Sex 09 Ago 2024, 17:16
» RESOLVIDO-Como destruir uma instancia especifica de um objeto
por josuedemoraes Ter 23 Jul 2024, 00:40
» Automatizar a coleta de id
por GabrielXavier Seg 22 Jul 2024, 18:01
» Preciso de ajuda para concluir um pequeno projeto
por lmoura Qui 27 Jun 2024, 15:45
» ANGULO ACOMPANHAR O OBJETO
por Klinton Rodrigues Qui 27 Jun 2024, 08:34
» Musica reinicia quando sala reinicia
por GabrielXavier Ter 18 Jun 2024, 07:28
» como fazer uma copia de gd
por generico_cube Sex 14 Jun 2024, 15:48
» Square Adventure
por guilherme551 Ter 11 Jun 2024, 09:54
» como posso definir limite de uma variavel
por GabrielXavier Sex 07 Jun 2024, 14:14
» [Resolvido] Dúvida, colisão única de objeto
por vdm842 Sex 24 maio 2024, 09:50
Melhorando o desempenho dos jogos
+2
Luiz A. Oliveira
PedroX
6 participantes
GMBR :: Ensine & Aprenda :: Tutoriais :: Game Maker
Página 1 de 1
Melhorando o desempenho dos jogos
Nesse artigo, você verá como melhorar o desempenho do seu jogo.
O Game Maker é criticado na maioria das vezes por causa de sua velocidade, que na verdade não é muito boa mesmo. Mas você saberá melhorar esse problema.
O artigo é em forma de dicas, alguma são minhas e outras foram coletadas da internet.
Precise collision checking
Se o seu sprite não precisa colidir perfeitamente, podendo colidir com uma mascara quadrada ou circular, desabilite essa opção.
Operações matemáticas
Operações de divisão e subtração são mais lentas que operações de soma e multiplicação (até para o ser humano é assim). Em vez de usar:
Tiles no lugar de objetos
Um objeto é algo muito complexo no Game Maker.
Ele possui várias coisas desnecessárias. Cada instância é uma cópia desse objeto, ou seja, seu jogo vai ficar pesado com várias instâncias.
Use TILES no lugar de objetos (como o chão, paredes, tudo o que der).
Elas são MUITO mais RÁPIDAS que os objetos.
Procure usar tiles maiores ao invés de várias tiles pequenas (claro que somente quando uma for ficar do lado da outra).
Background color
Se você está usando um background, desative a opção de desenhar uma cor para o background.
Step
Esse é um evento que geralmente é executado 30 vezes por segundo, evite usar códigos que não precisam ser executados em todos os steps do jogo. Use outros eventos se possivel.
Views
Em cada view a room é redesenhada.
Então use só uma view quando puder.
Resolução
Use uma resolução baixa.
With
Em vez de usar:
Switch
Em vez de usar vários if, use um switch.
Se não souber o que é, veja no Manual do Iniciante (na minha assinatura).
Memory Leaks
Sempre termine as ações que iniciou.
Usou a função file_find? Use file_find_close().
Usou surfaces? Use surface_free().
Variáveis
Ao declarar uma variável, pense no seguinte:
- Vou precisar dela só agora (não há utilidade de usá-la depois)?
Use var variavel;
variavel=valor;
- Vou precisar usar somente nesse objeto e mais de uma vez?
Use variavel = valor;
- Vou precisar usar em todos os objetos (ou em mais de um)?
Em último caso use globalvar variavel;
variavel = valor;
Mesmo assim, prefira usar um objeto para guardar as variaveis que seriam globais e depois chame essas variaveis locais dele. Ex: sangue = objeto_vars.variavel;
Sons
Toque os sons com intervalos.
Não deixe o jogo sempre ficar tocando sons.
DLL
Use Dll's no seu jogo.
Elas são mais rápidas que as funções do Game Maker.
Constantes
Se algumas variáveisironicamente forem constantes, use constantes no lugar dessas variáveis.
Ds_list, Ds_map, etc
Use data structures ao em vez de arrays.
Seu jogo ficará mais leve.
display_set_colordepth(coldepth)
Use essa função com o valor 16, assim ganhará velocidade.
Sprites / Backgrounds
Deixe eles do menor tamanho possivel.
Retire até os espaços invisiveis.
Instâncias
Destrua as instâncias que você não usará mais.
Desative ( instance_deactivate_ ) as que não está usando (fora da view por exemplo).
execute_string, draw_get_pixel, surface_get_pixel, variable_local_set
Nunca use essas funções. Só em caso de vida ou morte.
Créditos:
Pedro Henrique
Cabreak
Derek
Até mais!
O Game Maker é criticado na maioria das vezes por causa de sua velocidade, que na verdade não é muito boa mesmo. Mas você saberá melhorar esse problema.
O artigo é em forma de dicas, alguma são minhas e outras foram coletadas da internet.
Precise collision checking
Se o seu sprite não precisa colidir perfeitamente, podendo colidir com uma mascara quadrada ou circular, desabilite essa opção.
Operações matemáticas
Operações de divisão e subtração são mais lentas que operações de soma e multiplicação (até para o ser humano é assim). Em vez de usar:
- Código:
vida = level/4 + sin(angle)/cos(angle); //mais lento
- Código:
vida = level*0.25 + tan(angle); //mais rápido
Tiles no lugar de objetos
Um objeto é algo muito complexo no Game Maker.
Ele possui várias coisas desnecessárias. Cada instância é uma cópia desse objeto, ou seja, seu jogo vai ficar pesado com várias instâncias.
Use TILES no lugar de objetos (como o chão, paredes, tudo o que der).
Elas são MUITO mais RÁPIDAS que os objetos.
Procure usar tiles maiores ao invés de várias tiles pequenas (claro que somente quando uma for ficar do lado da outra).
Background color
Se você está usando um background, desative a opção de desenhar uma cor para o background.
Step
Esse é um evento que geralmente é executado 30 vezes por segundo, evite usar códigos que não precisam ser executados em todos os steps do jogo. Use outros eventos se possivel.
Views
Em cada view a room é redesenhada.
Então use só uma view quando puder.
Resolução
Use uma resolução baixa.
With
Em vez de usar:
- Código:
player.sprite=spr_player;
player.vida=100;
player.level=25;
- Código:
with (player){
sprite=spr_player;
vida=100;
level=25;
}
Switch
Em vez de usar vários if, use um switch.
Se não souber o que é, veja no Manual do Iniciante (na minha assinatura).
Memory Leaks
Sempre termine as ações que iniciou.
Usou a função file_find? Use file_find_close().
Usou surfaces? Use surface_free().
Variáveis
Ao declarar uma variável, pense no seguinte:
- Vou precisar dela só agora (não há utilidade de usá-la depois)?
Use var variavel;
variavel=valor;
- Vou precisar usar somente nesse objeto e mais de uma vez?
Use variavel = valor;
- Vou precisar usar em todos os objetos (ou em mais de um)?
Em último caso use globalvar variavel;
variavel = valor;
Mesmo assim, prefira usar um objeto para guardar as variaveis que seriam globais e depois chame essas variaveis locais dele. Ex: sangue = objeto_vars.variavel;
Sons
Toque os sons com intervalos.
Não deixe o jogo sempre ficar tocando sons.
DLL
Use Dll's no seu jogo.
Elas são mais rápidas que as funções do Game Maker.
Constantes
Se algumas variáveis
Ds_list, Ds_map, etc
Use data structures ao em vez de arrays.
Seu jogo ficará mais leve.
display_set_colordepth(coldepth)
Use essa função com o valor 16, assim ganhará velocidade.
Sprites / Backgrounds
Deixe eles do menor tamanho possivel.
Retire até os espaços invisiveis.
Instâncias
Destrua as instâncias que você não usará mais.
Desative ( instance_deactivate_ ) as que não está usando (fora da view por exemplo).
execute_string, draw_get_pixel, surface_get_pixel, variable_local_set
Nunca use essas funções. Só em caso de vida ou morte.
Créditos:
Pedro Henrique
Cabreak
Derek
Até mais!
Última edição por PedroX em Ter 23 Jul 2013, 16:29, editado 2 vez(es)
Leia o Manual do Iniciante e a Lista de Tutoriais, para aprender bastante sobre o GM.
Recomendo o Manual completo das colisões, bem útil.
O exemplo Criar um chat (banir, kickar, etc) é interessante.
Para seu jogo ficar rápido e legal, aprenda a Aumentar o desempenho do seu jogo.
Aprenda a calcular a velocidade de suas animações
Entre para o Clube do Inglês:
Re: Melhorando o desempenho dos jogos
Very bom.
Muito bom monolo, vai ser muito bom pros jogos pesados aqui do fórum.
Mas tanho uma pergunta.
-As extensões são compiladas junto do source do jogo?
Porque fiz essa pergunta: Porque quando uso apenas um objeto, uma room, e uma função externa meu source ja pesa 2 MB!
Muito bom monolo, vai ser muito bom pros jogos pesados aqui do fórum.
Mas tanho uma pergunta.
-As extensões são compiladas junto do source do jogo?
Porque fiz essa pergunta: Porque quando uso apenas um objeto, uma room, e uma função externa meu source ja pesa 2 MB!
Re: Melhorando o desempenho dos jogos
Parabéns Pedro, muito bom artigo, axo que deve ser aprovado...
Só ressaltar tb, a importância de se usar o room_speed da maneira adequada... e se vc perceber que seu jogo está ficando muito pesado, faça um delta-time para que o jogo rode de maneira mais uniforme em PC´s diferentes.
Outra coisa, é usar a função exit; em códigos repetitivos e longos com várias checagens de possibilidades, isso faz com que o programa interrompa a leitura do código e prossiga ,ao ter uma condição satisfeita, dá pra se ganhar um bom tempo,agilidade e coesão com o uso dele.
Só ressaltar tb, a importância de se usar o room_speed da maneira adequada... e se vc perceber que seu jogo está ficando muito pesado, faça um delta-time para que o jogo rode de maneira mais uniforme em PC´s diferentes.
Outra coisa, é usar a função exit; em códigos repetitivos e longos com várias checagens de possibilidades, isso faz com que o programa interrompa a leitura do código e prossiga ,ao ter uma condição satisfeita, dá pra se ganhar um bom tempo,agilidade e coesão com o uso dele.
Re: Melhorando o desempenho dos jogos
luiz_100juizo escreveu:Very bom.
Muito bom monolo, vai ser muito bom pros jogos pesados aqui do fórum.
Mas tanho uma pergunta.
-As extensões são compiladas junto do source do jogo?
Porque fiz essa pergunta: Porque quando uso apenas um objeto, uma room, e uma função externa meu source ja pesa 2 MB!
@pergunta: deve ser por que a extenção .exe é bem mais pesada do que a extençao(por exemplo) .gmk
ambas reunem arquivos que podem dar um gameplay, mas a exe só serve para rodar o jogo e a gmk serve mais para compactar todas as informações.E também,quanto mais nova a versão do game maker, mais pesada é cada game feito nele.a ultima versão (8.1) com um objeto, 1 sprite e 1 room chega a 4mb.
@topico: muito bom pedro! e outra dica para melhorar o desempenho(e evitar travamento) é ir em: global game setting -> (aba) other -> game process priority. La marque a ultima opçao(highest).Mas neste caso é apenas recomendavel a quem tem um pc mais novo(senao pode travar muito no começo e deixar o resto dos processos do pc lentos).
Até
peixoto- Games Ranking :
Notas recebidas : D
Data de inscrição : 14/02/2010
Reputação : 3
Número de Mensagens : 911
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: Melhorando o desempenho dos jogos
outra dica para melhorar o desempenho(e evitar travamento) é ir em: global game setting -> (aba) other -> game process priority. La marque a ultima opçao(highest).
Isso pode deixar o computador instável.
Os outros processos vão ficar lentos e quando você fechar o jogo, os processos podem não voltar a ser como antes (a menos que você reinicie o pc).
Até mais!
Leia o Manual do Iniciante e a Lista de Tutoriais, para aprender bastante sobre o GM.
Recomendo o Manual completo das colisões, bem útil.
O exemplo Criar um chat (banir, kickar, etc) é interessante.
Para seu jogo ficar rápido e legal, aprenda a Aumentar o desempenho do seu jogo.
Aprenda a calcular a velocidade de suas animações
Entre para o Clube do Inglês:
Re: Melhorando o desempenho dos jogos
Pedrø escreveu:outra dica para melhorar o desempenho(e evitar travamento) é ir em: global game setting -> (aba) other -> game process priority. La marque a ultima opçao(highest).
Isso pode deixar o computador instável.
Os outros processos vão ficar lentos e quando você fechar o jogo, os processos podem não voltar a ser como antes (a menos que você reinicie o pc).
Até mais!
por isto recomendei a computadores mais novos com mais de 1 nucleo.
mas sem off topic: gostei mesmo do tutorial e vou utilisalo nos meus proximos games.
peixoto- Games Ranking :
Notas recebidas : D
Data de inscrição : 14/02/2010
Reputação : 3
Número de Mensagens : 911
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: Melhorando o desempenho dos jogos
Outra dica é usar a DLL:
http://gmc.yoyogames.com/index.php?showtopic=438215
Ela limpa muito bem a memória.
Aqui o consumo de memória diminuiu mais de um terço.
Até mais!
http://gmc.yoyogames.com/index.php?showtopic=438215
Ela limpa muito bem a memória.
Aqui o consumo de memória diminuiu mais de um terço.
Até mais!
Leia o Manual do Iniciante e a Lista de Tutoriais, para aprender bastante sobre o GM.
Recomendo o Manual completo das colisões, bem útil.
O exemplo Criar um chat (banir, kickar, etc) é interessante.
Para seu jogo ficar rápido e legal, aprenda a Aumentar o desempenho do seu jogo.
Aprenda a calcular a velocidade de suas animações
Entre para o Clube do Inglês:
Re: Melhorando o desempenho dos jogos
Ah, uma coisa boa também é que em vez de usar todas as condições no Step, usar os Triggers, pois eles não são verificados a cada Step, eles simplesmente são executados quando a condição for verdadeira. E também é bom pois mesmo no meio, no final ou no começo do Step, eles poder ser True, enquanto nos Step é somente a cada Step. Se a condição é True no Draw, quando usamos Triggers, ela é executada no mesmo instante, mas se for no Step, vai ser somente no próximo Step.
Re: Melhorando o desempenho dos jogos
Pedro, você deveria ganhar uma medalha. Sempre postando os tutoriais que eu adoraria que existissem.
Uma dica um pouco mais avançada é evitar o uso de loops, se possível. Aliás, o exemplo que vou dar - exemplo esse que eu uso muito - fica pra você avaliar se é mesmo mais rápido ou não:
Uma dica um pouco mais avançada é evitar o uso de loops, se possível. Aliás, o exemplo que vou dar - exemplo esse que eu uso muito - fica pra você avaliar se é mesmo mais rápido ou não:
- Código:
if !place_meeting(x+speed, y, obj_wall){ //se não colide
x+=speed //simplesmente anda e evita o loop
}
else for(i=0; i<speed; i+=1){ //se colide, anda pixel-a-pixel
if !place_meeting(x+sign(speed), y, obj_wall)
x+=sign(speed)
else break
}
saim- Games Ranking :
Notas recebidas : C-D-A-B
Data de inscrição : 14/01/2011
Reputação : 136
Número de Mensagens : 3033
Prêmios :
x 1 x 6 x 0
x 1 x 0 x 3
x 0 x 0 x 0
Re: Melhorando o desempenho dos jogos
Na verdade, se você usar em um jogo que tem paredes comuns, você pode fazer isso:
Obs: manda umas dicas de tutoriais que eu faço.
Não gosto de repetir assuntos já tratados, com exceção de tutoriais superficiais.
Então fico sem ideias. Sobre ID e OBJ, acho que vou fazer, a menos que você for.
- Código:
if !place_meeting(x+speed, y, obj_wall){ //se não colide
x+=speed //simplesmente anda e evita o loop
}
else
move_contact_solid(-sign(speed)*180, speed)
Obs: manda umas dicas de tutoriais que eu faço.
Não gosto de repetir assuntos já tratados, com exceção de tutoriais superficiais.
Então fico sem ideias. Sobre ID e OBJ, acho que vou fazer, a menos que você for.
Leia o Manual do Iniciante e a Lista de Tutoriais, para aprender bastante sobre o GM.
Recomendo o Manual completo das colisões, bem útil.
O exemplo Criar um chat (banir, kickar, etc) é interessante.
Para seu jogo ficar rápido e legal, aprenda a Aumentar o desempenho do seu jogo.
Aprenda a calcular a velocidade de suas animações
Entre para o Clube do Inglês:
Tópicos semelhantes
» 7 dicas para melhorar o desempenho dos seus jogos
» [Dicas]Aumentar o desempenho do PC e GM
» Desempenho do seu jogo no android
» Melhore o Desempenho do PC
» Problema de desempenho no android
» [Dicas]Aumentar o desempenho do PC e GM
» Desempenho do seu jogo no android
» Melhore o Desempenho do PC
» Problema de desempenho no android
GMBR :: Ensine & Aprenda :: Tutoriais :: Game Maker
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos