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
» Procuro Programador de game maker
por Wou Sex 15 Mar 2024, 10:27

» Retorno da GMBR!!!
por vinians Qui 14 Mar 2024, 19:07

» 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


[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