[Tutorial] Partículas

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

[Tutorial] Partículas

Mensagem por saim em Seg 20 Ago 2012, 14:40

Nome: Partículas
Descrição: Esse tutorial tem a pretensão de mostrar como usar as partículas no game maker
Nível de dificuldade: Mediano. Conhecer alguns conceitos (ver abaixo) é desejável em alguns momentos.
Requerimentos: Versão PRO do game maker (usei o 8.0, mas acredito que em qualquer versão seja igual). É recomendável entender como funcionam as cores e os blend modes.

Antes de qualquer coisa: eu NÃO VOU traduzir o que o manual diz. Já temos uma versão traduzida do manual aqui. Uma vez traduzida a parte referente a partículas do manual, a coisa toda deveria ficar muito simples. Deveria.
Mas na prática, não é o que acontece. Surge um monte de dúvidas. A principal delas:
- Como organizar meu sistema de partículas? (Que valores usar em cada função?)
E, menos importantes:
- Se o manual diz que eu só preciso organizar meu sistema de partículas uma vez no jogo inteiro, isso significa que qualquer variável usada será automaticamente global?
- Quando usar partículas?
- Pra que fazer isso, afinal?
- O que eu posso fazer com elas, além de efeitos especiais?

Esse tutorial tem a pretensão de responder a todas essas dúvidas. Se alguma permanecer sem resposta ao final da leitura, por favor entre em contato (eu não vou respondê-las diretamente, isso fica como exercício pra você).
Entretanto, é impossível fazer isso sozinho. Uma particularidade das partículas é a forma que elas se comportam em conjunto, em movimento. Explicar ou mesmo ilustrar isso é impossível. Portanto, eu pretendo soltar alguns conceitos e códigos e espero que você teste cada um deles na sua máquina. A partir desses testes, suas perguntas serão respondidas sozinhas. Pense nesse tutorial mais como um estudo dirigido do que propriamente um tutorial.
Ah, volta-e-meia eu vou abrir um parêntese pra comentar um pouco do vocabulário usado. Eu não gosto dos nomes escolhidos.

Chega de introdução, vamos ao que interessa!


O que são partículas?

Partículas são objetos com uma série de códigos "built-in" e que não permitem a inserção de mais nenhum código. Isso torna as partículas muito leves, permitindo a inserção de centenas, se não milhares, de partículas no jogo ao mesmo tempo, um número muito maior que de objetos comuns.
Esses códigos "built-in" usam uma série de parâmetros que moldam as partículas, fazendo-as se comportarem das mais diversas formas. Basicamente, esses códigos interferem na forma, cor e movimentação. Tem um pouco mais, mas não muito. Pra uma informação geral, lembre-se que você pode interferir nisso: forma, cor e movimentação.
Elas têm um tempo de vida pré-determinado e são destruídas ao final desse tempo.
Vocabulário:
Quando a gente diz "partícula" (particles, no original), fica a impressão de que estamos falando de objetinhos pequenininhos, microscópicos, mas que numa quantidade muito grande acabam ficando visíveis na tela.
Embora isso até possa ser verdade, está longe de ser a regra. Uma única partícula pode ocupar a tela inteira, se preciso. Elas têm sprites que não são nem um pouco microscópicos (você pode até criar uma sprite de qualquer tamanho, pra não ficar só nas built-ins).
Eu preferiria o termo "objetos leves"
Agora, uma apresentação formal. Partículas, essa é a galera da GMBR. Galera, essas são as partículas:
Os nomes delas são:
0: pt_shape_pixel
1: pt_shape_disk
2: pt_shape_square
3: pt_shape_line
4: pt_shape_star
5: pt_shape_circle
6: pt_shape_ring
7: pt_shape_sphere
8: pt_shape_flare
9: pt_shape_spark
10: pt_shape_explosion
11: pt_shape_cloud
12: pt_shape_smoke
13: pt_shape_snow

Não se enganem, elas são mais elaboradas do que parecem. Têm pixels com alpha baixo pra todo lado, de forma que se juntarmos um monte delas no mesmo lugar, o visual fica diferente. Eis como ficam 100 delas empilhadas:

Como funcionam as partículas?

É o seguinte, as partículas têm que surgir de algum lugar. Pra determinar onde elas vão surgir, existe um "criador de partículas" chamado emitter. É ele quem vai, de fato, criar os objetos-partículas. Então, sim, você pode pensar num emitter como um objeto especial, sem sprite nem coordenadas, que cria as partículas determinadas nas coordenadas determinadas.
Vocabulário:
Quando a gente diz "emitter" (emissor), fica a impressão de que as partículas sairão com alguma velocidade, que estamos usando um canhão e LANÇANDO partículas pela tela.
Não, só estamos criando. Elas se lançam sozinhas, em função da direção e velocidade inicial. Se não tiverem velocidade nem gravidade, elas ficam quietinhas, onde foram criadas.
Eu preferiria o termo "criador de partículas"
Esses emitters podem ser entendidos como child de um objeto parent. Esse parent seria o sistema de partículas. A princípio, isso parece uma bobagem, afinal se temos os emitters, pra que criar um parent pra eles? Eles não podem se virar sozinhos?
Poder, podem, mas é que não existem comandos pras partículas - lembre-se, a idéia é mantê-las LEVES. Então suponha que você quer fazer uma transição de rooms e está com a tela entulhada de partículas. Suponha que essa transição não fique perfeita se essas partículas continuarem na room. O que você faz?
Você usa um comando "with (particles){ instance_destroy() }"
Errado, as partículas podem ser ENTENDIDAS como objetos, mas não são objetos "de verdade". Além disso, que raio de variável é essa, "particles"? De onde você tirou que ela foi declarada em algum momento? Mas a resposta é de um raciocínio parecido. Mais alguém?
Você cria um Destroyer que ocupa a room inteira!
É... Isso resolveria... Mas não é a resposta que eu esperava. Além disso, não falei nada a respeito de destroyers, ainda.
Existe um comando pra eliminar todas as partículas de um sistema. Esse comando ignora qual foi o emitter que criou a partícula, qual a posição dela ou quanto tempo de vida ela já percorreu. Você digita o comando (part_particles_clear, pra matar a curiosidade), coloca qual o sistema você quer "limpar" e pronto, as partículas não estão mais lá.
Na verdade, existem comandos de sistemas de partículas que até dispensam os emitters, mas eles acabam sendo úteis pra generalizar a distribuição de partículas, então resolvi apresentá-los primeiro.
Mas o fato é que além dos emitters, existem outros "objetos" que existem dentro de um sistema de partículas. São os Atratores (attractors), destruidores (destroyers), defletores (deflectors) e alteradores (changers). ESSES, têm nomes adequados. Os comandos desses "objetos" levam em conta o sistema em que as partículas foram criadas, independente do emitter. Portanto, todas as partículas de um sistema, por mais heterogêneas que sejam, reagem a esses "objetos" de forma igual.
Como eu disse no começo do tutorial, não vou traduzir o manual. Os comandos são bem simples, apesar da quantidade. Leiam e saibam como usar cada um desses objetos.


Pra que servem as partículas?

É uma boa pergunta, apesar da resposta ser meio óbvia. Mas deixa eu enrolar um pouco aqui: um "objeto" que não aceita comandos diretos, não têm origem nem eventos (nem de colisão), não faz p*rra nenhuma, serve pra que, afinal?
Bom, ele faz algumas coisas.
Ele nasce. Ele aparece na tela. Ele morre.
E, se você fizer isso direitinho, ele deixa seu jogo bonito.
Essa complicação toda é só pra deixar o jogo bonitinho? Que frescura!
Não é só "bonitinho". É um acabamento que dá um toque de profissionalismo que nenhuma sprite (sozinha) é capaz de fazer. Aliás, pra quem não sabe desenhar, muitas vezes, é uma mão na roda!
E partículas não são complicadas. É só um monte de comandos.
Enfim, elas servem pra efeitos especiais, substituindo objetos com comportamentos erráticos que não precisam ficar com a imagem muito bem definida. Por exemplo, fogo, areia, fumaça, neblina, energias etéreas. Um pouco de experimentação e você vai imaginar mais e mais utilidades.

