Entrar
Últimos assuntos
» player não consegue andarpor lovn7 Qui 21 Nov 2024, 13:33
» É possível fazer istó no game maker
por William Lima Qui 21 Nov 2024, 10:56
» Rio Rise - novo launcher do Gta San Andreas SAMP Brasil
por Lua Sáb 16 Nov 2024, 20:22
» (Resolvido) Cenario longo x Texture Pages
por josuedemoraes Sáb 16 Nov 2024, 15:31
» Kids' band
por Adilson Lucindo Santos Sex 15 Nov 2024, 12:23
» (RESOLVIDO) Engasgos-Troca de Sprites/animações
por josuedemoraes Ter 12 Nov 2024, 01:49
» Block Room - DEMO
por Joton Qua 06 Nov 2024, 22:58
» Game Infinito vertical (subindo)
por macmilam Sáb 26 Out 2024, 12:36
» Retorno da GMBR!!!
por Dancity Ter 22 Out 2024, 16:36
» Máquina de estados
por aminaro Qui 10 Out 2024, 13:33
» como faço pra um objeto colidir com o outro e diminuir a vida do player ?
por josuedemoraes Qui 03 Out 2024, 16:51
» RESOLVIDO: Colisão com objetos moveis
por josuedemoraes Qua 02 Out 2024, 20:28
» Crypt of the Blood Moon
por divin sphere Qua 11 Set 2024, 18:18
» como fazer um objeto seguir?
por divin sphere Dom 18 Ago 2024, 18:08
» Procuro de alguém para Modelar/Texturizar/Animar objetos 3D
por un00brn Dom 11 Ago 2024, 11:10
» Destruição de cenário (estilo DD Tank)
por CoronelZeg Sex 09 Ago 2024, 17:16
» RESOLVIDO-Como destruir uma instancia especifica de um objeto
por josuedemoraes Ter 23 Jul 2024, 00:40
» Automatizar a coleta de id
por GabrielXavier Seg 22 Jul 2024, 18:01
» Preciso de ajuda para concluir um pequeno projeto
por lmoura Qui 27 Jun 2024, 15:45
» ANGULO ACOMPANHAR O OBJETO
por Klinton Rodrigues Qui 27 Jun 2024, 08:34
» Musica reinicia quando sala reinicia
por GabrielXavier Ter 18 Jun 2024, 07:28
» como fazer uma copia de gd
por generico_cube Sex 14 Jun 2024, 15:48
» Square Adventure
por guilherme551 Ter 11 Jun 2024, 09:54
» como posso definir limite de uma variavel
por GabrielXavier Sex 07 Jun 2024, 14:14
» [Resolvido] Dúvida, colisão única de objeto
por vdm842 Sex 24 maio 2024, 09:50
[TRFN]Chuva usando sprites
+2
luiz_eldorado
TRFN
6 participantes
GMBR :: Ensine & Aprenda :: Tutoriais :: Game Maker
Página 1 de 1
[TRFN]Chuva usando sprites
Chuva com sprites
Tutorial ensinando a criar sua própria chuva sem partículas ou efeitos pre-definidos .
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
- Tutorial -
Então aqui estamos.Vamos primeiro entender a ideia deste sistema :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.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.
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.
Flws
Última edição por Rock Lee em Sáb 07 Abr 2012, 01:37, editado 5 vez(es)
Re: [TRFN]Chuva usando sprites
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!
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!
Re: [TRFN]Chuva usando sprites
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.
Re: [TRFN]Chuva usando sprites
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".
Tutorial aprovado
Movido.
Movido.
Markituh- Games Ranking :
Data de inscrição : 11/10/2009
Reputação : 106
Número de Mensagens : 2184
Prêmios :
x 0 x 1 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: [TRFN]Chuva usando sprites
Obrigado.Bom tutorial.
[...]Tutorial aprovado
Movido.
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 apenasComo um bom programador, só não achei a identação muito boa, mas nada que comprometa muito.
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)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".
Re: [TRFN]Chuva usando sprites
falllllllllll
jharik- Data de inscrição : 19/03/2012
Reputação : 1
Número de Mensagens : 25
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: [TRFN]Chuva usando sprites
eu fiz tudo direitinho mas num caiu uma gota quando eu coloquei pra testar...
FAIL
Re: [TRFN]Chuva usando sprites
Engraçado,eu testei e funcionou perfeitamente.Você seguiu passo-a-passo o que eu pedi ?Benjamim_M escreveu:eu fiz tudo direitinho mas num caiu uma gota quando eu coloquei pra testar...
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
Re: [TRFN]Chuva usando sprites
Otimo tutorial TRFN!
Teria como fazer o mesmo usando o draw?(sem sprites)
usando só o draw,fica beeem mais leve!
Teria como fazer o mesmo usando o draw?(sem sprites)
usando só o draw,fica beeem mais leve!
peixoto- Games Ranking :
Notas recebidas : D
Data de inscrição : 14/02/2010
Reputação : 3
Número de Mensagens : 911
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: [TRFN]Chuva usando sprites
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.
GMBR :: Ensine & Aprenda :: Tutoriais :: Game Maker
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos