[TRFN]Chuva usando sprites

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

Qualidade [TRFN]Chuva usando sprites

Mensagem por TRFN em Qua 22 Fev 2012, 19:00

Chuva com sprites
Tutorial ensinando a criar sua própria chuva sem partículas ou efeitos pre-definidos .

Nível : Intermediário
Requerimentos : Conhecimento básico sobre for,if & else,Arrays, Variáveis .
Autor : Túlio Rodrigues de Freitas Nascimento .

- Previa -
Hoje compartilho com vocês uma descoberta que mesmo não sendo a melhor forma de execução seria uma ótima forma de estudo para se ter outras ideias.
Outro dia tentava criar um efeito de chuva com Sprites,e quebrando bastante a cabeça,projetei um sistema que cria instancias segundo o tamanho da View e projeta objetos para caírem,como gotas,mas e claro sem deixar o jogo uma lerdeza.

Espero que gostem do tutorial Exclamation

- Tutorial -
Então aqui estamos.Vamos primeiro entender a ideia deste sistema :
Existem dois objetos : o Objeto Chuva e o Objeto Gota .O objeto chuva manipula a ocorrência de chuva e decide as posições de cada qual gota.Já o objeto gota age naturalmente caindo e se recriando,como num Loop infinito.
Para que tudo ocorresse como esperado, precisaríamos de certos fatores,cujo seriam a criação da instancia da gota até cobrir a View,depois a determinação de cada posição inicial.

Como um mesmo objeto seria usado entre 900 e 1400 vezes,seria necessário que houvesse uma identificação de cada um,mas e claro sem pesar nos recursos do jogo.

Teríamos também que projeta-lo para se recriar e ao mesmo tempo seguir a View.
Como ele só muda a posição quando ele se destrói, teríamos que fazer objetos extras (fora da visão da View,no caso) para que o efeito ficasse mais preciso.

Crie um objeto chamado obj_chuva e que comecemos pelo create deste novo objeto :
Código:
alarm[0]=1; //inicia a contagem para criação das gotas .
ground=320; //grade para chuva (para deixa-la mais atraente) .


Até ai bem simples.
Começamos um alarm e definimos uma variável.Agora vamos para uma parte um pouco mais complexa .Usando o mesmo obj_chuva crie um evento Alarm 0 e crie um execute code com este código :
Código:
if(!variable_local_exists("forset"))then{
    variable_local_set("forset",0); //Taxa de repetição obrigatória (favor não mecher nesta parte.
} else if(forset>=8)then{
    exit //terminamos o evento no fim da contagem
} else if(forset<=8)then{
    forset+=1; //somamos +1 a contagem obrigatória.
}
/* Usamos um for agora para criarmos as gotas na room */
for(i=-ground;i<view_wview[0]+ground;i+=choose(2,4,8,10,14,16)){
if(!variable_local_exists("n_gotas"))then n_gotas=0;
else n_gotas+=1;
xx[n_gotas]=i-random_range(2,4);
yy[n_gotas]=choose(-irandom_range(16,32),-irandom_range(8,16),-irandom_range(4,8),-irandom_range(2,4));
inst[n_gotas]=instance_create(view_xview+xx[n_gotas],yy[n_gotas],obj_gotadechuva);
global.gota_x[n_gotas]=xx[n_gotas];
global.gota_y[n_gotas]=yy[n_gotas];
inst[n_gotas].id_da_gota=n_gotas;
}
alarm[0]=5;


Esse código cria todas as gotas na room e define uma identificação para cada qual.
O Objeto Chuva está pronto !
Agora precisamos criar as gotas que vão ser manipuladas(ou melhor,a gota que vai ser manipulada quase 1000 vezes) .

Crie um objeto chamado obj_gotadechuva nele coloque no create :
Código:
sprite_index=sprite_da_gota_de_chuva //use uma sprite com 5 imagens de gotas de chuva com tamanhos alternados.Tem uma de exemplo para download logo abaixo.Utilize de preferencia uma imagem branca para que a cor seja alterável por GML .
image_index=choose(0,1,2,3,4) //seleciona randomicamente uma sub-image da gota de chuva.
image_speed=0;
/* Definição da cor da gota (fica legal só se a imagem da gota for branca) */
intensidade=100;
vermelho=230-intensidade;
verde=255-intensidade;
azul=200+intensidade/4;
image_blend=make_color_rgb(vermelho,verde,azul)
/* definição da transparência dela */
image_alpha=random_range(.4,.8)
alarm[0]=5 //inicia um simples contador


Lembrando que,os códigos foram explicados acima.
Quanto a sprite,vou disponibilizar a que estava usando no meu jogo,que eu criei,mas peço que seja usada só para testes mesmo.
Link : http://www.mediafire.com/?bt3ifl84j737iw4

Vamos agora definir o Alarm 0 dele :
Código:
if(vspeed>7)exit //Se a velocidade atingir o limite,a gota para de acelerar neste momento e desce constantemente.
vspeed+=2 //soma velocidade vertical caso ela não tenha atingido a velocidade limite.
hspeed-=.75 //um pequeno efeito na gota para ficar mais agradável .
alarm[0]=1 //retorna caso não tenhamos atingido a velocidade adequada


Lembrando que as explicações já estão no código.
Agora vamos ao que interessa.
Crie um evento Outside_Room que contenha :
Código:
//uma checagem para garantirmos que é o momento certo.
if(y<room_height)exit
//uma especie de identificação para sabermos com qual gota estamos lidando.
ids[id_da_gota]=instance_create(view_xview+global.gota_x[id_da_gota],view_yview[0]+ystart,obj_gotadechuva)
//repassa a identificação para a sucessora.
ids[id_da_gota].id_da_gota=id_da_gota
//Destrói a antiga gota.
instance_destroy();


E pronto,agora basta você colocar o objeto obj_chuva e ver os resultados.
Vale lembrar que é indicado o uso de views e que quanto maior a View,mais arriscado .

Uma engine de exemplo : http://www.mediafire.com/?9valzyyv17rsw1j

Espero que tenham gostado.
Obrigado pela atenção. felicidade

Flws


Última edição por Rock Lee em Sab 07 Abr 2012, 01:37, editado 5 vez(es)

___________



TRFN

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

http://trfnsite.com

Voltar ao Topo Ir em baixo

Qualidade Re: [TRFN]Chuva usando sprites

Mensagem por luiz_eldorado em Qua 22 Fev 2012, 21:29

Gostei do tuto, é bom pra que tem o Lite.
Eu vi que tinha um efeito de andar um pouco para o lado. A pessoa nao pode modificar esse valor, entao voce poderia usar um image_angle. Assim daria pra ficar mudando pra mais forte e fraco. A mesma coisa pra quantidade de gotas, poderiam ficar mais forte ou rapidas.
Assim tenho um controle sobre a chuva em tempo real, mudando a velocidade do vento e a intensidade da chuva.
Até mais!

luiz_eldorado

Ranking : Nota C
Número de Mensagens : 928
Idade : 17
Data de inscrição : 30/07/2011
Notas recebidas : C
Reputação : 47
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 1

http://luizpontes.tk/

Voltar ao Topo Ir em baixo

Qualidade Re: [TRFN]Chuva usando sprites

Mensagem por TRFN em Qui 23 Fev 2012, 12:25

luiz_eldorado escreveu:Gostei do tuto, é bom pra que tem o Lite.
Eu vi que tinha um efeito de andar um pouco para o lado. A pessoa nao pode modificar esse valor, entao voce poderia usar um image_angle. Assim daria pra ficar mudando pra mais forte e fraco. A mesma coisa pra quantidade de gotas, poderiam ficar mais forte ou rapidas.
Assim tenho um controle sobre a chuva em tempo real, mudando a velocidade do vento e a intensidade da chuva.

Boa sugestão.
Já até havia pensado nisso anteriormente,mas não quero complicar demais,prefiro seguir essa linha de raciocínio mesmo para que o tutorial seja executado com mais facilidade.

Mas para alterar o sistema não é difícil,basta inverter a sprite.
Você pode criar sua própria e inverter os valores de velocidade vertical e horizontal (nada que um choose ou random não resolva) e assim fazer alternancias .

Obrigado por ler.

___________



TRFN

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

http://trfnsite.com

Voltar ao Topo Ir em baixo

Qualidade Re: [TRFN]Chuva usando sprites

Mensagem por Markituh em Qui 23 Fev 2012, 15:35

Bom tutorial. Como um bom programador, só não achei a identação muito boa, mas nada que comprometa muito. Só não entendi a utilidade de "ground" - indo pela lógica, é a direção das gotas de chuva, certo? Se não, explique "grade". Happy

Tutorial aprovado
Movido.

___________

"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

Qualidade Re: [TRFN]Chuva usando sprites

Mensagem por TRFN em Qui 23 Fev 2012, 15:44

Bom tutorial.
[...]
Tutorial aprovado
Movido.
Obrigado.

Como um bom programador, só não achei a identação muito boa, mas nada que comprometa muito.
Haveriam várias formas para criar as IDs,porem optei por esta pois foi a primeira que pensei.Ela é bem simples e fácil de entender , usa um for e algumas arrays apenas Razz

Só não entendi a utilidade de "ground" - indo pela lógica, é a direção das gotas de chuva, certo? Se não, explique "grade". Happy
Bom,acho que não falei muito dele.Na verdade essa variável cria objetos extras na room (mas fora da View) para que o efeito fique mais realista.Só criei essa variável para não complicar muito,porque senão ela nem ia existir : já faria isso diretamente.Essa variável só é usada no for mesmo (até onde eu me lembro xD)

___________



TRFN

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

http://trfnsite.com

Voltar ao Topo Ir em baixo

Qualidade Re: [TRFN]Chuva usando sprites

Mensagem por jharik em Ter 20 Mar 2012, 18:30

falllllllllll

jharik

Número de Mensagens : 25
Data de inscrição : 19/03/2012
Reputação : 1
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Qualidade Re: [TRFN]Chuva usando sprites

Mensagem por Benjamim_M em Qua 21 Mar 2012, 14:34

eu fiz tudo direitinho mas num caiu uma gota quando eu coloquei pra testar...
FAIL

Benjamim_M

Ranking : Nota D
Número de Mensagens : 57
Idade : 26
Data de inscrição : 16/02/2012
Notas recebidas : D
Reputação : 1
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

http://www.minegamesb.blogspot.com

Voltar ao Topo Ir em baixo

Qualidade Re: [TRFN]Chuva usando sprites

Mensagem por TRFN em Sab 07 Abr 2012, 01:37

Benjamim_M escreveu:eu fiz tudo direitinho mas num caiu uma gota quando eu coloquei pra testar...
Engraçado,eu testei e funcionou perfeitamente.Você seguiu passo-a-passo o que eu pedi ?
Se quiser comparar,baixe a engine que fiz enquanto executava o tutorial para testa-lo.
O download da engine de demonstração está no próprio tutorial.
Flws

___________



TRFN

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

http://trfnsite.com

Voltar ao Topo Ir em baixo

Qualidade Re: [TRFN]Chuva usando sprites

Mensagem por peixoto em Dom 15 Abr 2012, 21:05

Otimo tutorial TRFN!

Teria como fazer o mesmo usando o draw?(sem sprites)

usando só o draw,fica beeem mais leve!

peixoto

Ranking : Nota D
Número de Mensagens : 911
Idade : 21
Data de inscrição : 14/02/2010
Notas recebidas : D
Reputação : 3
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Qualidade Re: [TRFN]Chuva usando sprites

Mensagem por TRFN em Sex 04 Maio 2012, 22:16

peixoto escreveu:Otimo tutorial TRFN!

Teria como fazer o mesmo usando o draw?(sem sprites)

usando só o draw,fica beeem mais leve!

Ah vlw.
Depois posso estudar possibilidades de não se usar objetos.Se conseguir,modifico esse.

___________



TRFN

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

http://trfnsite.com

Voltar ao Topo Ir em baixo

Qualidade Re: [TRFN]Chuva usando sprites

Mensagem por Conteúdo patrocinado Hoje à(s) 22:27


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