Foguetes têm uma cauda de fogo e fumaça. Por falar em cauda, cometas têm caudas cintilantes. Que jogo de luta tem impacto se os golpes não causam liberação de energia das mais diversas origens? Pântanos estão sempre cheios de vapores em toda a sua área. Magia sempre causa a liberação de forças etéreas.
Nem todo jogo precisa de partículas. Aliás, NENHUM jogo precisa de partículas. Mas todo jogo pode ter seu visual melhorado com elas.


Como, então, usar as partículas?

Aí, meu amigo, é por sua conta. Você viu a quantidade de comandos que existem. Vai querer que eu te mostre como organizar CADA UM deles? Tenha dó.
O negócio é sair experimentando.
Você quer uma atmosfera mística? Que tal um pouco de fumaça com vários tons de roxo?
Quer um fogo frio? Que tal criar partículas com arestas irregulares (como pt_shape_square, pt_shape_snow ou pt_shape_spark), usando uma colorização azul aditiva, lançadas em todas as direções em baixa velocidade e com uma gravidade leve para cima?

Poxa, então esse texto todo é inútil? ou: Finalmente algum código!!!

Tá bom, tá bom, vou dar umas dicas!

Primeira dica: use o create event pra quase tudo. Os emissores podem ficar emitindo partículas indefinidamente, então não tem motivo pra usar outros eventos - a menos que você queira as partículas só em momentos específicos. Claro que, pra economizar memória, você vai querer limpar tudo depois de usar. Portanto, use um destroy_event, game_end_event, room_exit ou coisa do tipo pra destruir o sistema, os tipos de partículas, os emissores, defletores, alteradores e destruidores. Mas fora essas exceções, ponha tudo num evento que não se repita. Ah, você pode usar eventos comuns pra mudar a área de atuação dos emitters, também.

Primeira coisa a fazer: crie o(s) sistema(s) de partículas. Tudo mais depende do sistema, então crie logo o sistema pra poder seguir em frente. Dê a ele um nome que você vai se lembrar que é um SISTEMA (e de pra que ele serve). Tipo "part_syst_caudaDoCometa" ou "sistema_poeira".

Segunda dica: Experimente MUITO. A menos que você seja um designer gráfico, não vai conseguir visualizar o sistema antes dele ser implantado. Então tente cores claras e escuras, experimente as mais diversas shapes, orientações, escalar, velocidades, gravidades... tem muitas variáveis pra serem levadas em conta.
Uma coisa que eu sempre testo é o additive_blend com alpha menor que um. O additive_blend é ótimo com muitas instâncias sobrepostas e fundos diferentes do branco (porque qualquer coisa com additive some num fundo branco). Por falar em additive_blend, se for usá-lo, experimente várias cores de background e/ou backgrounds irregulares.
Quer um códigozinho pra testar muita coisa? Deixa eu te mostrar como fiz aquelas imagens no começo... Muita coisa aí está escrita só pra servir de copy-paste. Eu fiz um monte de definições que são default. Como é um código comprido, vou esconder ele num spoiler.
código padrão:
create:
Código:
//primeiro, define um índice pra cada shape
var i; i = 0;
shape[i] = pt_shape_pixel;    i += 1;// 0
shape[i] = pt_shape_disk;      i += 1;// 1
shape[i] = pt_shape_square;    i += 1;// 2
shape[i] = pt_shape_line;      i += 1;// 3
shape[i] = pt_shape_star;      i += 1;// 4
shape[i] = pt_shape_circle;    i += 1;// 5
shape[i] = pt_shape_ring;      i += 1;// 6
shape[i] = pt_shape_sphere;    i += 1;// 7
shape[i] = pt_shape_flare;    i += 1;// 8
shape[i] = pt_shape_spark;    i += 1;// 9
shape[i] = pt_shape_explosion; i += 1;// 10
shape[i] = pt_shape_cloud;    i += 1;// 11
shape[i] = pt_shape_smoke;    i += 1;// 12
shape[i] = pt_shape_snow;      i += 1;// 13

nShapes = i; //13

// cria umas variáveis pras posições na tela
dx = (room_width / (nShapes + 1)) * 2; // distância entre emitters

// organiza o sistema de partículas
// cria o sistema
partSys = part_system_create();

