Avatar do usuário
Tutoriais & Aulas
Colaborador
Colaborador
Autor
Mensagens: 174
Registrado em: Qui Abr 28, 2016 11:37 am
Karma: 240

[GRAF] [Engine] Efeitos de texto

Seg Mai 02, 2016 5:19 pm

Autor original: saim

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).
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
 }

Tags:

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante