GMBR
Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.
Entrar

Esqueci-me da senha

Últimos assuntos
» player não consegue andar
por 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


[Engine] Efeitos de texto

+2
Doritos555
saim
6 participantes

Ir para baixo

[Engine] Efeitos de texto Empty [Engine] Efeitos de texto

Mensagem por saim Seg 13 Fev 2012, 10:44

Nome: Alguns efeitos com texto
Descrição: Um truque que faz os caracteres de um texto se comportar como várias instâncias independentes.
Nível de dificuldade: Iniciante
Requerimentos: Pro, pra alguns efeitos. Outros rodam em lite.
Pré-requisitos: Nenhum.
Download: primeira versão, segunda versão.
Controles: scroll (a rodinha do mouse) troca o efeito a ser usado, espaço inicia.

Cansado de ter aqueles textos estáticos na tela, quando você poderia ter letras pulando alegremente pela tela ou coloridas de forma dinâmica ou ter suas palavras explodindo como se tivessem sido vítimas de personagem do jogo?
Bom, eu vi uma engine muito parecida com essa do link a um tempo atrás e não lembro de tudo o que havia na engine, mas lembro o suficiente pra postar essa engine.

Basicamente, vamos dividir uma string em várias sub-strings de um caractere e armazenar a posição de cada substring de forma que desenhar todas essas substrings em suas posições corretas tenha o mesmo efeito visual que desenhar a string original.
Depois, mudamos essas posições, criando os efeitos.

Pra fazer essas substrings, copiamos o primeiro caractere da string na substring e, depois, eliminamos esse caractere da string original. Eu preferi fazer uma cópia e manter a string original, mas na prática, a única informação a ser mantida é o tamanho (em número de caracteres) dessa string original (a ser corrigido na próxima revisão).
Uma vez definida cada substring, a posição fixa de cada uma delas será igual à posição da substring anterior + o tamanho (a largura) da string anterior.
Tudo isso será feito num único loop, logo no create event do objeto que irá administrar todos os caracteres.
Nesse loop, o caractere e a posição de cada substring serão armazenados em arrays, bem como outras variáveis que serão usadas no momento do efeito (velocidade, gravidade, cor, o diabo).

Durante os efeitos, essas variáveis individuais serão alteradas, fazendo com que as letras pareçam brincar pela tela.

Chega de papo, o lance agora é código. Vou mostrar o create event aqui, o resto você vê baixando a engine (ainda preciso criar uns prints, quando criar eu edito e posto aqui).
Código:
draw_set_font(font0); //define a fonte a ser usada (importante pro string_width)

texto = "Aperte espaço para ver o efeito" //um texto de uma linha qualquer
xt = 20; yt = room_height / 2; //uma posição pro texto original, na tela

var copia, i;
copia = texto; //uma cópia do texto origianal, pra ser editada
for(i = 0; i <= string_length(texto); i += 1){ //pra cada letra do texto
   substring[i] = string_copy(copia, 0, 1); //cria uma substring da primeira letra da cópia
   pyP[i] = yt + 20; py[i] = pyP[i]; // define uma posição (final e temporária) em y pra cada letra
   if (i == 0){ //se é a primeira letra
      pxP[i] = xt; //define a posição final (em x)
      px[i] = pxP[i]; //define a posição temporária (em x)
      }
      else { //pras demais letras
         pxP[i] = px[i - 1] + string_width(substring[i - 1]); //a posição final é igual à temporaria da letra anterior + o tamanho da letra anterior
         px[i] = pxP[i]; //a posição temporária começa igual à final
         }
   spdX[i] = 0; //a velocidade (em x) individual começa como zero
   spdY[i] = 0; //a velocidade (em y) individual começa como zero
   cor[i] = 0; //a cor individual começa como preto
   grav[i] = 0; //a gravidade individual começa como zero

   copia = string_delete(copia, 1, 1); //Elimina a primeira letra da cópia, de modo que o loop pegue todas as letras
   }

Na engine, o create se extende um pouco mais, porque eu preciso mostrar diferentes efeitos, mas o importante, agora, é entender como o loop armazena as variáveis que serão usadas nas arrays. O resto é brincar.

Limitações conhecidas:
- A engine não aceita textos maiores que uma linha. Simplesmente não foi prevista essa possibilidade.

Alterações na aplicação em jogos
- Na engine, os efeitos têm um limite de tempo pra acontecer (o que pode cortar o barato, algumas vezes), mas isso não é necessário na implementação dela nos jogos.
- O que está sendo mostrado são só alguns exemplos do que pode ser feito com essa técnica. Há muito mais possibilidades, basta soltar a imaginação. Vou implementando essa engine no meu tempo livre, vocês podem enviar mais idéias.
- Eu usei triggers pra iniciar os efeitos e um switch, no step event, pra dar continuidade a eles. Pode-se usar scripts, event_user, alarms, ou qualquer outro evento pra iniciar os efeitos. Pra dar continuidade, o step é essencial, mas não há necessidade do switch, já que, normalmente, usa-se apenas um efeito.

Autorização: Qualquer um fica autorizado, desde já, a usar essa engine, sem obrigatoriedade de citar meu nome nos créditos.
Entretanto, eu ficaria agradecido se me mostrassem os jogos com uso dela, por mera curiosidade.

Edit: Fiz uma atualização que deixou o create event muito mais complexo de se entender, mas a engine ficou muito mais útil, então vale a pena queimar as pestanas. Vou manter a versão anterior a fim de possibilitar o entendimento, mesmo pra iniciantes, mas recomendo fortemente baixar a segunda versão.
Basicamente, incluí a opção de usar vários textos diferentes. Daí, cada caractere fica numa array 2D, em que o primeiro índice significa o texto (a string) daquele caractere e o segundo índice significa a posição dele no texto.
Como eu não sabia (e ainda não sei) se o string_copy funciona pra caracteres de além do tamanho do texto e precisava que o valor máximo do segundo índice fosse constante, criei uma rotina que inclui espaços em branco no final de cada texto, até todos terem a mesma quantidade de caracteres.

Se por um lado a inicialização ficou mais complicada, a utilização ficou bem mais simples. Coloquei o início e o step de cada efeito em scripts, joguei o índice desses scripts em arrays e pronto, pra usar é só saber qual efeito você quer e chamar o índice do script (hm... bem que eu podia usar argumentos ao invés de variáveis... fica pra próxima revisão!).

Mas porque isso ficou mais util? Porque agora, com número ilimitado de textos (que podem mudar em ciclos, como na engine, ou ir só do primeiro ao último), pode-se mostrar um texto longo que conte uma história, sem precisar criar um objeto pra cada texto diferente. Pode-se até usar alguma rotina de importação de texto, sei lá. Mesmo só pra leitura, sem aplicação em jogos, esses efeitos são bonitinhos e interessantes.

Não testei nem pretendo testar qual o tamanho da array que começa a dar lag no create event (tem uns laços bem longos, lá), mas pra qualquer tamanho, o step deve ser bem rápido.


Última edição por saim em Qui 23 Fev 2012, 15:30, editado 1 vez(es)
saim
saim

Games Ranking : Nota B

Notas recebidas : C-D-A-B
Data de inscrição : 14/01/2011
Reputação : 136
Número de Mensagens : 3033
Prêmios : [Engine] Efeitos de texto Empty

Medalhas x 1 Tutoriais x 6 Moedas x 0

Ouro x 1 Prata x 0 Bronze x 3

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Ir para o topo Ir para baixo

[Engine] Efeitos de texto Empty Re: [Engine] Efeitos de texto

Mensagem por Doritos555 Seg 13 Fev 2012, 14:39

Bem louco isso!! Eu baixei e estava vendo como funciona, estava alterando uns valores para ver o que dá. Na verdade eu estava tentando mudar os textos durante o jogo, mas deu um desastre e agora a engine não funciona mais Haha;

Depois eu baixo novamente e tento outra vez estudar esse engine, agora estou meio sem tempo. flw
Doritos555
Doritos555

Games Ranking : Nota A

Data de inscrição : 19/01/2012
Reputação : 2
Número de Mensagens : 78
Prêmios : [Engine] Efeitos de texto Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Ir para o topo Ir para baixo

[Engine] Efeitos de texto Empty Re: [Engine] Efeitos de texto

Mensagem por saim Ter 14 Fev 2012, 09:16

Doritos555 escreveu:Na verdade eu estava tentando mudar os textos durante o jogo
Mudar o texto com animação?
Não pensei nisso... mas pode ser possível, sim! Bem mais complexo, mas pode criar efeitos sensacionais! Tipo, você faz uma array 2D de substrings, num índice da array você coloca a qual substring o índice se refere, como antes, e no outro índice, a qual texto a substring se refere.
Daí, usa um efeito pro texto que sai e outro efeito diferente pro texto que entra. Talvez até evita animar as substrings que sejam iguais, como se o computador estivesse com preguiça de tirar uma letra pra colocar outra igual (o que, na verdade, vai dar é um pouco mais de trabalho).

Vou ver o que dá pra fazer, aqui...
saim
saim

Games Ranking : Nota B

Notas recebidas : C-D-A-B
Data de inscrição : 14/01/2011
Reputação : 136
Número de Mensagens : 3033
Prêmios : [Engine] Efeitos de texto Empty

Medalhas x 1 Tutoriais x 6 Moedas x 0

Ouro x 1 Prata x 0 Bronze x 3

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Ir para o topo Ir para baixo

[Engine] Efeitos de texto Empty Re: [Engine] Efeitos de texto

Mensagem por Doritos555 Ter 14 Fev 2012, 14:36

Não seria bem mudar o texto com animação, o que ia ser bem complicado. Isso ia ficar bem mais bonito na verdade. Até mudar o texto após a animação serve.

Eu coloquei um texto_number =0 no create event, e no alarm[0] coloquei texto_number +=1 (pra passar pro proximo texto toda vez que um efeito acaba) e no step, eu coloquei

if texto_number =1{texto = "Primeiro texto"}
if texto_number =2{texto = "Segundo texto"}
if texto_number =3{texto = "Terceiro texto"}
if tex...........


Mas eu percebi que a frase que recebe a animação não muda. Pelo jeito não é a variável texto que controla a frase da animação, por que eu fazendo o que fiz acima, o texto estatico muda toda vez que a animação acaba, mas o animado volta assim:

Digite sua f
Digite sua fra
Digite su

Essas coisas do gênero (a mesma frase que você coloca no começo inacabada). Acho que isso dai ainda não é pra mim, é bem complicado D:
Doritos555
Doritos555

Games Ranking : Nota A

Data de inscrição : 19/01/2012
Reputação : 2
Número de Mensagens : 78
Prêmios : [Engine] Efeitos de texto Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Ir para o topo Ir para baixo

[Engine] Efeitos de texto Empty Re: [Engine] Efeitos de texto

Mensagem por saim Qui 23 Fev 2012, 15:33

Modifiquei a engine. Como ficou um tanto complexo, o create event, mantive a engine anterior, que é mais simples e serve pra mostrar a idéia básica. Mas está tudo muito comentado, acho que com um pouco de esforço dá pra entender a segunda versão numa boa.
A atualização está no edit do primeiro post. A segunda versão está com o download logo ao lado da primeira versão.
saim
saim

Games Ranking : Nota B

Notas recebidas : C-D-A-B
Data de inscrição : 14/01/2011
Reputação : 136
Número de Mensagens : 3033
Prêmios : [Engine] Efeitos de texto Empty

Medalhas x 1 Tutoriais x 6 Moedas x 0

Ouro x 1 Prata x 0 Bronze x 3

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Ir para o topo Ir para baixo

[Engine] Efeitos de texto Empty Re: [Engine] Efeitos de texto

Mensagem por jharik Qua 21 Mar 2012, 07:14

aki deu erro ta dando

___________________________________________
ERROR in
action number 1
of Draw Event
for object objEfeito:

Error in code at line 7:
draw_text_color(px[textoSai, j], py[textoSai, j], substring[textoSai, j], cor[textoSai, j], cor[textoSai, j], cor[textoSai, j], cor[textoSai, j], alpha[textoSai, j]); //desenha a letra na posi��o tempor�ria (que pode ser igual � final)
^
at position 6: This function is not available in the Lite Edition.
jharik
jharik

Data de inscrição : 19/03/2012
Reputação : 1
Número de Mensagens : 25
Prêmios : [Engine] Efeitos de texto Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Ir para o topo Ir para baixo

[Engine] Efeitos de texto Empty Re: [Engine] Efeitos de texto

Mensagem por saim Qua 21 Mar 2012, 08:33

Esse é um dos efeitos que requerem a versão pro. É que ele usa a função draw_text_color.
Infelizmente, você vai ter que se virar sem ele ou conseguir uma versão pro.

...
Esse de cores ainda dá pra ficar variando a cor do draw_set_color, e, se bobear, até do draw_set_alpha, mas tenho a impressão que o preço em processamento não é barato.
Seja como for, essa linha está dentro de um loop, certo? Você coloca, antes dela, "draw_set_color(cor[textoSai, j]); draw_set_alpha(alpha[textoSai, j]);" e substitui a linha por "draw_text(px[textoSai, j], py[textoSai, j], substring[textoSai, j])". NESSE CASO, pode ser que funcione.

Ainda que não funcione, não é um dos meus preferidos. Elimine os efeitos que gerarem esses erros, pra ver o resto. Os mais legais, na minha opinião, usam apenas funções lite.
saim
saim

Games Ranking : Nota B

Notas recebidas : C-D-A-B
Data de inscrição : 14/01/2011
Reputação : 136
Número de Mensagens : 3033
Prêmios : [Engine] Efeitos de texto Empty

Medalhas x 1 Tutoriais x 6 Moedas x 0

Ouro x 1 Prata x 0 Bronze x 3

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Ir para o topo Ir para baixo

[Engine] Efeitos de texto Empty Re: [Engine] Efeitos de texto

Mensagem por mcjharikmc Qua 21 Mar 2012, 08:56

show mais aki n pego [Engine] Efeitos de texto 745821
mcjharikmc
mcjharikmc

Data de inscrição : 21/03/2012
Reputação : 1
Número de Mensagens : 1
Prêmios : [Engine] Efeitos de texto Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Ir para o topo Ir para baixo

[Engine] Efeitos de texto Empty Re: [Engine] Efeitos de texto

Mensagem por Zero. Qui 22 Mar 2012, 22:13

Foi vc q fez isso ?
Se foi vc é um monstro vei. que isso incrivel adorei.
Vc é muito bom, vou pagar pra vc me da aula vc mora aonde Happy ?
Mto massa !
Zero.
Zero.

Data de inscrição : 19/08/2010
Reputação : 47
Número de Mensagens : 1300
Prêmios : [Engine] Efeitos de texto Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 1 Prata x 0 Bronze x 0

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Ir para o topo Ir para baixo

[Engine] Efeitos de texto Empty Re: [Engine] Efeitos de texto

Mensagem por Super Maker Qui 22 Mar 2012, 22:28

Perfeitamente perfeito!
Saim, você é um gênio, ficou muito bem esses efeitos.
Valeu!
Super Maker
Super Maker

Data de inscrição : 09/07/2011
Reputação : 6
Número de Mensagens : 646
Prêmios : [Engine] Efeitos de texto Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Ir para o topo Ir para baixo

[Engine] Efeitos de texto Empty Re: [Engine] Efeitos de texto

Mensagem por saim Qui 22 Mar 2012, 23:27

FlyAway escreveu:Foi vc q fez isso ?
Mais ou menos... FAZER, fui eu quem fez, mas a idéia original não é minha.
Eu já tinha visto uma engine parecida e lembrava da base: dividir o texto em sub-strings de um caractere. Na época, só ficou isso na minha cabeça, o resto eu não consegui entender.
Aí, o Doritos555 precisou de algo do tipo e eu pensei: agora eu já dou conta de refazer aquela engine! Fiz. Tenho a impressão que a engine original dava suporte pra textos em múltiplas linhas, mas isso eu não consegui fazer.

Que bom que a engine agradou! Eu me diverti, fazendo ela. Adoro esses usos de geometria em games. Se alguém tiver mais alguma idéia pro texto entrando ou saindo, por favor, sugira!
saim
saim

Games Ranking : Nota B

Notas recebidas : C-D-A-B
Data de inscrição : 14/01/2011
Reputação : 136
Número de Mensagens : 3033
Prêmios : [Engine] Efeitos de texto Empty

Medalhas x 1 Tutoriais x 6 Moedas x 0

Ouro x 1 Prata x 0 Bronze x 3

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Ir para o topo Ir para baixo

[Engine] Efeitos de texto Empty Re: [Engine] Efeitos de texto

Mensagem por Conteúdo patrocinado


Conteúdo patrocinado


Ir para o topo Ir para baixo

Ir para o topo

- Tópicos semelhantes

 
Permissões neste sub-fórum
Não podes responder a tópicos