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
» player não consegue andar
por 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

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 : 6087
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 : 915
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 : 6087
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 : 6087
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 : 6087
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