Como deixar um jogo mais rápido?

Ver o tópico anterior Ver o tópico seguinte Ir em baixo

Como deixar um jogo mais rápido?

Mensagem por Meokor em Seg 20 Fev 2012, 22:11

Olá a todos! Laughing

Pessoal estou desenvolvendo um projeto de jogo com meu irmão, mas pelo que estamos pensando em fazer, pode ser que o o jogo fique um pouco pesado. Então, que tipo de dicas vocês podem me dar para que possamos "otimizar" bem o jogo e ele não fique tão pesado?

( Ex: Sei que menos códigos no evento "Step" é melhor. Acredito que quando desabilitamos os objetos que estão fora do "View" também aumente a performance.)

Acredito que deva ter muitas outras dicas para um jogo mais rápido...

Agradeço a atenção de todos, aguardo respostas.
Forte Abraço!

Meokor

Número de Mensagens : 224
Idade : 24
Data de inscrição : 02/01/2010
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   :
   :
   :

http://www.mindcrop.com.br

Voltar ao Topo Ir em baixo

Re: Como deixar um jogo mais rápido?

Mensagem por Mr.Brum em Seg 20 Fev 2012, 22:33

Dê uma olhada neste tópico do Pedro:
http://gmbr.forumeiros.com/t19480-melhorando-o-desempenho-dos-jogos

ele ensina várias formas de deixar o jogo mais leve.

Mr.Brum

Ranking : Nota C
Número de Mensagens : 913
Idade : 25
Data de inscrição : 28/04/2011
Notas recebidas : D + D + C + C + D + B
Reputação : 41
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 0
   : 0

http://mrbrumgames.blogspot.com/

Voltar ao Topo Ir em baixo

Re: Como deixar um jogo mais rápido?

Mensagem por Meokor em Seg 20 Fev 2012, 22:40

Valeu ae mrbrum22!

Era exatamente isso que eu estava precisando!
Bom, se alguém souber de mais algumas dicas estou sempre no aguardo.

Abraços...

Meokor

Número de Mensagens : 224
Idade : 24
Data de inscrição : 02/01/2010
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   :
   :
   :

http://www.mindcrop.com.br

Voltar ao Topo Ir em baixo

Re: Como deixar um jogo mais rápido?

Mensagem por Kabeção em Ter 21 Fev 2012, 11:29

Usar ds_grid ou outras datas estruturadas é muito mais rápida do que muitas variáveis ou uma array. Elas são muito mais fáceis de se manipular.

Se você precisa usar a função execute_string com um código grande muitas vezes em um evento como o Step, seu jogo vai perder drasticamente a velocidade, é mais rápido você criar um novo objeto (em tempo de execução usando a função object_add) e usando object_event_add e coloque o código que seria usada na execute_string nele. O ganho de performance é enorme.

Background menores são desenhados mais rápido que os maiores. Se você precisa usar um background muito grande, divida-o em pedaços e desenhe-os juntos no jogo normalmente.

Embora não pareça, surfaces e draw_primitive são funções bem convenientes e rápidas se usadas corretamente, é possível criar diversos efeitos interessantes enquanto o jogo executa. Se você não sabe usar procure aprender porque são um dos melhores recursos gráficos do GM.

Usar o sistema de partículas é muito mais rápido que usar muitos objetos como partículas.

Evite processos desnecessários, veja como exemplo as páginas da internet, elas só executam algo quando a entrado do usuário, por exemplo: um menu deslizante só se abre quando o mouse esta posicionada encima dele, se não estiver o menu não tem nada o que executar então não o faço ficar processando códigos nesse momento.
Um exemplo disso no GM:
Código:
// Inimigo
// Event Step
mira = point_direction(x,y,player.x,player.y);
preparar ataque(arma2);
sortear_item_que_vai_cair();
// .......
Mas não há sentido em tudo isso se o jogador está longe do inimigo então:
Código:
// Inimigo
// Event Step
if distance_to_object(objPlayer) <= 50 {
mira = point_direction(x,y,player.x,player.y);
preparar ataque(arma2);
// .......
}
if player_me_matou sortear_item_que_vai_cair();

Além de performance você também precisa se preocupar com praticidade. O melhor exemplo de praticidade que me vem a cabeça agora é a boa e velha matemática sendo usada de forma inteligente. Um exemplo é o movimento do jogador, se ele pode andar livremente então checar teclas pressionadas a todo momento é algo inevitável, então use esse problema para tornar as coisas mais práticas para você.
Código:
if keyboard_check(vk_left) x -= 4;
if keyboard_check(vk_right) x += 4;
if keyboard_check(vk_up) y -= 4;
if keyboard_check(vk_down) y += 4;
Não há problemas no código acima, ela não vai "pesar" seu jogo mas mesmo assim pode ser otimizado:
Código:
x += (keyboard_check(vk_right)-keyboard_check(vk_left))*velocidade;
y += (keyboard_check(vk_down)-keyboard_check(vk_up))*velocidade;
Essa forma é muito mais prática, sendo que keyboard_check retorna 1 ou 0 caso a tecla esteja apertada ou não, basta imaginar o resultado para entender.
Código:
// x += (keyboard_check(vk_right)-keyboard_check(vk_left))*velocidade;
// Tecla vk_left foi pressionada então
x += (0-1)*4;
// x += -4;

// Tecla vk_right foi pressionada então
x += (1-0)*4;
// x += 4;

// As duas foram pressionadas
x += (1-1)*4;
// x += 0; não há movimento
Além disso é mais fácil controlar, se em algum momento você quer proibir o movimento do jogador então:
Código:
x += (keyboard_check(vk_right)-keyboard_check(vk_left))*velocidade*livre
Imaginando o resultado:
Código:
x += (0-1)*4*0;  // livre é false, então 0
// x += 0; não há movimento, todo multiplicado por 0 retorna 0
x += (0-1)*4*1 // livre é true, então 1
// x += -4; se está livre, então o resultado é multiplicado por 1 e todo vezes 1 é ele mesmo

with é definitivamente um recurso poderoso. Você pode usa-lo não só com um objeto mas com todos do mesmo tipo, todos os parentes de um certo objeto ou até mesmo todos de uma vez usando o "all" com apenas algumas linhas de código.
Um simples
Código:
with (all) instance_destroy()
destruiria todos os objetos do jogo de um vez.

Um
Código:
valor = max(0,min(10,valor));
é melhor que um
Código:
if valor < 0 valor = 0;
if valor > 10 valor = 10;

Isso são boas práticas de programação, não são exatamente um meio de aumentar a performance do jogo mas são um meio de otimizar o código o que aumenta a performance do próprio programador no projeto.

Kabeção

Ranking : Sem avaliações
Número de Mensagens : 2314
Data de inscrição : 08/06/2008
Reputação : 100
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 3
   : 0
   : 1

http://blackcapapps.blogspot.com.br/

Voltar ao Topo Ir em baixo

Re: Como deixar um jogo mais rápido?

Mensagem por Gustavo Gamer em Ter 21 Fev 2012, 13:20

Você poderia usar o Room Speed.


Última edição por Gustavo Gamer em Ter 21 Fev 2012, 13:24, editado 1 vez(es)

Gustavo Gamer

Ranking : Nota C
Número de Mensagens : 20
Idade : 16
Data de inscrição : 18/01/2012
Notas recebidas : C
Reputação : 1
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

http://redwordgames.weebly.com

Voltar ao Topo Ir em baixo

Re: Como deixar um jogo mais rápido?

Mensagem por Gustavo Gamer em Ter 21 Fev 2012, 13:21

Você poderia usar o Room Speed, se o propósito for deixar ele com mais velocidade.

Editado por Joton
Cuidado com o post duplo, sugiro que leias as regras para entender como funciona o fórum.

Gustavo Gamer

Ranking : Nota C
Número de Mensagens : 20
Idade : 16
Data de inscrição : 18/01/2012
Notas recebidas : C
Reputação : 1
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

http://redwordgames.weebly.com

Voltar ao Topo Ir em baixo

Re: Como deixar um jogo mais rápido?

Mensagem por Meokor em Ter 21 Fev 2012, 13:53

Parceiros, muito obrigado pelas dicas!! Very Happy

Kabeção: Obrigado pelo tutorial postado ae, vai ser de grande proveito pra mim durante toda a criação do meu jogo!

Forte Abraço!

Meokor

Número de Mensagens : 224
Idade : 24
Data de inscrição : 02/01/2010
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   :
   :
   :

http://www.mindcrop.com.br

Voltar ao Topo Ir em baixo

Re: Como deixar um jogo mais rápido?

Mensagem por Conteúdo patrocinado Hoje à(s) 09:39


Conteúdo patrocinado


Voltar ao Topo Ir em baixo

Ver o tópico anterior Ver o tópico seguinte Voltar ao Topo

- Tópicos similares

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