Criando um diálogo com Scratch

Criando um diálogo com Scratch
Imagem de destaque #cover

Estava jogando RPG com uns amigos outro dia. Era um RPG clássico de mesa. Nesse jogo, éramos personagens em uma época medieval, cavaleiros, magos, entre outros personagens.

Como estou estudando Scratch, resolvi começar a criar uma animação contando uma parte da história que vivemos, mas como podemos criar nossa história?

Era uma vez…

Como começar uma história? "Era uma vez em uma terra muito distante…", ou então, “Em uma galáxia muito distante...”. Essas são algumas das formas que temos para começar um conto.

Toda narrativa se passa em um lugar, um bosque, um castelo, em uma galáxia, numa escola de magia e bruxaria… São tantos os lugares que podemos ambientar nossa história. No meu caso, essa história se passará em um acampamento.

Então, temos que falar para o Scratch que o palco de nossa história será esse acampamento:

Já temos um palco para a nossa história. Mas onde estão os personagens dessa história? Precisamos dizer ao Scratch quem são os atores:

Nessa parte do jogo, estávamos conversando sobre a nossa próxima missão. Os personagens ainda estão calados, precisamos fazer eles se dizerem alguma coisa quando o jogo começar. Vamos começar falando para a fada falar alguma coisa:

Nossa personagem está falando, mas o balão de diálogo não está sumindo… Precisamos que essa mensagem apareça só quando necessária e depois desapareça. Podemos adicionar um tempo específico para isso, então, dois segundos, por exemplo:

Legal, agora ela diz sua fala e depois de um tempo o balão some. Mas só um personagem está falando. Como será que podemos fazer um diálogo entre eles?

Vimos que podemos adicionar o bloco diga <alguma coisa> por <alguns> segundos para fazer os atores falarem:

Os personagens estão falando todos ao mesmo tempo, as suas falas se sobrescrevem.

Se fosse uma revista em quadrinhos, ou uma situação que quiséssemos simular confusão, faria sentido deixar todos os balões de falas aparecendo. Contudo, estamos desenvolvendo uma animação.

O legal é que cada balão apareça somente quando a outro balão sumir. Dessa forma, estamos criando uma progressão na conversa. Mas como podemos causar essa progressão?

Banner da Escola de Programação: Matricula-se na escola de Programação. Junte-se a uma comunidade de mais de 500 mil estudantes. Na Alura você tem acesso a todos os cursos em uma única assinatura; tem novos lançamentos a cada semana; desafios práticos. Clique e saiba mais!

Luz, câmera e ação

Quando atores estão fazendo um filme, eles têm suas falas no roteiro. Quando um para de falar o outro começa. Isto é, um ator espera pelo tempo da fala do outro personagem para começar a falar.

Como o diálogo é uma sequência de falas, podemos falar para o Scratch que a fada começa a falar assim que o jogo começar.

Enquanto isso o outro ator fica parado, esperando a hora de sua fala:

Bacana! Conseguimos causar uma sensação de um diálogo, mas o que acontece se aumentarmos um pouco o tempo de fala da personagem que começa a cena?

O outro personagem começa a falar antes do balão desaparecer. Como nós alteramos o tempo de fala do primeiro ator, temos que falar para o mago esperar um pouco mais:

Nesse caso temos apenas dois atores, mas o que aconteceria se tivéssemos dez personagens na cena com diálogos maiores?

Cada vez que alteramos o tempo de fala de um personagem, temos que alterar o tempo de espera de todos os outros atores, senão uma fala sobrescreverá a outra.

Se tivéssemos 100 personagens, imagine ter que repetir essa ação manualmente 100 vezes. Daria muito trabalho!

Então, o que nós podemos fazer para alterar o tempo que um personagem leva para falar sem ter que modificar o tempo dos outros atores?

As falas que falam

Dizer para um ator esperar a fala do outro terminar para começar a sua é um pouco trabalhoso. Como vimos, se alterarmos o tempo de fala de um ator, temos que alterar de todos os outros.

O ator sabe o tempo de sua fala. E se conseguíssemos que a fala de um ator fosse o gatilho para a fala do outro? Por exemplo, se quando a fada parasse de falar ela enviasse uma mensagem para o mago dizendo que ele deve começar a falar.

Dessa forma, não importa se o tempo de fala da fada mude, pois ela só enviará a mensagem quando terminar seu diálogo.

Podemos falar para o Scratch que quando essa atriz parar de falar, envie uma mensagem para todos na cena dizendo que eles podem tomar alguma ação:

O mago espera até receber essa mensagem e somente quando ele receber sua fala:

Dessa forma, se alterarmos o tempo de diálogo de um personagem, não precisamos alterar o tempo de espera dos outros.

Com mensagem, não deixamos as ações de um personagem tão dependentes das ações de outros. Isto é, dizemos que as ações dos personagem tem um baixo acoplamento.

Para saber mais

Começamos a criar a cena com os nossos atores, porém ainda precisamos trabalhar em outros elementos. Podemos, por exemplo, mudar nosso cenário para passar uma sensação diferente aos espectadores. Como definimos um tempo para as falas sumirem, algumas pessoas podem não conseguir ler todo o texto antes disso acontecer.

Para evitar isso, nós podemos capturar um evento que altera as falas ou até mesmo que muda o placo. Além de histórias, o Scratch nos permite criar jogos, aprender lógica de programação, matemática e muitas outras coisas.

Aqui na Alura Start, temos diversos cursos que utilizam Scratch. Neles, vocês vão aprender a como criar um jogo 2d de naves espaciais, ou então um jogo de cobrança de pênaltis. Aprenderá sobre storytelling e técnicas de criar e contar uma boa história, e muito mais. Gostou dessas técnicas de criar diálogos com Scratch? Não se esqueça de compartilhar conosco nos comentários. :D

Yuri Matheus
Yuri Matheus

Yuri é desenvolvedor e instrutor. É estudante de Sistemas de Informação na FIAP e formado como Técnico em Informática no Senac SP. O seu foco é nas plataformas Java e Python e em outras áreas como Arquitetura de Software e Machine Learning. Yuri também atua como editor de conteúdo no blog da Alura, onde escreve, principalmente, sobre Redes, Docker, Linux, Java e Python.

Veja outros artigos sobre Programação