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

Perguntas? A comunidade te ajuda a resolver.
Avatar do usuário
foogles66
Membro
Membro
Reações: 0
Mensagens: 42

Caixa de Diálogo Undertale

Mensagem por foogles66 » Seg Ago 15, 2016 8:46 pm

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.
Imagem

Avatar do usuário
gabrielsch
Colaborador
Colaborador
Reações: 0
Mensagens: 234

Re: Caixa de Diálogo Undertale

Mensagem por gabrielsch » Seg Ago 15, 2016 9:17 pm

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!
Imagem

Avatar do usuário
obj_control
Novato
Novato
Reações: 0
Mensagens: 11

Re: Caixa de Diálogo Undertale

Mensagem por obj_control » Seg Ago 15, 2016 9:37 pm

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

Avatar do usuário
Mikasuki
Novato
Novato
Reações: 0
Mensagens: 3

Re: Caixa de Diálogo Undertale

Mensagem por Mikasuki » Qui Ago 18, 2016 8:28 am

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: 

Código: Selecionar todos

global.text = ""
global.digitado = ""
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)

Código: Selecionar todos

global.contador++
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:

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

Trancado

Quem está online

Usuários navegando neste fórum: Ahrefs [Bot] e 7 visitantes