for(i = 0; i < nShapes; i += 1){
   // cria a partícula
   partType[i] = part_type_create(); // um tipo pra cada shape
   part_type_shape(partType[i], shape[i]); // coloca a shape no tipo (equivalente a sprite_index)
   part_type_size(partType[i], 1, 1, 0, 0); // tamanho real, sem escala (ou: escala=1)
   part_type_scale(partType[i], 1, 1); // proporção (x, y) (equivalente a image_xscale E image_yscale)
   part_type_orientation(partType[i], 0, 0, 0, 0, 0); // as partículas sempre saem giradas no ângulo=0 (equivalente a image_angle)
   part_type_color1(partType[i], $ffffff); // a cor a mesclar a sprite da partícula (branco resulta na cor original) (equivalente a image_blend)
   part_type_alpha1(partType[i], 1); // opacidade exatamente igual a da sprite (equivalente a image_alpha)
   part_type_blend(partType[i], 0); // blend não é aditivo (equivalente a usar draw_set_blend_mode)
   part_type_life(partType[i], 30, 30); // um segundo de vida (suficiente pro F9) (equivalente a usar um alarme com instance_destroy())
   // não usarei part_type_step(ind,step_number,step_type) ou part_type_death(ind,death_number,death_type)
   // não faz sentido usá-los pra mostrar cada partícula em separado
   part_type_speed(partType[i], 0, 0, 0, 0); // velocidade nula (equivalente a definir speed)
   part_type_direction(partType[i], 0, 0, 0, 0); // direção igual a 0 graus, sempre (equivalente a definir direction)
   part_type_gravity(partType[i], 0, 0); // aceleração zero (equivalente a definir gravity E gravity_angle)

   // cria o emissor
   xi[i] = ((1 + i) * dx) mod room_width; //posição inicial (X) de cada emissor
   yi[i] = (room_height / 3) * (1 + ((1 + i) * dx) div room_width); //posição inicial (Y) de cada emissor
   partEmit[i] = part_emitter_create(partSys); //cria o emissor
   part_emitter_region(partSys, partEmit[i], xi[i], xi[i], yi[i], yi[i], ps_shape_ellipse, ps_distr_linear); // define a região do emissor (um ponto só)
   part_emitter_stream(partSys, partEmit[i], partType[i], 1); // faz o emissor lançar as partículas pra sempre (se eliminada essa linha, ele não lançará nada)
   }

game_end:
Código:
// limpa a bagunça
for(i = 0; i < nShapes; i += 1){
   part_emitter_destroy(partSys, partEmit[i]); //destrói o emissor
   part_type_destroy(partType[i]); //destrói o tipo
   }
part_system_destroy(partSys); //por fim, elimina o sistema

Ok, agora, supondo que você elimine a última linha lá do create (a que faz os emissores lançarem uma partícula por step) e queira que só uma partícula apareça quando você apertar, por exemplo, espaço:
key_pressed:
Código:
// Emite uma partícula por emissor
for(i = 0; i < nShapes; i += 1){
   part_emitter_burst(partSys, partEmit[i], partType[i], 1);
   }

Por fim, pra VER os índices das partículas, é bom acrescentar um draw_text:
Draw:
Código:
// desenha os índices das shapes
var i;
for(i = 0; i < nShapes; i += 1){
   draw_text_color(xi[i] - 16, yi[i] - 32, string(i), $ffffff, $ffffff, $ffffff, $ffffff, 1);
   }

Últimas dicas: Bom, obviamente, você pode renomear as variáveis à vontade, e principalmente retirar esse uso de arrays - dificilmente você vai precisar de todas as shapes ao mesmo tempo. Brinque com os valores de cor, direção, gravidade, tamanho (usar escalas diferentes em x e y pode ser interessante), etc.
Sabe aqueles comandos que eu não usei? Eles servem pra criar novas partículas de outro tipo, ou no equivalente ao "step_event" ou no equivalente ao "destroy_event" (Não TEM que ser de outro tipo, mas imagine o que acontece se uma partícula cria outra(s) igualzinha a cada step). Tem situações em que é interessante ter partículas criadas no ponto em que tem outra partícula. Por exemplo, uma chuva de meteoros em que os meteoros são partículas e as caudas são formadas por outras partículas. Ou fogos de artifício, como no código que vem com o manual. Ou um poder tão poderoso que suas partículas soltam faíscas! Sei lá, sempre tem alguma coisa.
Existem outros tipos de definição pra cores e alpha (recomendo brincar com o part_type_color_hsv() ou part_type_color_mix() pra vários tons da mesma cor, fica legal), mas não dá pra usar todos eles no mesmo sistema: você escolhe um tipo e pronto. Eu escolhi os mais simples.
Existem mais opções, mais comandos. Você pode escolher a depth do sistema como um todo, pode criar as partículas mais novas ATRÁS das já existentes (quando a cor muda, isso faz MUITA diferença), pode definir o quanto um defletor tira do momentum da partícula, pode fazer um monte de coisas.

