Obrigado por visitar a The Game Makers Brasil Use o fórum de Dúvidas para fazer perguntas. Se está em busca de aprender dê uma olhada nos tutoriais. |
Caixa de Diálogo Undertale
Caixa de Diálogo Undertale
Olá, seguinte, eu estou a um tempo tentando fazer caixas de diálogos. Mas nenhuma fica do jeito que eu quero. Já vi muitos tutoriais també, e nenhum fica do jeito também. caixa de diálogo que chega eu queria, que parece simples até, é semelhante a de Undertale. com o efeito de digitação letra por letra e que trava o personagem quando aparece. E eu queria só a parte do texto mesmo, eu não vou usar a parte onde aparece a imagem dos personagens. eu sou meio novato ainda no GameMaker então peço a ajuda de vocês para poder me guiar mais ou menos como posso fazer essa caixa de dialogo.
- gabrielsch
- Colaborador
- Reações: 0
- Mensagens: 234
-
Re: Caixa de Diálogo Undertale
Esse efeito de letra por letra pode ser realizado usando a função string_copy. Crie uma variavel para ser usada como ponteiro e depois utiliza ela no terceiro argumento da função para exibir apenas uma parte do texto a partir do começo.
Essa engine pode te ajudar a entender melhor assim como limitar o tamanho do texto dentro de uma caixa, o exemplo é super simples mas eficaz:
Caixa de Dialogo Simples
Bons estudos!
Essa engine pode te ajudar a entender melhor assim como limitar o tamanho do texto dentro de uma caixa, o exemplo é super simples mas eficaz:
Caixa de Dialogo Simples
Bons estudos!
- obj_control
- Novato
- Reações: 0
- Mensagens: 11
-
Re: Caixa de Diálogo Undertale
Caramba, eu estou trabalhando exatamente nisso agora !
Mas devo te dizer que tem sido muito doloroso programar essa parada. Por que ?
Por causa do efeito de digitação.
Se você abrir mão dele você pode facilmente fazer uma caixa de dialogo usando draw_text_ext(), que já faz a quebra de linha automática.
Agora com o efeito da digitação, fica mais difícil. Por causa de um "bug" na quebra de linha.
Você poderia tentar inserir "#" com uma função que insere string em outro string (não tentei).
Ou programar a quebra de linha na marra, usando um draw_text para cada caracter (o que estou fazendo).
Então a dica que eu dou é começar fazendo uma caixa de texto mais simples (ou não usar quebra de linha). Por que eu mesmo ainda não posso te ajudar já que eu ainda estou quebrando a cabeça aqui.
Espero que tenha te ajudado de alguma forma. Eu queria ter explicado melhor, mas tô sem tempo nesses dias...
Mas devo te dizer que tem sido muito doloroso programar essa parada. Por que ?
Por causa do efeito de digitação.
Se você abrir mão dele você pode facilmente fazer uma caixa de dialogo usando draw_text_ext(), que já faz a quebra de linha automática.
Agora com o efeito da digitação, fica mais difícil. Por causa de um "bug" na quebra de linha.
Você poderia tentar inserir "#" com uma função que insere string em outro string (não tentei).
Ou programar a quebra de linha na marra, usando um draw_text para cada caracter (o que estou fazendo).
Então a dica que eu dou é começar fazendo uma caixa de texto mais simples (ou não usar quebra de linha). Por que eu mesmo ainda não posso te ajudar já que eu ainda estou quebrando a cabeça aqui.
Espero que tenha te ajudado de alguma forma. Eu queria ter explicado melhor, mas tô sem tempo nesses dias...
Re: Caixa de Diálogo Undertale
Bom dia, amigo! Antes de mais nada, estou digitando isso na marra. Não testei. Se houver algum erro você mesmo deve ajustar ai. Vamos lá: primeiro de tudo, você vai precisar de duas variáveis, uma para armazenar o texto inteiro que você quer digitar, e outra para armazenar o texto que já foi digitado (aos poucos, caractere por caractere). Vamos supor que você nomeie elas como:
Não precisa ser necessariamente do tipo Global, ok? Isso aqui é só para tentar te ajudar com a ideia...
Agora vamos precisar de outra variável e uma timeline. A variável será um inteiro que sempre vamos zerar antes de realizar nosso processo, e a timeline vai servir parar somar +1 à esta variável de tempos em tempos, em uma speed que você mesmo vai definir. A timeline só precisa ter 1 step, que deve ter um código incrementando 1 à variável, bem simples mesmo:
(Primeiro step da Timeline)
Agora vem o código. Eu sugiro escrevê-lo dentro de um script, que você pode usar facilmente como função depois para chamar caixas de diálogo à qualquer momento. Supondo que você vá usar um script, ele ficaria assim:
Bom, com alguns ajustes deve funcionar... Você deve ter algum objeto que vai ficar só controlando as caixas de diálogo. Provavelmente, deve usar a timeline neste objeto. Sempre que o contador for incrementado, você chama o script e a mágica acontece. Não se esqueça de ZERAR O CONTADOR sempre que for digitar novos textos.
Espero ter ajudado!
Mikasuki
Código: Selecionar todos
global.text = ""
global.digitado = ""
Agora vamos precisar de outra variável e uma timeline. A variável será um inteiro que sempre vamos zerar antes de realizar nosso processo, e a timeline vai servir parar somar +1 à esta variável de tempos em tempos, em uma speed que você mesmo vai definir. A timeline só precisa ter 1 step, que deve ter um código incrementando 1 à variável, bem simples mesmo:
(Primeiro step da Timeline)
Código: Selecionar todos
global.contador++
Código: Selecionar todos
texto = argument0 // O primeiro argumento é o texto completo à ser exibido
maxlinha = 60 // Aqui seria o valor máximo de caracteres que podem ser exibidos por linha. Você pode aumentar ou diminuir para definir as quebras de linha (enter)
px = argument1 // Segundo argumento é o ponto X onde vamos desenhar o texto
py = argument2 // Terceiro argumento é o ponto Y onde vamos desenhar o texto
// Agora começa o processo:
if string_length(global.digitado) < maxlinha // Aqui dizemos: se o tamanho do texto digitado (string_length) for menor que o tamanho máximo permitido (definido acima) prosseguimos
&& string_length(texto) <= global.contador{ // O contador que a timeline está incrementando pra gente não pode ser maior que o tamanho do texto à ser digitado
// pois é ele quem vai dizer a posição do próximo caractere que vamos acrescentar no global.digitado
global.digitado+=string_copy(texto, global.contador, 1) // Aqui estamos adicionando ao texto 'digitado' 1 caractere do texto à ser digitado na posição do global.contador
} else{ Se a linha já ultrapassou o limite permitido, devemos então pular uma linha
global.digitado+="#" // '#' apenas para o draw_text quebrar a linha automaticamente
}
// Agora basta desenha o texto atual (global.digitado) na posição enviada para o script
draw_text(px, py, global.digitado)
Espero ter ajudado!
Mikasuki
Quem está online
Usuários navegando neste fórum: Nenhum usuário registrado e 2 visitantes