GMBR
Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.
Conectar-se

Esqueci minha senha

Últimos assuntos
» [Ideia] Concurso para relembrar os bons tempos
por vinians Hoje à(s) 09:40

» GMBR 2020 (jogo comemorativo)
por Diemorth Hoje à(s) 09:24

» Rodar o jogo em iOS
por matheushdj Ontem à(s) 20:04

» [XCREATOR] [JAM] [UPD] Farm Defense
por vinians Qui 09 Jul 2020, 23:31

» Dúvida sobre GameMaker
por Super Games Qui 09 Jul 2020, 19:32

» Apresentação de Rojas231
por Super Games Qui 09 Jul 2020, 19:17

» Vender extensões no marketplace da yoyo games?
por Willy Qui 09 Jul 2020, 09:55

» [DOWNLOAD] Manual Game Maker 8 traduzido
por matheushdj Qua 08 Jul 2020, 21:41

» Máquina de estado/State Machine no Unity
por theguitarmester Ter 07 Jul 2020, 22:17

» Eu sou o MoisesBR
por GabrielXavier Ter 07 Jul 2020, 22:04

» Melhor pontuação
por matheushdj Seg 06 Jul 2020, 22:23

» Problemas com animação e ataque
por moisesBR Seg 06 Jul 2020, 22:05

» Ideia para futuros concursos
por moisesBR Seg 06 Jul 2020, 20:51

» Para quem quer mexer com a Godot
por Super Games Seg 06 Jul 2020, 09:45

» MOON - [Indie Game Solo]
por vinians Seg 06 Jul 2020, 08:40


Melhorando o desempenho dos jogos

Ir em baixo

Melhorando o desempenho dos jogos Empty Melhorando o desempenho dos jogos

Mensagem por PedroX em Ter 15 Nov 2011, 12:37

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:
Código:
vida = level/4 + sin(angle)/cos(angle); //mais lento
Use:
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;
Use:
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 ironicamente 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!


Ú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:
PedroX
PedroX

Games Ranking : Nota C

Notas recebidas : C+B
Data de inscrição : 26/07/2008
Reputação : 302
Número de Mensagens : 6064
Prêmios : Melhorando o desempenho dos jogos Empty

Medalhas x 0 Tutoriais x 17 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

Melhorando o desempenho dos jogos Empty Re: Melhorando o desempenho dos jogos

Mensagem por Luiz A. Oliveira em Ter 15 Nov 2011, 12:52

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! affraid
Luiz A. Oliveira
Luiz A. Oliveira

Games Ranking : Nota C

Notas recebidas : D-B-C
Data de inscrição : 08/09/2010
Reputação : 5
Número de Mensagens : 914
Prêmios : Melhorando o desempenho dos jogos Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

http://luizgm.blogspot.com/

Voltar ao Topo Ir em baixo

Melhorando o desempenho dos jogos Empty Re: Melhorando o desempenho dos jogos

Mensagem por Mr.Brum em Ter 15 Nov 2011, 12:59

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.
Mr.Brum
Mr.Brum

Games Ranking : Nota C

Notas recebidas : D + D + C + C + D + B
Data de inscrição : 28/04/2011
Reputação : 41
Número de Mensagens : 914
Prêmios : Melhorando o desempenho dos jogos Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 1 Prata x 0 Bronze x 0

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

http://mrbrumgames.blogspot.com/

Voltar ao Topo Ir em baixo

Melhorando o desempenho dos jogos Empty Re: Melhorando o desempenho dos jogos

Mensagem por peixoto em Ter 15 Nov 2011, 13:09

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! affraid

@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
peixoto

Games Ranking : Nota D

Notas recebidas : D
Data de inscrição : 14/02/2010
Reputação : 3
Número de Mensagens : 911
Prêmios : Melhorando o desempenho dos jogos Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

Melhorando o desempenho dos jogos Empty Re: Melhorando o desempenho dos jogos

Mensagem por PedroX em Ter 15 Nov 2011, 13:16

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:
PedroX
PedroX

Games Ranking : Nota C

Notas recebidas : C+B
Data de inscrição : 26/07/2008
Reputação : 302
Número de Mensagens : 6064
Prêmios : Melhorando o desempenho dos jogos Empty

Medalhas x 0 Tutoriais x 17 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

Melhorando o desempenho dos jogos Empty Re: Melhorando o desempenho dos jogos

Mensagem por peixoto em Ter 15 Nov 2011, 13:17

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
peixoto

Games Ranking : Nota D

Notas recebidas : D
Data de inscrição : 14/02/2010
Reputação : 3
Número de Mensagens : 911
Prêmios : Melhorando o desempenho dos jogos Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

Melhorando o desempenho dos jogos Empty Re: Melhorando o desempenho dos jogos

Mensagem por PedroX em Ter 15 Nov 2011, 13:59

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!

_________________


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:
PedroX
PedroX

Games Ranking : Nota C

Notas recebidas : C+B
Data de inscrição : 26/07/2008
Reputação : 302
Número de Mensagens : 6064
Prêmios : Melhorando o desempenho dos jogos Empty

Medalhas x 0 Tutoriais x 17 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

Melhorando o desempenho dos jogos Empty Re: Melhorando o desempenho dos jogos

Mensagem por luiz_eldorado em Qua 16 Nov 2011, 19:50

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.
luiz_eldorado
luiz_eldorado

Games Ranking : Nota C

Notas recebidas : C
Data de inscrição : 30/07/2011
Reputação : 47
Número de Mensagens : 928
Prêmios : Melhorando o desempenho dos jogos Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 1

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

http://luizpontes.tk/

Voltar ao Topo Ir em baixo

Melhorando o desempenho dos jogos Empty Re: Melhorando o desempenho dos jogos

Mensagem por saim em Qua 16 Nov 2011, 21:27

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:
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
saim

Games Ranking : Nota B

Notas recebidas : C-D-A-B
Data de inscrição : 14/01/2011
Reputação : 121
Número de Mensagens : 2964
Prêmios : Melhorando o desempenho dos jogos Empty

Medalhas x 1 Tutoriais x 6 Moedas x 0

Ouro x 1 Prata x 0 Bronze x 3

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

Melhorando o desempenho dos jogos Empty Re: Melhorando o desempenho dos jogos

Mensagem por PedroX em Qua 16 Nov 2011, 22:17

Na verdade, se você usar em um jogo que tem paredes comuns, você pode fazer isso:
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:
PedroX
PedroX

Games Ranking : Nota C

Notas recebidas : C+B
Data de inscrição : 26/07/2008
Reputação : 302
Número de Mensagens : 6064
Prêmios : Melhorando o desempenho dos jogos Empty

Medalhas x 0 Tutoriais x 17 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

Melhorando o desempenho dos jogos Empty Re: Melhorando o desempenho dos jogos

Mensagem por Conteúdo patrocinado


Conteúdo patrocinado


Voltar ao Topo Ir em baixo

Voltar ao Topo

- Tópicos similares

 
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum