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

Esqueci-me da senha

Últimos assuntos
» Procuro Programador de game maker
por Wou Sex 15 Mar 2024, 10:27

» Retorno da GMBR!!!
por vinians Qui 14 Mar 2024, 19:07

» Mod APK
por gamerainha Qua 13 Mar 2024, 06:30

» Mudar cor de apenas uma palavra
por lunalol Sex 01 Mar 2024, 13:42

» Aceito pedidos de sprites (Com exemplos meus)
por Sevilha Qua 28 Fev 2024, 12:17

» Inventário simples
por Isquilo_Roedor Qui 22 Fev 2024, 15:18

» Problemas na programaçnao de inimigo [jogo DOOM LIKE]
por Black Mirror Dom 11 Fev 2024, 13:34

» ANDROID MULTI TOUCH
por DiegoBr Dom 04 Fev 2024, 12:13

» Servidor de Discord do fórum?
por Lighter Sáb 27 Jan 2024, 17:18

» Save e Load Json
por Klinton Rodrigues Qui 25 Jan 2024, 11:12

» Colisão com mais de um objeto
por aminaro Seg 22 Jan 2024, 15:02

» Oi sou novo aqui
por Thiago Silveira Alexandre Sáb 20 Jan 2024, 20:55

» Como acessar conteudo comprado no marketplace
por macmilam Sex 19 Jan 2024, 07:42

» Devlogs em vídeos do Block Room
por Joton Seg 15 Jan 2024, 16:56

» Alguém aqui já ganha dinheiro com seus games?
por Joton Seg 15 Jan 2024, 16:49

» ACERVO GMBR MAGAZINE
por Joton Qui 11 Jan 2024, 19:21

» como aumentar o obj sem aumentar a colisão??
por GabrielXavier Qua 10 Jan 2024, 07:21

» Asteroid Core - Early Acesse Update [0.2.0.0]
por JOZ. Seg 08 Jan 2024, 14:39

» Versionamento de código com GitHub
por GabrielXavier Seg 08 Jan 2024, 07:32

» Rio Rise - novo launcher do Gta San Andreas SAMP Brasil
por kolesovsup Sex 29 Dez 2023, 07:16

» a funçao approach ainda existe?
por PEDRINDEV Ter 26 Dez 2023, 20:05

» Inimigo ataca até por trás! >:(
por saim Sex 22 Dez 2023, 08:55

» [RESOLVIDO]Spawn após morte
por Deception_1999 Dom 17 Dez 2023, 16:39

» Remunerado $$$ - Procuro programador para ajudar a "montar" um jogo
por theguitarmester Sáb 02 Dez 2023, 16:28

» Game maker nao abre
por Cerf Dom 26 Nov 2023, 12:01


Melhorando o desempenho dos jogos

+2
Luiz A. Oliveira
PedroX
6 participantes

Ir para baixo

Melhorando o desempenho dos jogos Empty Melhorando o desempenho dos jogos

Mensagem por PedroX 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 B

Notas recebidas : C+B
Data de inscrição : 26/07/2008
Reputação : 311
Número de Mensagens : 6086
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

https://web.whatsapp.com/send?phone=5519995935953&text=Pedro

Ir para o topo Ir para baixo

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

Mensagem por Luiz A. Oliveira 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/

Ir para o topo Ir para baixo

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

Mensagem por Mr.Brum 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/

Ir para o topo Ir para baixo

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

Mensagem por peixoto 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

Ir para o topo Ir para baixo

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

Mensagem por PedroX 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 B

Notas recebidas : C+B
Data de inscrição : 26/07/2008
Reputação : 311
Número de Mensagens : 6086
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

https://web.whatsapp.com/send?phone=5519995935953&text=Pedro

Ir para o topo Ir para baixo

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

Mensagem por peixoto 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

Ir para o topo Ir para baixo

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

Mensagem por PedroX 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 B

Notas recebidas : C+B
Data de inscrição : 26/07/2008
Reputação : 311
Número de Mensagens : 6086
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

https://web.whatsapp.com/send?phone=5519995935953&text=Pedro

Ir para o topo Ir para baixo

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

Mensagem por luiz_eldorado 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/

Ir para o topo Ir para baixo

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

Mensagem por saim 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 : 136
Número de Mensagens : 3033
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

Ir para o topo Ir para baixo

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

Mensagem por PedroX 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 B

Notas recebidas : C+B
Data de inscrição : 26/07/2008
Reputação : 311
Número de Mensagens : 6086
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

https://web.whatsapp.com/send?phone=5519995935953&text=Pedro

Ir para o topo Ir para baixo

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

Mensagem por Conteúdo patrocinado


Conteúdo patrocinado


Ir para o topo Ir para baixo

Ir para o topo

- Tópicos semelhantes

 
Permissões neste sub-fórum
Não podes responder a tópicos