palavra final::
Moçada, eu fiz esse tutorial na intenção de aprender mais a respeito de partículas. Enquanto ensinava, eu ia eliminando algumas falhas no meu entendimento. Pode ser que tenha passado alguma coisa, que alguma informação tenha ficado incorreta. Se você notar alguma inverdade ou ambiguidade, fique à vontade pra me corrigir, eu agradeço. Se alguma parte do texto estiver complicada de entender por causa do jeito que eu usei pra explicar, me avise que eu tento melhorar (eu fiz o texto em vários dias, posso ter perdido a linha de raciocínio em algum momento).

Espero que o texto ajude a quem não conhece as partículas ou a quem esteja com alguma dificuldade em entendê-las. Tenho um pouco de medo que acabe complicando mais que ajudando, mas... vejamos! Se estiver muito ruim, eu refaço o texto todo ou peço pra excluírem o tópico.

Um abraço!

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: [Tutorial] Partículas

Mensagem por Mr. Kaleb em Seg 20 Ago 2012, 16:36

Engraçado, postei um tutorial com exatamente o mesmo título, mas você focou na parte teórica, e eu foquei mais na parte prática (dos códigos). Mas um pouco de noção teórica é bom, porque ajuda a desenvolver melhor.
Saim, as partículas podem ter uma importância tão imensa no jogo que muita gente não faz ideia. Você pode criar colisões entre partículas e objetos (o que antes muita gente dizia que era impossível), você pode até mesmo, usar sprites no lugar dos pt_...., e muitas outras funcionalidades.
E ah, adicionando informação, um atrator também pode servir como defletor, é só usar valores negativos. Se você ficar interessado, junto com o meu tutorial, eu fiz uma engine que explora o básico das partículas, se você quiser dar uma olhada, é só acessar esse link.

Mr. Kaleb

Ranking : Nota C
Número de Mensagens : 1400
Idade : 19
Data de inscrição : 07/09/2010
Notas recebidas : C
Reputação : 21
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: [Tutorial] Partículas

Mensagem por cascavelo em Seg 20 Ago 2012, 16:48


Uma informação relevante a respeito de particulas:
- No GMS o sistema é simplificado, não existem defletores, aceleradores e destruidores.

Outra coisa:
A forma mais fácil de editar um efeito de partículas é usar o "particle design" e copiar e colar o código no GM. O particle design pode ser encontrado aqui mesmo no fórum.

cascavelo

Ranking : Nota A
Número de Mensagens : 1011
Idade : 46
Data de inscrição : 08/12/2011
Notas recebidas : A - A - A - A - A -A -C
Reputação : 71
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 2
   : 1

Voltar ao Topo Ir em baixo

Re: [Tutorial] Partículas

Mensagem por vinians em Seg 20 Ago 2012, 17:43

cascavelo escreveu:
Uma informação relevante a respeito de particulas:
- No GMS o sistema é simplificado, não existem defletores, aceleradores e destruidores.

Outra coisa:
A forma mais fácil de editar um efeito de partículas é usar o "particle design" e copiar e colar o código no GM. O particle design pode ser encontrado aqui mesmo no fórum.
Se lhes interessar também criei um editor de particulas, você pode acessar aqui no fórum Particulum

@Topico
Gostei do seu tutorial pois explicou os conceitos deixando que a pessoa usa um pouco a cabeça pra montar os comandos. Muito bem explicado. Parabéns!

Flws!

vinians

Ranking : Nota B
Número de Mensagens : 2490
Idade : 27
Data de inscrição : 18/09/2008
Notas recebidas : B-C-A-C
Reputação : 52
Insignia 1 x 0 Insignia 2 x 1 Insignia 3 x 0
Prêmios
   : 0
   : 2
   : 1

