Conectar-se
Quem está conectado
25 usuários online :: 1 usuário cadastrado, Nenhum Invisível e 24 Visitantes

WellingtonBecker

Ver toda a lista


Compartilhe
Ver o tópico anteriorIr em baixoVer o tópico seguinte
avatar
Data de inscrição : 02/01/2010
Número de Mensagens : 224
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 0

Prêmios
   :
   :
   :
Ver perfil do usuáriohttp://www.mindcrop.com.br

Como deixar um jogo mais rápido?

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!
avatar
Ranking : Nota C
Notas recebidas : D + D + C + C + D + B
Data de inscrição : 28/04/2011
Número de Mensagens : 913
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 41

Prêmios
   : 1
   : 0
   : 0
Ver perfil do usuáriohttp://mrbrumgames.blogspot.com/

Re: Como deixar um jogo mais rápido?

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.
avatar
Data de inscrição : 02/01/2010
Número de Mensagens : 224
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 0

Prêmios
   :
   :
   :
Ver perfil do usuáriohttp://www.mindcrop.com.br

Re: Como deixar um jogo mais rápido?

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...
avatar
Ranking : Sem avaliações
Data de inscrição : 08/06/2008
Número de Mensagens : 2314
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 100

Prêmios
   : 3
   : 0
   : 1
Ver perfil do usuáriohttp://blackcapapps.blogspot.com.br/

Re: Como deixar um jogo mais rápido?

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.
avatar
Ranking : Nota C
Notas recebidas : C
Data de inscrição : 18/01/2012
Número de Mensagens : 20
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 1

Prêmios
   : 0
   : 0
   : 0
Ver perfil do usuáriohttp://redwordgames.weebly.com

Re: Como deixar um jogo mais rápido?

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)
avatar
Ranking : Nota C
Notas recebidas : C
Data de inscrição : 18/01/2012
Número de Mensagens : 20
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 1

Prêmios
   : 0
   : 0
   : 0
Ver perfil do usuáriohttp://redwordgames.weebly.com

Re: Como deixar um jogo mais rápido?

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.
avatar
Data de inscrição : 02/01/2010
Número de Mensagens : 224
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 0

Prêmios
   :
   :
   :
Ver perfil do usuáriohttp://www.mindcrop.com.br

Re: Como deixar um jogo mais rápido?

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!
Ver o tópico anteriorVoltar ao TopoVer o tópico seguinte
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum