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
Desenhando Arcos (Curva Bezier)
+8
Willy
cascavelo
Superbomber_MuyMacho
shatterhand2
Kabeção
Gabreel
dharrison
Neofix
12 participantes
GMBR :: Ensine & Aprenda :: Exemplos :: Game Maker (engines)
Página 1 de 2
Página 1 de 2 • 1, 2
Desenhando Arcos (Curva Bezier)
Precisei de um sistema desses para um jogo, e vou compartilhar com vcs:
Crie um script chamado "bezier" e coloque o código:
Depois... No Draw de um objeto qualquer coloque:
bezier(x1,y1,xcurv,ycurv,x2,y2);
onde:
x1,y1 = origem do arco (P0 imagem abaixo)
xcurv, ycurv = ponto para curvatura (P1 imagem abaixo)
x2,y2 = destino do arco (P2 imagem abaixo)
A imagem explica melhor:
Espero que seja útil.
Dan
Crie um script chamado "bezier" e coloque o código:
- codigo:
var x1,y1,x2,y2,x3,y3,i,qx1,qy1,qx2,qy2,m,bx,by,bxp,by
p;
x1 = argument0;
y1 = argument1;
x2 = argument2;
y2 = argument3;
x3 = argument4;
y3 = argument5;
m = 50;
bxp = x1;
byp = y1;
for(i=0; i<m; i+= 1){
qx1 = x1+lengthdir_x(point_distance(x1,y1,x2,y2)*i/m,point_direction(x1,y1,x2,y2));
qy1 = y1+lengthdir_y(point_distance(x1,y1,x2,y2)*i/m,point_direction(x1,y1,x2,y2));
qx2 = x2+lengthdir_x(point_distance(x2,y2,x3,y3)*i/m,point_direction(x2,y2,x3,y3));
qy2 = y2+lengthdir_y(point_distance(x2,y2,x3,y3)*i/m,point_direction(x2,y2,x3,y3));
bx = qx1+lengthdir_x(point_distance(qx1,qy1,qx2,qy2)*i/m,point_direction(qx1,qy1,qx2,qy2));
by = qy1+lengthdir_y(point_distance(qx1,qy1,qx2,qy2)*i/m,point_direction(qx1,qy1,qx2,qy2));
draw_line_width_color(bx,by,bxp,byp,5,c_blue,c_blue); //desenha em azul stroke 5, mude se quiser!
bxp = bx;
byp = by;
}
Depois... No Draw de um objeto qualquer coloque:
bezier(x1,y1,xcurv,ycurv,x2,y2);
onde:
x1,y1 = origem do arco (P0 imagem abaixo)
xcurv, ycurv = ponto para curvatura (P1 imagem abaixo)
x2,y2 = destino do arco (P2 imagem abaixo)
A imagem explica melhor:
Espero que seja útil.
Dan
Neofix- Games Ranking :
Notas recebidas : A
Data de inscrição : 19/01/2009
Reputação : 7
Número de Mensagens : 98
Prêmios :
x 0 x 0 x 0
x 1 x 0 x 0
x 0 x 0 x 0
Re: Desenhando Arcos (Curva Bezier)
Caramba Neofix vc mesmo que produziu isso? Grande qualidade!
É uma forma de desenhar vetores direto no GM
É uma forma de desenhar vetores direto no GM
dharrison- Games Ranking :
Notas recebidas : A - B
Data de inscrição : 04/02/2009
Reputação : 120
Número de Mensagens : 1363
Prêmios :
x 0 x 9 x 0
x 0 x 1 x 0
x 0 x 0 x 1
Plataformas :- Game Maker 8.0 ou 8.1
- Game Maker Studio 2.0
- C#
Re: Desenhando Arcos (Curva Bezier)
Quem me dera dharrison!
Eu pesquisei em fóruns gringos e adaptei o código a minha necessidade...
Eu to tentando criar esse efeito aqui:
Eu não faço idéia de como vou fazer a parte azul do raio kkk
Eu pesquisei em fóruns gringos e adaptei o código a minha necessidade...
Eu to tentando criar esse efeito aqui:
Eu não faço idéia de como vou fazer a parte azul do raio kkk
Neofix- Games Ranking :
Notas recebidas : A
Data de inscrição : 19/01/2009
Reputação : 7
Número de Mensagens : 98
Prêmios :
x 0 x 0 x 0
x 1 x 0 x 0
x 0 x 0 x 0
Re: Desenhando Arcos (Curva Bezier)
Muito bom Neofix! Porém, uma coisa que nunca consegui fazer no GM é implementar funções quadráticas a partir de um vértice. Quem sabe um dia eu consiga. :/
Gabreel- Data de inscrição : 02/10/2009
Reputação : 52
Número de Mensagens : 2232
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Plataformas :- Game Maker 8.0 ou 8.1
- Game Maker Studio 1.4
- Game Maker Studio 2.0
- Javascript
- Outros
Re: Desenhando Arcos (Curva Bezier)
Eu achei esse cara aqui, mas infelizmente não consegui rodar a extensão dele no GMS:
http://gmc.yoyogames.com/index.php?showtopic=491339
O exemplo que ele fez com tentáculos é lindo (gostando da parte matemática ou não...):
http://gmc.yoyogames.com/index.php?showtopic=491339
O exemplo que ele fez com tentáculos é lindo (gostando da parte matemática ou não...):
Neofix- Games Ranking :
Notas recebidas : A
Data de inscrição : 19/01/2009
Reputação : 7
Número de Mensagens : 98
Prêmios :
x 0 x 0 x 0
x 1 x 0 x 0
x 0 x 0 x 0
Re: Desenhando Arcos (Curva Bezier)
Isso provavelmente não é feito em tempo real.Neofix escreveu:Quem me dera dharrison!
Eu pesquisei em fóruns gringos e adaptei o código a minha necessidade...
Eu to tentando criar esse efeito aqui:
Eu não faço idéia de como vou fazer a parte azul do raio kkk
GMS já tem um sistema para lidar com curvas, as paths.
Tanto pra desenhar uma curva quanto esse feito é mais fácil criar e manipular os pontos com path e o resto é calculado pela própria engine.
Esse script não produz o mesmo efeito que uma curva de bezier.
Elas são bem mais arredondadas.
A curva começa depois da metade entre os dois pontos, o resultado desse script é praticamente o mesmo resultado das paths.
Re: Desenhando Arcos (Curva Bezier)
Faz com sprites, é bem mais fácil, e ainda dá pra fazer um efeito excelente.
Re: Desenhando Arcos (Curva Bezier)
Estou quase terminando meu GhostBusters Simulator.
ShatterHand2 não dá para fazer com sprites pq o efeito é dinamico, ele faz uma curva conforme o movimento que o cara faz com a Neutrona Blaster, "puxando" o fantasma de um lado para outro. Veja uns videos do jogo Ghostbusters para entender.
Cheguei a este resultado:
O raio azul eu tentei usar sprites com alpha mas reduziu a performance no celular...
Talvez eu mude no futuro.
ShatterHand2 não dá para fazer com sprites pq o efeito é dinamico, ele faz uma curva conforme o movimento que o cara faz com a Neutrona Blaster, "puxando" o fantasma de um lado para outro. Veja uns videos do jogo Ghostbusters para entender.
Cheguei a este resultado:
O raio azul eu tentei usar sprites com alpha mas reduziu a performance no celular...
Talvez eu mude no futuro.
Neofix- Games Ranking :
Notas recebidas : A
Data de inscrição : 19/01/2009
Reputação : 7
Número de Mensagens : 98
Prêmios :
x 0 x 0 x 0
x 1 x 0 x 0
x 0 x 0 x 0
Re: Desenhando Arcos (Curva Bezier)
Eu achei muito bom, um ótimo script(Que poderia ser feito de uma maneira bem mais simples), mesmo sendo complicado atoa ainda sim é bem útil.
Superbomber_MuyMacho- Data de inscrição : 22/03/2014
Reputação : 9
Número de Mensagens : 103
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: Desenhando Arcos (Curva Bezier)
É praticamente impossível fazer este efeito de relâmpago em um celular sem que a taxa de quadros caia drasticamente, em um PC até dá. O maior problema é que pra conseguir um efeito bom você vai ter que trabalhar com milhares que sprites pequenos com uso de alpha o que consome tempo de processamento.
Dá pra fazer algo parecido usando partículas, mas vai ficar lento também.
A única forma de funcionar rápido é com sprites grandes mesmo, você teria que desenhar o raio e animar a ondulação dele. A parte complicada é fazer a curva ao mover o raio, só daria pra fazer usando shaders.
Estude um pouco sobre shaders, no fórum da yoyo tem bastante coisa e você pode tentar adaptar algum código pronto que faça ondulação do desenho.
Isto é uma coisa bem difícil de fazer, as vezes impossível. Por este motivo que você não vê este tipo de efeito em jogos 2D.
Dá pra fazer algo parecido usando partículas, mas vai ficar lento também.
A única forma de funcionar rápido é com sprites grandes mesmo, você teria que desenhar o raio e animar a ondulação dele. A parte complicada é fazer a curva ao mover o raio, só daria pra fazer usando shaders.
Estude um pouco sobre shaders, no fórum da yoyo tem bastante coisa e você pode tentar adaptar algum código pronto que faça ondulação do desenho.
Isto é uma coisa bem difícil de fazer, as vezes impossível. Por este motivo que você não vê este tipo de efeito em jogos 2D.
cascavelo- Games Ranking :
Notas recebidas : A - A - A - A - A -A -C
Data de inscrição : 08/12/2011
Reputação : 71
Número de Mensagens : 1011
Prêmios :
x 0 x 0 x 0
x 1 x 2 x 1
x 0 x 0 x 0
Re: Desenhando Arcos (Curva Bezier)
Acredito ter uma solução para o seu problema... Na verdade, uma sugestão.
Você consegue fazer um efeito de raio maneiro se ao invés de curvas, usar várias retas semelhante ao que encontramos no jogo Chicken Invaders:
Não é muito complicado de fazer... Resumidamente, basta criar uma reta com vários nós (ou seja, uma ponta ligada a outra) que variam de posição aleatoriamente.
Você consegue fazer um efeito de raio maneiro se ao invés de curvas, usar várias retas semelhante ao que encontramos no jogo Chicken Invaders:
Não é muito complicado de fazer... Resumidamente, basta criar uma reta com vários nós (ou seja, uma ponta ligada a outra) que variam de posição aleatoriamente.
Re: Desenhando Arcos (Curva Bezier)
Como o Willy sugeriu, a intenção seria fazer algo do gênero :
- Código:
x1 = x - irandom( 5 );
x2 = x + irandom( 5 );
y1 = y;
y2 = y + irandom( 10 );
for( i = 0; i < 30; i+=1 ){
draw_line(x1, y1, x2, y2 );
x1 = x2;
x2 = x1 + irandom( 5 );
y1 = y2;
y2 = y1 + irandom( 10 );
}
Re: Desenhando Arcos (Curva Bezier)
Acho que teria que fazer um script recursivo para fazer os raios, e como todos devem saber, recursividade é muito lento :/
Gabreel- Data de inscrição : 02/10/2009
Reputação : 52
Número de Mensagens : 2232
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Plataformas :- Game Maker 8.0 ou 8.1
- Game Maker Studio 1.4
- Game Maker Studio 2.0
- Javascript
- Outros
Re: Desenhando Arcos (Curva Bezier)
For não é recursividade, é laço. Dá pra fazer desse jeito, mas vai ficar feinho a beça.
Dá pra fazer com sprites. Faz os raios divididos em partes, cada parte se interligando com a parte seguinte. Na hora de fazer "curva", gira o sprite de acordo com a curva, e coloca o seguinte mais a esqueda (ou mais a direita) tanto quanto for o ângulo da curva, para que as extremidades continuem se tocando.
Ja fiz algo assim, funcionava relativamente bem. Só requer um pouco de matemática.
Os "blocos" raios tem "espaços" entre eles, mas era proposital, poderia coloca-los mais juntos, eu poderia girar esses raios com a nave como ponto central sem problemas. E foi feito fazendo sprite.
Dá pra fazer com sprites. Faz os raios divididos em partes, cada parte se interligando com a parte seguinte. Na hora de fazer "curva", gira o sprite de acordo com a curva, e coloca o seguinte mais a esqueda (ou mais a direita) tanto quanto for o ângulo da curva, para que as extremidades continuem se tocando.
Ja fiz algo assim, funcionava relativamente bem. Só requer um pouco de matemática.
Os "blocos" raios tem "espaços" entre eles, mas era proposital, poderia coloca-los mais juntos, eu poderia girar esses raios com a nave como ponto central sem problemas. E foi feito fazendo sprite.
Re: Desenhando Arcos (Curva Bezier)
Neofix escreveu:Precisei de um sistema desses para um jogo, e vou compartilhar com vcs:
Crie um script chamado "bezier" e coloque o código:
- codigo:
var x1,y1,x2,y2,x3,y3,i,qx1,qy1,qx2,qy2,m,bx,by,bxp,by
p;
x1 = argument0;
y1 = argument1;
x2 = argument2;
y2 = argument3;
x3 = argument4;
y3 = argument5;
m = 50;
bxp = x1;
byp = y1;
for(i=0; iqx1 = x1+lengthdir_x(point_distance(x1,y1,x2,y2)*i/m,point_direction(x1,y1,x2,y2));
qy1 = y1+lengthdir_y(point_distance(x1,y1,x2,y2)*i/m,point_direction(x1,y1,x2,y2));
qx2 = x2+lengthdir_x(point_distance(x2,y2,x3,y3)*i/m,point_direction(x2,y2,x3,y3));
qy2 = y2+lengthdir_y(point_distance(x2,y2,x3,y3)*i/m,point_direction(x2,y2,x3,y3));
bx = qx1+lengthdir_x(point_distance(qx1,qy1,qx2,qy2)*i/m,point_direction(qx1,qy1,qx2,qy2));
by = qy1+lengthdir_y(point_distance(qx1,qy1,qx2,qy2)*i/m,point_direction(qx1,qy1,qx2,qy2));
draw_line_width_color(bx,by,bxp,byp,5,c_blue,c_blue); //desenha em azul stroke 5, mude se quiser!
bxp = bx;
byp = by;
}
Depois... No Draw de um objeto qualquer coloque:
bezier(x1,y1,xcurv,ycurv,x2,y2);
onde:
x1,y1 = origem do arco (P0 imagem abaixo)
xcurv, ycurv = ponto para curvatura (P1 imagem abaixo)
x2,y2 = destino do arco (P2 imagem abaixo)
A imagem explica melhor:
Espero que seja útil.
Dan
eSSE script do bezier tá com um defeito.
Ele não respeita o x2 que seria o ponto onde a curva reverte (P1).
Podem colocar qualquer valor como x2 que a posição continuar a mesma.
Eu creito que a melhor solução é a do chiken invaders, aquilo ali é um sprite (ou varios com larguras diferentes, mas um do lado do outro).
Ele vai subindo na tela dá uma sensação de raio se mexendo, mas na verdade é um sprite estático que vai subindo na tela so isso.
chicoweb- Games Ranking :
Notas recebidas : B+C
Data de inscrição : 15/05/2012
Reputação : 49
Número de Mensagens : 675
Prêmios :
x 0 x 0 x 0
x 1 x 0 x 0
x 0 x 0 x 0
Re: Desenhando Arcos (Curva Bezier)
Que tal um concurso relâmpago? Tema: Crie o raio dos caça fantasmas.
cascavelo- Games Ranking :
Notas recebidas : A - A - A - A - A -A -C
Data de inscrição : 08/12/2011
Reputação : 71
Número de Mensagens : 1011
Prêmios :
x 0 x 0 x 0
x 1 x 2 x 1
x 0 x 0 x 0
Re: Desenhando Arcos (Curva Bezier)
Ah, e se alguém realmente acha que não dá pra fazer raios com curvas complexas em 2D:
https://www.youtube.com/watch?v=Xe_5zxXiQAs
Em qualquer momento depois de 1 minuto dá pra ver.
Aquilo são sprites que giram e se posicionam de acordo com a necessidade do raio.
https://www.youtube.com/watch?v=Xe_5zxXiQAs
Em qualquer momento depois de 1 minuto dá pra ver.
Aquilo são sprites que giram e se posicionam de acordo com a necessidade do raio.
Re: Desenhando Arcos (Curva Bezier)
Realmente o efeito ficou bem bacana.
O único problema que notei foi que quando atinge um alvo, os sprites não fizeram uma curva exata (problemas na animação talvez?). Em certos momentos fica evidente (demais) que são sprites sequenciais.
Por falar nisso, é muito complexo fazer esse efeito?
Tenho em mente um inimigo que vai usar esse efeito para ligar a cabeça dele ao pescoço e ao corpo. Gostaria de saber se tem um tutorial bom e fácil sobre isso.
O único problema que notei foi que quando atinge um alvo, os sprites não fizeram uma curva exata (problemas na animação talvez?). Em certos momentos fica evidente (demais) que são sprites sequenciais.
Por falar nisso, é muito complexo fazer esse efeito?
Tenho em mente um inimigo que vai usar esse efeito para ligar a cabeça dele ao pescoço e ao corpo. Gostaria de saber se tem um tutorial bom e fácil sobre isso.
Mateus O de Andrade- Games Ranking :
Data de inscrição : 25/03/2014
Reputação : 37
Número de Mensagens : 410
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: Desenhando Arcos (Curva Bezier)
Nem é algo tão difícil.shatterhand2 escreveu:Ah, e se alguém realmente acha que não dá pra fazer raios com curvas complexas em 2D:
https://www.youtube.com/watch?v=Xe_5zxXiQAs
Em qualquer momento depois de 1 minuto dá pra ver.
Aquilo são sprites que giram e se posicionam de acordo com a necessidade do raio.
Fiz algo parecido no meu projeto CoaS anos atrás.
A direção inicial do lazer é predefinida e então eu vou acrescentando para mais ou menos de acordo com a direção entre o lazer e o alvo, e isso gera uma curva precisa até o destino.
Para a imagem eu usei uma sprite com 1px de largura esticada com image_xscale na distancia de um ponto ate o outro, ou seja, um loop que percorre cada ponto chave da curva e desenha um draw_sprite_ext.
Re: Desenhando Arcos (Curva Bezier)
Eu estava vendo o tópico e me lembrei de uma coisa. Eu estava procurando um efeito de raio no unity, mas todos eram uma negação.
Então eu criei meu próprio efeito, só que em 3D, ele consiste em determinar o ponto inicial e o final, criar e cortar uma linha reta(apenas no algoritimo) , mover esses pontos em uma circunferência(por delimitar distancia máxima da reta central) e depois traçar uma reta entre eles.
Vou refazer em 2D e colocar no game maker, mas vai demorar um pouco. Quando eu terminar eu posto aki.
Então eu criei meu próprio efeito, só que em 3D, ele consiste em determinar o ponto inicial e o final, criar e cortar uma linha reta(apenas no algoritimo) , mover esses pontos em uma circunferência(por delimitar distancia máxima da reta central) e depois traçar uma reta entre eles.
Vou refazer em 2D e colocar no game maker, mas vai demorar um pouco. Quando eu terminar eu posto aki.
Rodrigo Santiago- Games Ranking :
Notas recebidas : C + C + B
Data de inscrição : 28/07/2012
Reputação : 73
Número de Mensagens : 1281
Prêmios :
x 0 x 0 x 0
x 3 x 1 x 3
x 0 x 0 x 0
Página 1 de 2 • 1, 2
Tópicos semelhantes
» [Resolvido]Linha curva
» ArcOS
» Desenhando um carro 2D (Top-Down)
» Desenhando Sprites
» [Tutorial] Desenhando uma Casa.
» ArcOS
» Desenhando um carro 2D (Top-Down)
» Desenhando Sprites
» [Tutorial] Desenhando uma Casa.
GMBR :: Ensine & Aprenda :: Exemplos :: Game Maker (engines)
Página 1 de 2
Permissões neste sub-fórum
Não podes responder a tópicos