http://xcreatorgames.weebly.com/

Voltar ao Topo Ir em baixo

Re: [Tutorial] Partículas

Mensagem por saim em Seg 20 Ago 2012, 17:58

@The Games Never Finish...: Foi mal, eu esqueci de pesquisar antes de postar o tuto. Mas como você focou nos códigos, talvez eu postasse mesmo tendo achado seu tutorial.
Como eu disse logo no começo, a idéia não é traduzir o manual, muito menos explicar o que faz cada função, mas dar uma idéia de como usar as partículas. É que eu tive um bocado de dificuldade pra usar elas, então achei que um tutorial assim poderia ter me ajudado.
Além do mais, eu pretendia gastar pouco tempo nesse tutorial. Explicar cada função, como você fez, levaria MUITO tempo.

Eu não sei como fazer as partículas colidirem com objetos... como faz? Tipo, elas geram eventos de colisão e tudo mais?

Os defletores servem como "paredes". Os atratores são mais "campos de força", atraindo (ou repelindo) as partículas. Usar um atrator como defletor pode causar resultados indesejados. Mas realmente, em algumas situações, isso pode contornar alguns problemas.

Assim que possível, vou dar uma olhada na sua engine! Smile

@cascavelo: Boa! Como eu não tenho o GMS, não me preocupei em saber se existem exceções. Vou colocar essa informação no tutorial.
O que é o "particle design"? Dei uma pesquisada a respeito e só achei essa pergunta aqui, no fórum (não pesquisei fora do fórum). O link fornecido na resposta (que está bloqueado pra mim), o "Particulum", dá a entender que trata-se de um programa que elabora os códigos pra gerar um efeito de partícula pronto. É isso? Se for, POR FAVOR poste um link pra ele!
Ah, o Vinians postou o link pro "Particulum" antes de eu postar a resposta!

@Vinians: É isso mesmo o que o "Particulum" faz? Cria códigos pra efeitos pré-determinados?

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: [Tutorial] Partículas

Mensagem por Kapoty em Seg 20 Ago 2012, 19:17

Ótima Ótima Ótima! Aula teórica parabéns.
Agora só falta uma aula pratica para completar o tutorial hehe.
Uma pergunta : Como seu tutorial foi aprovado em menos de 1 segundo?

Kapoty

Ranking : Nota B
Número de Mensagens : 635
Data de inscrição : 05/11/2011
Notas recebidas : E + D + C + B + D +B + A
Reputação : 22
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 0
   : 1

Voltar ao Topo Ir em baixo

Re: [Tutorial] Partículas

Mensagem por vinians em Seg 20 Ago 2012, 20:50

saim escreveu:

@Vinians: É isso mesmo o que o "Particulum" faz? Cria códigos pra efeitos pré-determinados?
Sim, você edita as propriedades das particulas visualmente e o Particulum cria o código pra você.

Flws!

vinians

Ranking : Nota B
Número de Mensagens : 2490
Idade : 27
Data de inscrição : 18/09/2008
Notas recebidas : B-C-A-C
Reputação : 52
Insignia 1 x 0 Insignia 2 x 1 Insignia 3 x 0
Prêmios
   : 0
   : 2
   : 1

http://xcreatorgames.weebly.com/

Voltar ao Topo Ir em baixo

Re: [Tutorial] Partículas

Mensagem por Mr. Kaleb em Seg 20 Ago 2012, 21:33

Olha aí, você já matou a charada. É só aplicar ou o defletor ou o destroyer, dependendo da necessidade, num objeto, ai funciona como uma colisao. Eu estou desenvolvendo por fora um método de usar como "colisão comum", tipo, colidir e parar, como fazemos com objetos normais, se eu tiver algum sucesso eu informo.
O Particulum é um ótimo programa, você aplica as funções na particula em tempo real, aí quando ficar do jeito que você quer, ele gera o código, aí é só passar pro jogo.
O Particle Designer deve ser o melhor criador de particulas do GM, assim como o Particulum, mas com muito mais funcionalidades (sem desmerecer o nosso amigo Vinians que fez um ótimo trabalho), até já vem com exemplos prontos. Aqui está o link do programa: http://sandbox.yoyogames.com/games/2246-particle-designer-2_3

EDIT:
Ops, lançou uma nova versão recentemente: http://host-a.net/u/alertgames/ParticleDesigner2_5.zip
Você se familiariza rápido com o programa.

Mr. Kaleb

Ranking : Nota C
Número de Mensagens : 1400
Idade : 19
Data de inscrição : 07/09/2010
Notas recebidas : C
Reputação : 21
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: [Tutorial] Partículas

Mensagem por saim em Ter 21 Ago 2012, 09:05

kapoty escreveu:Uma pergunta : Como seu tutorial foi aprovado em menos de 1 segundo?
Não foi. O fórum teve algumas mudanças e eu não achei a seção de "tutoriais não aprovados". Contatei um administrador, explicando o que tinha feito, com link, e dei a ele a liberdade de mover ou até excluir o tópico sem criar caso. Se até o final da semana o tópico ainda estiver aqui, coloco um link na assinatura. (Ah, agora já achei a seção, mas não tenho como mover o tópico...)
kapoty escreveu:Agora só falta uma aula pratica para completar o tutorial hehe.
É o que eu falei, não dá pra fazer uma aula prática. Posso, no máximo, mostrar como criar alguns efeitos, mas dificilmente será o efeito que você precisa no seu jogo. Além disso, tem o tutorial do The Games Never Finish... (recomendo dar uma olhada, ele é bem mais direto ao ponto) e o programa do Vinians (ver logo abaixo, o que achei dele), além do Particle Designer, que ainda não conheço.

@Vinians: SENSACIONAL o Particulum, cara! Parabéns pelo programa! Cumpre muito bem a função de mostrar o resultado final ANTES de criar o código.

@The Games Never Finish...: Pra colidir e parar, basta usar um atrito MUITO GRANDE no defletor. Ainda não saquei qual a matemática usada nesse "atrito", mas quanto maior o atrito, menos a partícula quica.
Outra solução seria usar um alterador pra transformar uma partícula em movimento numa outra igual, só que sem movimento. Essa solução pode apresentar alguns problemas se houver muita mudança de cor e alpha na partícula (porque não dá pra repetir o valor exato na partícula criada), mas isso também pode passar despercebido.
[Edit] Apesar de ter escrito o tutorial, não prestei muita atenção aos changers. Olha um pedacinho de informação útil, aqui:
Manual escreveu:kind indicates the kind of changer. It can have the following values:
ps_change_motion only changes the motion parameters of the particle, not the color and shape or lifetime settings.
(...)
Traduzindo livremente: "Tipo" de alterador indica o que você vai mudar na partícula. Se usar ps_change_motion, pode mudar só o movimento dela. Como não existem argumentos pra quais os valores entrar, acredito que a partícula que entrar na área do changer vai se manter com o visual que estava, mas com os parâmetros de movimento da partícula criada.
Ainda não vi o Particle Designer, assim que possível, darei uma olhada.


Última edição por saim em Ter 21 Ago 2012, 14:39, editado 1 vez(es)

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: [Tutorial] Partículas

Mensagem por cascavelo em Ter 21 Ago 2012, 11:26

Testei o Particulum, a primeira vista achei bem melhor que o Particle Designer, vou fazer mais uns testes. Acho que vou migrar pra ele, é muito mais dinâmico, os botões de deslizar permitem um ajuste muito mais fino do que ficar digitando números e testando como no PD.
Parabéns, vinians, uma pena eu não ter encontrado o seu software antes, teria economizado muito tempo em meus projetos.
Só não consegui mudar a cor das partículas, como faz?
E senti falta de uma opção pra usar sprites próprios, tem? Não encontrei.
Acho que você deveria continuar a atualizar o projeto, colocar por exemplo dois botões: Um pra burst e outro pra stream e exportar o código já com estes comandos.
Pode ter certeza que serei um divulgador de seu programa.

Vendo um programa como este, me vem a cabeça a necessidade de uma área no fórum para ferramentas de desenvolvimento. Se não fosse este tópico do saim talvez eu nunca conhecesse o programa.

Mais sobre o tutorial: Acho de grande valia este tutorial do saim pra entender como o sistema de particulas funciona mesmo usando softwares para gerá-las, as vezes acontecem umas anomalias quando exportamos o código feito no programa e temos que alterá-lo diretamente no projeto, é bom saber o que cada função faz.

