Entrar
Últimos assuntos
» Retorno da GMBR!!!por theguitarmester Ter 19 Mar 2024, 22:38
» Procuro Programador de game maker
por Wou Sex 15 Mar 2024, 10:27
» Mod APK
por gamerainha Qua 13 Mar 2024, 06:30
» Mudar cor de apenas uma palavra
por lunalol Sex 01 Mar 2024, 13:42
» Aceito pedidos de sprites (Com exemplos meus)
por Sevilha Qua 28 Fev 2024, 12:17
» Inventário simples
por Isquilo_Roedor Qui 22 Fev 2024, 15:18
» Problemas na programaçnao de inimigo [jogo DOOM LIKE]
por Black Mirror Dom 11 Fev 2024, 13:34
» ANDROID MULTI TOUCH
por DiegoBr Dom 04 Fev 2024, 12:13
» Servidor de Discord do fórum?
por Lighter Sáb 27 Jan 2024, 17:18
» Save e Load Json
por Klinton Rodrigues Qui 25 Jan 2024, 11:12
» Colisão com mais de um objeto
por aminaro Seg 22 Jan 2024, 15:02
» Oi sou novo aqui
por Thiago Silveira Alexandre Sáb 20 Jan 2024, 20:55
» Como acessar conteudo comprado no marketplace
por macmilam Sex 19 Jan 2024, 07:42
» Devlogs em vídeos do Block Room
por Joton Seg 15 Jan 2024, 16:56
» Alguém aqui já ganha dinheiro com seus games?
por Joton Seg 15 Jan 2024, 16:49
» ACERVO GMBR MAGAZINE
por Joton Qui 11 Jan 2024, 19:21
» como aumentar o obj sem aumentar a colisão??
por GabrielXavier Qua 10 Jan 2024, 07:21
» Asteroid Core - Early Acesse Update [0.2.0.0]
por JOZ. Seg 08 Jan 2024, 14:39
» Versionamento de código com GitHub
por GabrielXavier Seg 08 Jan 2024, 07:32
» Rio Rise - novo launcher do Gta San Andreas SAMP Brasil
por kolesovsup Sex 29 Dez 2023, 07:16
» a funçao approach ainda existe?
por PEDRINDEV Ter 26 Dez 2023, 20:05
» Inimigo ataca até por trás! >:(
por saim Sex 22 Dez 2023, 08:55
» [RESOLVIDO]Spawn após morte
por Deception_1999 Dom 17 Dez 2023, 16:39
» Remunerado $$$ - Procuro programador para ajudar a "montar" um jogo
por theguitarmester Sáb 02 Dez 2023, 16:28
» Game maker nao abre
por Cerf Dom 26 Nov 2023, 12:01
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 Sprites
» Desenhando um carro 2D (Top-Down)
» [Tutorial] Desenhando uma Casa.
» ArcOS
» Desenhando Sprites
» Desenhando um carro 2D (Top-Down)
» [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
|
|