Carregando o necessário

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

Carregando o necessário

Mensagem por Davichococat em Dom 22 Jan 2012, 17:59

(blah blah blah começa aqui)

Olá, pessoal. Andei esses dias trabalhando no meu novo (e primeiro) projeto.

Porém, o meu jogo pesa muito na memória. "Porque?", você deve estar se perguntando.

O mapa(a room) do meu jogo tem 64000 pixels de largura e 48000 pixels de altura. Sei, é muito, mas não pesa na memória. Tive ótima estabilidade usando esse sistema. Porém, essa room é cheia, realmente e literalmente cheia de objetos.

A ponto de cubrir 1/9 da mesma.

Então eu fiz as contas. Um objeto da room é 16x16. Eles, juntos iram encher uma área equivalente a uns 1/9 da room, em altura, e toda a room, em largura.

Ou seja, uns 341333333 objetos, sei lá, sou ruim em matématica mesmo. Mas de qualquer forma, é muuito objeto.

Só que,o quê o player vê dessa room é apenas uma view 640x480.

(blah blah blah termina aqui)


Agora vai a super-mega dúvida hiper-ultra complicada díficil de explicar e responder Rolling Eyes .

Bem, a primeira coisa que pensei era fazer um sistema em que apenas os objetos entre a visão do player fossem carregados, ou "existissem". Ou seja, o que o player não vê, não existe, não ocupa espaço, não ocupa memória.

Pórem, o jogo tem inimigos, também. E eu não queria que eles ficassem parados no espaço e tempo se o player não conseguisse ver-los. Quero que eles continuassem a se mover, idependente do player estar olhando ou não.

Ah, e quando eu digo "não existe", eu queria que deixasse de ocupar memória, e não ser deletado. Não quero que os objetos sejam deletados se saírem do campo de visao do player.

Então, alguem tem alguma ideia de como posso fazer isso? Ou, pelo menos alguma coisa que me ajudasse na super missão de fazer o jogo funcionar sem a necessidade de um computador do Chuck Norris?

Agradeço desde já.

Davichococat

Número de Mensagens : 182
Data de inscrição : 29/12/2011
Reputação : 1
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

http://www.google.com

Voltar ao Topo Ir em baixo

Re: Carregando o necessário

Mensagem por Markituh em Dom 22 Jan 2012, 18:13

Tem dois modos: ou você usa a DLL cleanmem

ou você dá instance_deactivate_region no que está fora da room. Porém, como o deactivate region, o objeto vai parar de ser processado.

De qualquer forma, mesmo se você fizer o objeto deixar de ser desenhado, a posição, direção, velocidade etc ainda vão continuar sendo processadas.

___________

"Não deixe para amanhã o que se pode fazer hoje"

Links úteis:
Índice de Tutoriais
Manual online do GMS

Markituh

Ranking : Sem avaliações
Número de Mensagens : 2183
Data de inscrição : 11/10/2009
Reputação : 106
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: Carregando o necessário

Mensagem por Davichococat em Dom 22 Jan 2012, 18:20

Ótimo. Como os objetos 16x16 que eu disse são completamente estáticos, acho que vai aliviar um pouquinho.

Mas você acha que deativar as instances é suficiente? E a cleanmen, ela vai instruir o GM à parar de processar tudo que esteja fora da view?

Além disso, quais são os parametros da função? Dei um search no manual mas não achei nada.

Ah, e estou usando o GM 8.0. Essa função existe?

Davichococat

Número de Mensagens : 182
Data de inscrição : 29/12/2011
Reputação : 1
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

http://www.google.com

Voltar ao Topo Ir em baixo

Re: Carregando o necessário

Mensagem por Markituh em Dom 22 Jan 2012, 18:36

Não vou dizer que é a solução divina, mas funciona bem, principalmente que você disse que os objetos são estáticos. E a cleanmem, na verdade a função dela é limpar a memória que não é usada, deixando o jogo mais leve. Instance_deactivate + cleanmen = um bom desempenho.

Não achou? Tem certeza de que digitou o nome certo? = instance_deactivate_region. Os argumentos são:
Código:
instance_deactivate_region(left,top,width,height,inside,notme)
Se souber um pouco de inglês, deve saber os valores que vão em cada argumento, não?

___________

"Não deixe para amanhã o que se pode fazer hoje"

Links úteis:
Índice de Tutoriais
Manual online do GMS

Markituh

Ranking : Sem avaliações
Número de Mensagens : 2183
Data de inscrição : 11/10/2009
Reputação : 106
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: Carregando o necessário

Mensagem por saim em Dom 22 Jan 2012, 18:41

Com instance_deactivate_region, você desativa as instâncias que não estão na view.
Depois, você ativa as instâncias da view com instance_activate_region e, finalmente, ativa os inimigos com instance_activate_object.
Lembre-se que desativar um piso enquanto mantém um inimigo ativo pode fazer o inimigo cair, se ele tiver códigos de gravidade.

saim

Ranking : Nota B
Número de Mensagens : 2964
Idade : 38
Data de inscrição : 14/01/2011
Notas recebidas : C-D-A-B
Reputação : 121
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 0
   : 3

Voltar ao Topo Ir em baixo

Re: Carregando o necessário

Mensagem por Davichococat em Dom 22 Jan 2012, 18:56

Bem, obrigado pela ajuda. Na verdade tinha digitado a função de modo incorreto, por isso não achei no manual.

A solução vai ser fazer com que os inimigos tenham sua própia "view", mas muito menor. Assim resolverei o problema da gravidade e colisões.

Queria saber também se a função é lenta, e se é uma boa idéia colocar no step com esse mapa colossal que o jogo tem.

Davichococat

Número de Mensagens : 182
Data de inscrição : 29/12/2011
Reputação : 1
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

http://www.google.com

Voltar ao Topo Ir em baixo

Re: Carregando o necessário

Mensagem por saim em Dom 22 Jan 2012, 19:05

Essas funções existem só pra agilizar o processamento, não deve ser lenta.
Mas nunca testei, então não posso dizer com certeza.

saim

Ranking : Nota B
Número de Mensagens : 2964
Idade : 38
Data de inscrição : 14/01/2011
Notas recebidas : C-D-A-B
Reputação : 121
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 0
   : 3

Voltar ao Topo Ir em baixo

Re: Carregando o necessário

Mensagem por Conteúdo patrocinado Hoje à(s) 14:32


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