cascavelo

Ranking : Nota A
Número de Mensagens : 1011
Idade : 46
Data de inscrição : 08/12/2011
Notas recebidas : A - A - A - A - A -A -C
Reputação : 71
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 2
   : 1

Voltar ao Topo Ir em baixo

Re: [Tutorial] Partículas

Mensagem por vinians em Ter 21 Ago 2012, 14:19

cascavelo escreveu:Testei o Particulum, a primeira vista achei bem melhor que o Particle Designer, vou fazer mais uns testes. Acho que vou migrar pra ele, é muito mais dinâmico, os botões de deslizar permitem um ajuste muito mais fino do que ficar digitando números e testando como no PD.
Parabéns, vinians, uma pena eu não ter encontrado o seu software antes, teria economizado muito tempo em meus projetos.
Só não consegui mudar a cor das partículas, como faz?
E senti falta de uma opção pra usar sprites próprios, tem? Não encontrei.
Acho que você deveria continuar a atualizar o projeto, colocar por exemplo dois botões: Um pra burst e outro pra stream e exportar o código já com estes comandos.
Pode ter certeza que serei um divulgador de seu programa.

Vendo um programa como este, me vem a cabeça a necessidade de uma área no fórum para ferramentas de desenvolvimento. Se não fosse este tópico do saim talvez eu nunca conhecesse o programa.

Obrigado por testar o programa, este projeto já tem um tempinho que fiz, mas acho que dá pra colocar muita coisa nele ainda. Estava pensando em colocar defletores e atratores mas vou esperar a versão do GMS suportar esses elementos. Quanto as cores, vou dar uma verificada, pois tinha colocado para quando clicar nos botoes, mas realmente parece que eu devo ter colocado um REM na linha heehehe.

Também acho interessante a idéia de uma seção de aplicativos no fórum pois ficaria bem mais organizado.
Devido a qualidade dos seus projetos, fico muito feliz em um elogio vindo de você.

Flws!

vinians

Ranking : Nota B
Número de Mensagens : 2490
Idade : 27
Data de inscrição : 18/09/2008
Notas recebidas : B-C-A-C
Reputação : 52
Insignia 1 x 0 Insignia 2 x 1 Insignia 3 x 0
Prêmios
   : 0
   : 2
   : 1

http://xcreatorgames.weebly.com/

Voltar ao Topo Ir em baixo

Re: [Tutorial] Partículas

Mensagem por Thiago_o_programador em Ter 21 Ago 2012, 14:23

Gostei do tutorial, bem elaborado e facil de fazer entender.

@Vinians eu gosto muito do seu projeto, Particulum, na minha opinião o melhor do gênero, fiz até uma engine usando ela, da uma olhada aí:

Tocha com particulas

Thiago_o_programador

Ranking : Nota D
Número de Mensagens : 709
Idade : 19
Data de inscrição : 14/05/2009
Notas recebidas : D - C - D - C
Reputação : 6
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 1

http://www.jogosdahora.maisblog.net

Voltar ao Topo Ir em baixo

Re: [Tutorial] Partículas

Mensagem por saim em Qua 12 Set 2012, 14:21

Pessoal, eu gostei tanto do Particulum do Vinians que resolvi fazer uma versão pra uso próprio, incluindo as opções que eu achei que faltavam.
Ficou bacaninha de usar. Ainda tem alguns bugs que não sei se vou corrigir (afinal, não tive a intenção de fazer um programa profissional) e certamente ainda tem opções que não estão disponíveis (como usar sprites como partículas).

Apesar desses probleminhas, é útil pra visualizar os efeitos das configurações de partículas em tempo real, então estou disponibilizando aqui. É open-source, então se você quiser melhorar o programa, fique à vontade.

Se notar algum bug mais sério (alguma mensagem de erro, por exemplo), eu agradeço se avisar.

P.S.: Nota-se, usando o programa, que o tutorial está bem incompleto. Provavelmente vou editá-lo completamente, usando informações mais corretas e completas.

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: [Tutorial] Partículas

Mensagem por Conteúdo patrocinado Hoje à(s) 08:51


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