Utilizando a função instance_deactivate_region e instance_activate_region é possível desativar/ativar todos objetos que estiverem dentro/fora de uma área retangular determinada pelo usuário. Esse recurso pode ser utilizado para otimizar os jogos evitando que instâncias não presentes na tela sejam carregadas, o que somente causaria um desperdício de memória e, eventualmente, travaria o jogo.
Este tutorial tem como objetivo explicar como desativar objetos fora da view e reativá-los dentro dela de maneira eficiente.
left - Posição x do lado esquerdo do retângulo.
top - Posição y da parte superior do retângulo.
height - Altura do retângulo.
inside - true para desativar objetos dentro do retângulo, false para os de fora.
notme - true para também desativar a instância que utiliza a função, false para não inluí-la.
A instance_deactivate_region é igual, somente não possui o argumento notme.
Para desativarmos os objetos fora do nosso campo de visão e reativá-los quando entrarem na view usaremos as funções da view; caso não saiba utilizá-las veja na página de Funções.
obj_jogador
Step Event
instance_deactivate_region(view_xview[0] - 200, view_yview[0] - 200, view_wview[0] + 400, view_hview[0] + 400, false, true)
instance_activate_region(view_xview[0] - 200, view_yview[0] - 200, view_wview[0] + 400, view_hview[0] + 400, true)
Os valores 200 e 400 servem para aumentar a tela de ativação, para não acontecer das instâncias simplesmente aparecerem na tela, e devem ser alterados de acordo com sua necessidade. Isso vai depender do tamanho dos seus objetos, pois se você se aproximar de um avião, supondo que seu jogo seja Top-Down e que a largura da asa do avião seja maior que 200, não vai querer que a asa dele só fique visível quando o centro do avião aparecer na tela, então precisamos reativá-lo antes, aumentando a tela de ativação. Observe que, se tirarmos 200 da posição inicial x/y é necessário adicionar 400 ao tamanho do retângulo; 200 para chegar até a view mais o tamanho da view e mais 200 para depois da view.
Dica: É possível que alguns de vocês precisem desativar instâncias, como inventários, e verão que elas sempre serão reativadas, pois estão dentro da view. A solução que encontrei foi, ao invés de desativá-las, enviá-las para uma posição negativa, que no meu caso é x = -10000. Dessa maneira elas serão desativadas automaticamente por estarem fora da view e, por se tratar de uma posição negativa, nunca teremos acesso a elas. Lembre-se de utilizar um número alto pois é possível que sua tela de ativação chegue às posições negativas.
Dica: É possível que alguns de vocês precisem desativar instâncias, como inventários, e verão que elas sempre serão reativadas, pois estão dentro da view. A solução que encontrei foi, ao invés de desativá-las, enviá-las para uma posição negativa, que no meu caso é x = -10000. Dessa maneira elas serão desativadas automaticamente por estarem fora da view e, por se tratar de uma posição negativa, nunca teremos acesso a elas. Lembre-se de utilizar um número alto pois é possível que sua tela de ativação chegue às posições negativas.
Queria saber como faz para não desativar certos objetos??
ResponderExcluir