Aprenda a programação do zero com o Scratch | Stephan Haewß | Skillshare
Pesquisar

Velocidade de reprodução


1.0x


  • 0.5x
  • 0.75x
  • 1x (Normal)
  • 1.25x
  • 1.5x
  • 1.75x
  • 2x

Aprenda a programação do zero com o Scratch

teacher avatar Stephan Haewß

Assista a este curso e milhares de outros

Tenha acesso ilimitado a todos os cursos
Oferecidos por líderes do setor e profissionais do mercado
Os temas incluem ilustração, design, fotografia e muito mais

Assista a este curso e milhares de outros

Tenha acesso ilimitado a todos os cursos
Oferecidos por líderes do setor e profissionais do mercado
Os temas incluem ilustração, design, fotografia e muito mais

Aulas neste curso

    • 1.

      Apresentação

      1:16

    • 2.

      Abra e instale o Scratch

      3:20

    • 3.

      Visão geral da interface do usuário do Scratch

      22:45

    • 4.

      Primeiro jogo, primeiro código

      11:38

    • 5.

      Como melhorar o movimento do balão

      9:25

    • 6.

      O evento clicado

      4:03

    • 7.

      Reproduza som e conte a partitura

      9:41

    • 8.

      Fazendo mais balões

      9:56

    • 9.

      Como adicionar delay aos balões

      8:39

    • 10.

      Criar uma conta para armazenamento e compartilhamento em nuvem

      5:20

    • 11.

      Novo jogo que controla a nave espacial

      13:26

    • 12.

      Adicionando o fundo

      9:14

    • 13.

      Mover o fundo

      6:51

    • 14.

      Segundo sprite de fundo

      6:41

    • 15.

      Primeiro obstacle the rock

      8:28

    • 16.

      Como bater na pedra

      4:11

    • 17.

      Danos e reparos

      7:38

    • 18.

      Posição inicial aleatória e blocos personalizados

      10:56

    • 19.

      Clonando nossa rocha

      14:07

    • 20.

      Atraso aleatório

      4:39

    • 21.

      Como coletar estrelas

      9:37

    • 22.

      Aterrando em um planeta

      15:40

    • 23.

      Como refatorar o roteiro do foguete

      6:35

    • 24.

      Como mudar de pano de fundo

      7:03

    • 25.

      Como comprar reparos

      12:19

    • 26.

      Variando o preço aleatoriamente

      16:06

    • 27.

      Como corrigir o código de fundo

      7:34

    • 28.

      Sair da tela de negociação

      14:55

    • 29.

      Novo jogo que controla o personagem principal

      5:28

    • 30.

      Animação a pé

      9:38

    • 31.

      Como montar a primeira sala

      8:09

    • 32.

      Exibir informações importantes

      5:28

    • 33.

      Como pegar a chave

      3:01

    • 34.

      Mover a chave para o inventário

      8:13

    • 35.

      Como desbloquear a porta

      4:01

    • 36.

      O menu de ação

      7:17

    • 37.

      Como desbloquear a porta com a ação de uso

      5:51

    • 38.

      Bloco de fala personalizado

      13:27

    • 39.

      Mude a sala

      8:06

    • 40.

      Como mudar objetos de jogo para clones

      8:04

    • 41.

      Como apresentar listas

      11:37

    • 42.

      Como colocar os objetos

      4:44

    • 43.

      Lista de inventário

      4:11

    • 44.

      Como colocar objetos no inventário

      10:18

    • 45.

      Como corrigir descrições de objetos

      3:28

    • 46.

      Mostrando a descrição no inventário

      3:35

    • 47.

      Como corrigir a lógica do jogo

      9:58

    • 48.

      Como colocar o Avery no lado correto

      4:15

    • 49.

      Como adicionar a mochila

      8:54

    • 50.

      Como colocar o button corretamente

      9:38

    • 51.

      Exibindo mensagens diferentes para cada uso de objeto

      6:38

    • 52.

      Verifique as condições de saída

      6:57

    • 53.

      Novo jogo Jump 'n Run

      5:36

    • 54.

      Simular a gravidade

      5:19

    • 55.

      Como cavar o gato

      7:27

    • 56.

      O gato pula

      6:45

    • 57.

      Mover o gato para a esquerda

      4:34

    • 58.

      Como enfrentar a direção certa e corrigir o salto duplo

      4:30

    • 59.

      Como corrigir a detecção de colisão

      13:33

    • 60.

      Correção de movimento horizontal

      4:12

    • 61.

      Bater na caixa, não no gato

      10:58

    • 62.

      Quebra-cabeça e 2ª sala

      14:26

  • --
  • Nível iniciante
  • Nível intermediário
  • Nível avançado
  • Todos os níveis

Gerado pela comunidade

O nível é determinado pela opinião da maioria dos estudantes que avaliaram este curso. Mostramos a recomendação do professor até que sejam coletadas as respostas de pelo menos 5 estudantes.

26

Estudantes

--

Projeto

Sobre este curso

Mergulhe no mundo emocionante da programação com este curso para iniciantes. Perfeito para codificadores aspirantes a todas as idades, este curso apresenta os fundamentos da programação usando o Scratch, uma linguagem de programação visual vibrante e intuitiva.

O que você vai aprender:

  • Noções básicas de conceitos de programação por meio de experiência prática
  • Como usar o ambiente de codificação baseado em blocos do Scratch
  • Fundamentos do design e desenvolvimento de jogos
  • Habilidades de resolução de problemas e pensamento computacional
  • Como criar animações e histórias interativas

Destaque do curso:

Crie seu primeiro jogo do zero! Neste curso, você vai criar um jogo envolvente de balão, onde os jogadores devem estourar balões enquanto sobem da parte inferior da tela. Este projeto vai ensinar conceitos essenciais de programação, incluindo:

  • Como configurar ambientes de jogo
  • Como criar e manipular sprites
  • Como implementar interações com os usuários
  • Como adicionar randomização para uma jogabilidade envolvente
  • Como manter a pontuação e gerenciar estados de jogo com variáveis

Por que o Scratch?

O Scratch é o ponto de partida perfeito para novos programadores. Sua interface visual de arrastar e soltar permite que você se concentre na lógica e na criatividade sem ficar atolado pela sintaxe complexa. As habilidades que você aprende aqui vão construir uma base sólida para futuros esforços de programação.

Para quem é este curso?

  • Iniciantes absolutos sem experiência prévia em programação
  • Estudantes que querem explorar a informática
  • Educadores que querem introduzir a programação em seu plano de estudos
  • Qualquer pessoa interessada em desenvolvimento de jogos e narrativa interativa

Não é necessária nenhuma experiência anterior de programação, basta trazer sua criatividade e diversidade!

Junte-se a mim nesta jornada emocionante pelo mundo da programação. Ao final deste curso, você terá criado seu primeiro jogo e ganho a confiança para explorar projetos de programação ainda mais complexos. Vamos começar sua aventura de programação hoje!

Conheça seu professor

Teacher Profile Image

Stephan Haewß

Professor
Level: Beginner

Nota do curso

As expectativas foram atingidas?
    Superou!
  • 0%
  • Sim
  • 0%
  • Um pouco
  • 0%
  • Não
  • 0%

Por que fazer parte da Skillshare?

Faça cursos premiados Skillshare Original

Cada curso possui aulas curtas e projetos práticos

Sua assinatura apoia os professores da Skillshare

Aprenda em qualquer lugar

Faça cursos em qualquer lugar com o aplicativo da Skillshare. Assista no avião, no metrô ou em qualquer lugar que funcione melhor para você, por streaming ou download.

Transcrições

1. 01 Introdução: Bem-vindo a este curso. É o melhor curso para iniciantes para todos que desejam mergulhar mundo da codificação e programação de jogos. Olá. Sou seu instrutor e estou empolgado em guiá-lo nessa jornada divertida e interativa de programação Se você nunca escreveu uma linha de código antes ou está procurando aprimorar o básico, este curso é perfeito para você Neste curso, você aprende a criar quatro jogos emocionantes do zero, um jogo estourando Malon, um jogo de exploração espacial, uma aventura de apontar e clicar e um jogo uma aventura de apontar e clicar e básico de pular e correr Ao longo do caminho, apresentaremos conceitos essenciais de programação, como variáveis, mensagens, estruturas de controle, como if then and repeat, listas e clonagem Você vê como esses conceitos ganham vida em seus jogos. Com as instruções passo a passo e os projetos práticos, você ganhará a confiança e as habilidades para criar seus próprios jogos e projetos do zero. Você está pronto para começar sua aventura de programação? Junte-se a mim na programação com o Scratch Vamos tornar a programação divertida e acessível para todos E comece agora mesmo sua jornada no empolgante mundo da programação com o Scratch. 2. Abra e instale o Scratch: Aqui está a página inicial da web, e este é o lugar onde você precisa acessar seu navegador favorito, qual navegador estou usando o Chrome aqui. Realmente não importa qual deles você usa, mas talvez para um recurso eu gostaria de mostrar no final deste vídeo, talvez você queira usar o Chrome ou o Edge. Não sei exatamente se isso também é possível em outros navegadores. Talvez o Safari também. Mas vamos começar aqui nesta página e você precisa acessar esse URL e raspar ponto U. Então, coloque isso na barra de endereço do seu navegador favorito Como eu disse, estou usando o Chrome aqui. Mas isso não deveria importar. Então, temos esta bela página de rascunho aqui, você tem projetos em destaque que pode analisar e também tem tutoriais Mas, no momento, o que é realmente importante é esse botão aqui, comece a criar. Você não precisa criar uma conta, não precisa se registrar. Mas você pode fazer isso. Mas faremos isso sem nos registrar, sem entrar no zero Aqui está esse botão. Você pode criar uma conta e depois salvar seus projetos nessa conta e depois editar os projetos da maneira que quiser. Mas, no momento, estamos usando este ano. Comece a criar, basta clicar aqui. E então você entrará estúdio, no estúdio scratch, e aqui você tem sua interface de usuário, seu Canvas, e este será seu local de trabalho, por assim dizer. Explicarei para que servem as diferentes regiões aqui e como elas funcionam no próximo vídeo. Mas, por enquanto, há mais uma coisa que quero mostrar como você pode instalar este aplicativo, ou como você pode criar um aplicativo, um aplicativo web a partir dele? Isso está aqui no Chrome, então você precisa pressionar esse botão de menu aqui. Então você abre este menu e, em seguida, Proteger e compartilhar é o item de menu correto aqui, Proteger e compartilhar e, em seguida, Instalar página como aplicativo. Então clique aqui. E então você também pode nomeá-lo aqui, renomeá-lo. Já se chama Scratch Imagine Program Share. Então clique em Instalar. A página da web abrirá em uma nova janela como um aplicativo da web. E aqui você pode, por exemplo, maximizar a janela, você não tem a barra de endereço aqui. Você tem muito espaço para seus projetos e também pode fixá-lo na barra de tarefas ou no dock do Mac e usá-lo como um programa normal. Você não precisa fazer isso. Você também pode usá-lo em seu navegador. Mas eu prefiro usá-lo assim. No Edge, é um pouco diferente, então isso estará em algum lugar aqui, em aplicativos, instale o site como um aplicativo, algo assim. No Safari e no Firefox. Eu sou honesto. Eu simplesmente não sei como fazer isso lá, mas acho que você pode descobrir. Ok, aqui está. Este é o nosso local de trabalho aqui, e começamos a criar projetos. Mas antes disso, vou te mostrar por aqui e mostrar como você pode entender todas essas regiões todas essas guias e os itens do menu aqui Então, até o próximo vídeo. 3. Visão geral da interface do usuário do Scratch: Então, aqui estamos no zero, e esta é a versão do aplicativo, a versão do aplicativo web, mas você também pode fazer isso, é claro, no navegador. Isso não é problema. Acabei de instalar o aplicativo exatamente como eu disse antes para ter mais espaço e ter uma janela extra na barra de tarefas ou no dock do mapa. De qualquer forma, você pode fazer isso no navegador, você pode fazer isso no aplicativo. Isso é sobre a interface do usuário do Scratch, e a primeira coisa que quero mostrar é como definir o idioma certo aqui. Isso está definido para inglês, é claro, porque esse é um curso de inglês, mas você pode configurá-lo de forma diferente. Para fazer isso, basta acessar as configurações. Aqui, este menu, menu suspenso, clique nele, e então você tem este globo com linguagem. E aqui você tem muitos idiomas, por exemplo, espanhol ou alemão, porque eu sou alemão, vou mudar agora para alemão. Então você tem todas as sequências aqui, todos os textos aqui em alemão Também os blocos. Veja, há uma engrenagem, agora Schritt. Isso é alemão. Eu disse isso em inglês, novamente, então eu dei dez passos, virei 15 graus, e tudo aqui nesses blocos, que serão os blocos de construção de nossos scripts, é claro, tudo está no idioma que você escolheu aqui. É aqui que você escolhe o idioma favorito no qual deseja programar porque tudo estará então em inglês, incluindo todos os blocos aqui. Então, a primeira seção e o primeiro conceito que eu quero mostrar aqui no Scratch I é o conceito de Sprites Para isso, acabo de fechar este vídeo tutorial aqui. Então, basta clicar nesse X aqui, fechar e então ele desaparecerá. Você também pode assistir, é claro, e ter a primeira impressão dos mecanismos aqui no Scratch. Mas, vamos aos Sprites. Os sprites estão aqui e esses são os personagens ou coisas parecidas que você tem em seu jogo Por exemplo, esse gato aqui é o sprite padrão aqui. Você pode selecionar os sprites aqui. Se você tiver vários, poderá selecionar cada um. Eu posso criar um novo, mas vamos verificar o primeiro, o sprite padrão aqui, o gato Você pode ver o gato aqui, e esta é a tela do jogo, então você pode ver uma prévia do seu jogo aqui. Essa será a aparência do seu jogo quando você começou, e aqui você também pode mover o gato aqui, mover o sprite para qualquer lugar que você quiser Então, aqui você terá todos os seus sprites, e esses são, por assim dizer, os personagens principais do seu jogo Então, tudo o que se move, tudo o que é controlado, tudo o que é dinâmico em seu jogo será um sprite Então, aqui você tem a lista de sprites, e então você pode nomear os sprites Então, aqui você pode mudar o nome do sprite. Posso chamá-lo de gato, por exemplo. Então aqui na lista também estará o gato. É uma unha do polegar aqui. Você também pode apagar o sprite aqui, mas não vamos fazer isso no momento Aqui você pode definir a posição como números. A posição no momento é -46, e eu posso mover o gato aqui nesta tela, e você verá que isso também muda Então isso é -149 agora. Mas abordaremos isso mais tarde apenas para mencionar aqui que você pode definir as coordenadas da posição do gato na tela aqui. Arrastando o gato aqui, arrastando o sprite, ou você também pode alterar esses números aqui, x e y. Então isso é possível aqui, e então você pode mostrar o gato ou esconder o gato Se você quiser que seja invisível, então você tem que escolher este i que está riscado, ou se você quiser que ele fique visível, então escolha o i. Então, aqui, você tem um tamanho, então isso é 100%. Se você quiser que tenha metade do tamanho, insira aqui 50%, então é apenas metade do tamanho ou também pode optar por dobrar o tamanho. Então você tem 200%. Então, teremos o dobro do tamanho do sprite padrão normal aqui Portanto, esse é o tamanho padrão, 100 e, em seguida, 200 será o dobro do tamanho. Um quarto será 25 aqui, portanto, apenas um quarto do tamanho padrão. E também, é claro, 400% serão quatro vezes maiores, e então você tem esse gato gigante aqui Ok, mas vamos colocá-lo novamente em 100, e aqui você também pode girá-lo Então esse é o ângulo padrão aqui. E quando eu arrasto isso aqui, essa seta, eu a arrasto aqui neste círculo. Você vê que o gato está girando aqui. Então esse será o ângulo zero aqui, então apontar para cima e depois apontar para a direita com 90 graus, 180 será apontar para baixo e depois para a esquerda É um número negativo, então -90 será no sentido anti-horário Em seguida, o gato está de cabeça para baixo e apontando para a esquerda. Vamos colocá-lo em 90 graus novamente. Também pode alterá-lo aqui com o teclado, é claro, 90 serão exatamente esses 90 graus, e você também pode girá-lo para que possa espelhá-lo Então, ele será espelhado aqui para a esquerda ou para a Então isso muda o modo aqui, por assim dizer, de rotação para espelhamento, para a esquerda ou para a direita E aqui eu o altero de volta para rotação. E aqui eu posso desligar completamente a rotação. Portanto, não há mais mudança aqui se eu mudar a direção. Ok, mas também abordaremos isso mais tarde, só para dizer que aqui, você pode mudar a direção. Vamos colocá-lo em 90 graus e girar, novamente, os valores padrão aqui. E aqui está. Seus sprites, e eu podemos fazer um novo aqui Então, basta pressionar esse botão. E então você tem algumas predefinições para escolher. Você também pode pesquisar aqui ou escolher uma categoria. Por exemplo, todos os animais, um urso, um gato voando, uma garota, um dinossauro, um pato, o que você quiser, ou talvez você queira pessoas, pessoas ou fantasias como dragões E assim por diante. Você também pode ter cartas aqui. Se quiser escrever algo na tela, você pode escolher essas letras aqui. Mas talvez vamos pegar um balão, e agora temos um sprite de balões Temos o gato e o balão. Agora também podemos deletar o gato aqui. Não precisamos mais disso. Como nosso primeiro jogo será sobre balões, vamos deletar o gato Agora temos apenas o balão. Se você acidentalmente excluiu algo ou alterou algo e deseja que seja revertido para ser desfeito, pressione o controle Z ou o comando Z, ou você também pode escolher aqui este menu adicionado e depois restaurar o sprite neste caso, e então teremos Aqui temos nossos sprites, e eu vou deletar novamente o gato porque não precisamos mais dele. Aqui, também podemos mover o balão, é claro, arrastando-o na tela, e você vê que também, todos esses números aqui, todos esses números aqui, então x e y também mudarão da mesma forma que com o gato Ok, isso é tudo para a seção Sprite. Passamos para a próxima seção. Vamos passar para a próxima seção e essa será a seção de código aqui. Está relacionado aos Sprites. Se você tem um sprite aqui e selecionou , na verdade adicionará aqui o código desse sprite Isso significa que esse código aqui, o script que você está criando aqui, será anexado ao sprite Você também pode anexar um script a um plano de fundo. Então aqui você tem cenários de palco. Então, aqui está o palco. Esta é outra seção, e essa é uma espécie de plano de fundo do seu jogo, e aqui você pode ter vários planos de fundo e depois trocá-los dinamicamente com código Além disso, você pode ter vários planos de fundo, como eu disse, dependendo do que você selecionar aqui Portanto, se você selecionar o estágio, adicionará o código desse estágio aqui ou, se selecionar Sprite aqui, adicionará o código desse Eu selecionei o balão, como você pode ver aqui, essa é a diferença Aqui eu selecionei o pano de fundo, e aqui eu selecionei o sprite, e agora eu posso editar o código, o script, por assim dizer, para esse Para isso, você tem todos esses blocos aqui. Então, percorra tudo aqui com a barra de rolagem. Então, tudo estará aqui, mas você também pode alternar para categorias, poder pular para a categoria de eventos, por exemplo, ou para a categoria de blocos M escolhendo uma categoria aqui. Então, movimento de primeira categoria. Aqui encontraremos tudo o que está relacionado ao movimento do sprite, movê-lo até girá-lo Assim, você também pode definir a rotação aqui dinamicamente durante o tempo de execução do seu jogo Temos looks, tudo o que está relacionado à aparência do seu sprite aqui Por exemplo, você pode deixar o balão dizer alguma coisa, então você faz essa chamada, ou pode trocar a roupa para fazer animações aqui ou pode trocar a roupa para fazer animações Você também pode definir o tamanho aqui dinamicamente, para que possa diminuí-lo, torná-lo maior, mostrar e ocultar e assim por diante Aqui você tem som, então você pode tocar um som. Por exemplo, se o sprite for clicado com um botão do mouse, você poderá reproduzir um som aqui Aqui você tem eventos. Quando certos eventos ocorrem. Por exemplo, quando o jogo começa, esse é o evento aqui. Você pode usá-lo para acionar blocos diferentes então. Mas vou mostrar isso mais tarde. Aqui você tem controles, ou seja, tudo o que está relacionado a loops ou condicionais Se for esse o caso, então faça isso, aquela coisa que você pode fazer de novo Então temos a detecção Se o sprite tocar em algo ou tocar em uma cor, por exemplo, ou tocar em outro sprite, isso Operadores, muito importantes, operadores matemáticos, por exemplo, iguais ou menores que maiores que tudo ou escolher um número aleatório, muito importante para jogos, para torná-lo mais interessante, para torná-lo não determinístico, você pode encontrar aqui Depois, também variáveis muito importantes e, claro, explicarei as variáveis mais tarde. Mas aqui, variáveis muito importantes. Você pode armazenar valores em variáveis e armazenar um estado em uma variável, por exemplo, e isso é essencial para um jogo. Sem variáveis, você não pode fazer muito de um jogo, mesmo do zero. Aqui, em meus blocos, você pode definir seus próprios blocos que contêm diferentes subblocos, por assim dizer Mas isso cobrirá, é claro, mais tarde. E aqui, você também pode adicionar plug-ins. Você tem essas extensões aqui, então algo como conversão de texto em fala, então você pode deixar o motor de jogo falar alguma coisa, então um texto que você digita pode ser falado por uma voz artificial, ou você pode tocar instrumentos e bateria, você pode desenhar e assim por diante, também traduzir, e você também pode usar todo esse código de rascunho para realmente controlar um robô ou algo assim assim com Leg ou Minetorms Se você adicionar uma extensão aqui, essa será uma nova categoria aqui e, em seguida, você poderá escolher. Então, por exemplo, se eu escolher música aqui, haverá uma nova categoria de música, o final, e então você poderá usar, por exemplo, para tocar um som de bateria. Ok, então esse é o código aqui. Passaremos muito tempo aqui nesta seção de código. Isso é muito importante, é claro, mas também há outras seções, e a seguir serão os figurinos. As fantasias estão aqui, ao lado do código. Podemos selecioná-lo e, em seguida, você pode ver o caso. Essa é a aparência do seu sprite, os gráficos do seu sprite E nesse caso, é um balão. É um gráfico vetorial aqui, então não é pixel por pixel, mas é composto fora de forma, então você também pode adicionar uma forma aqui, por exemplo, um círculo. Basta clicar neste ícone aqui e, em seguida, você pode fazer um círculo arrastando esse retângulo Não é nem mesmo um círculo. Não, é um círculo. Ok. Então você pode fazer círculos ou elipses ou algo parecido, ou você também pode, é claro, escrever algo aqui, um texto Então, balão, por exemplo, em cores diferentes. Abordaremos tudo isso em capítulos posteriores. Não se preocupe se você não entender tudo isso. Isso é apenas uma visão geral. Aqui você pode escolher a aparência do seu Sprite e também o que você pode fazer é criar animações Aqui você tem todos os quadros para animações e pode, no código, alternar para o próximo quadro, por exemplo Você pode fazer coisas como em um loop e, em seguida, percorrer todas essas animações aqui. Portanto, isso também é muito importante para animações aqui. Você pode adicionar muitos, muitos quadros aqui. Tudo pode parecer diferente, então você pode mudar , percorrer todos esses quadros aqui, deixar parecer que é uma espécie de movimento, um movimento, algo parecido. Então, isso é animação aqui, mas no momento, só temos esse primeiro quadro aqui, também podemos excluir os outros quadros para não nos confundirmos. Então, agora temos apenas um quadro, então não há animação no momento. Temos esse balão aqui, eu também posso deletar Portanto, você pode selecionar as formas aqui com esse cursor de seleção. Então selecione a ferramenta, selecionada aqui com esse retângulo, e então eu posso excluí-la, por exemplo, com este botão aqui ou pressionando a tecla delete Agora ele sumiu e também esse texto, eu também posso deletar aqui. Então, desapareceu. Ok. Além disso, você pode fazer algo como virar essa vertical horizontalmente e também copiá-la e colá-la novamente, e todos nós abordaremos Esse traje é muito importante, também para a aparência do seu sprite, a aparência do seu sprite Então, neste caso, é um balão feito de formas diferentes aqui Você também pode simplesmente pintar algo aqui. Por exemplo, a pintura de forma livre também é possível. Isso não é problema. Para reverter algo, você também pode usar essas setas aqui para que eu possa reverter tudo o que fiz até agora Em seguida, refaça novamente. Vamos nos livrar desses pontos aqui. Agora temos novamente nosso balão, só um balão, e pronto Por enquanto, acabamos com as roupas e falaremos mais sobre isso mais tarde. A próxima seção serão os sons. Então, os sons estão aqui, ao lado das roupas, e aqui você pode adicionar mais sons aos sprites Um sprites pode ter sons. Aqui temos esse som pop. Você pode tocá-lo com este botão de reprodução aqui e ouvir esse pop. Também são muito importantes para os jogos os sons, para que você tenha um feedback, também um feedback acústico de suas ações como jogador Aqui você também pode adicionar quantos sons quiser. Então, por exemplo, aqui você pode adicionar um novo som. Há alguns sons predefinidos aqui. Você também pode reproduzi-los aqui passando mouse sobre este botão aqui, este botão de reprodução Além disso, haverá música ou apenas sons, barulhos e acordes diferentes E os sons de cliques, ou estes também são piano ou saxofone, tambor, trompete Há muitos, muitos sons aqui para escolher, mas você também pode enviar seus próprios sons. Então você também pode gravar seus próprios sons aqui. Então, se você tem um microfone conectado ao seu computador e pode gravar algo aqui ou escolher um som aleatório, ou você pode carregar um som arbitrário que você gravou em outro lugar ou que você baixou em algum lugar, e então você pode carregá-lo aqui e usá-lo em seu jogo como um som aqui E então você pode acionar os sons do código desta seção aqui. Há também essa categoria de som, e lá você pode reproduzir som. Pop, por exemplo, só há esse som aqui. Mas se você adicionar um, vamos adicionar um. Por exemplo, este. Agora temos dois sons, e então você pode ouvir o som de reprodução, também de guitarra elétrica. Eu posso simplesmente mover isso aqui, e então você pode escolher não só pop, mas também o segundo som, uma guitarra elétrica. Então, se você pressionar este bloco que acabei de colocar aqui, eu acabei de arrastá-lo aqui até aqui , também uma espécie de tela aqui, onde todos os seus blocos vivem, onde seu código mora E então, quando eu clico nele, ele é executado imediatamente e já tocará o som aqui. Isso é tudo para sons como fantasias, mas acústicas, então você pode acionar as duas ou pode mudar as roupas por código Você também pode acionar sons por código. Agora, o que resta é que o que eu já mencionei também é esse estágio aqui como cenários, e aqui você pode ter vários cenários Podemos fazer um novo aqui, por exemplo, um quarto, talvez, e depois podemos escolher outro, talvez uma praia. Então, aqui, se selecionarmos esse estágio, podemos dar uma olhada nos cenários, e isso é como para fantasias, mas apenas com os planos de fundo Assim, você pode escolher qual plano de fundo aqui deseja e, em seguida, ele alternará aqui, e você também pode, é claro, alternar do código aqui, o plano de fundo, para que ele mude dinamicamente Então, primeiro, temos um fundo vazio, depois temos esse quarto e depois essa praia. Então, basta escolher o estágio aqui e, em seguida, você terá sob os cenários todos esses cenários diferentes, assim como com os Então eu seleciono o balão novamente, nosso sprite, e então você pode usar roupas diferentes aqui Então, o primeiro será o balão. Você também pode alterar a ordem aqui arrastando-a. Podemos mudá-lo para essa garota aqui. É quase o mesmo aqui com cenários. Basta selecionar o estágio e você terá todos esses cenários aqui Também exclua. Agora, o último, não podemos excluir. Vamos pegar outro, talvez um céu azul que caiba no nosso balão Então, temos um balão sobre um céu azul. Isso é meio legal. Então eu deixei as coisas assim. E aqui nos cenários, você tem quase as mesmas possibilidades das fantasias do seu balão, por exemplo Quase o mesmo ou é o mesmo. Você também pode nomear o traje ou o pano de fundo aqui. Isso é tudo para palco e cenários. Quase como um sprite. Você tem os sprites e depois o palco, e o palco pode ter cenários diferentes, que você pode trocar durante o início do jogo. Ok, então essas são as seções e, claro, nesta seção muito importante, você pode rodar o jogo aqui com esta bandeira. Então, se você pressionar a bandeira, ela executará o jogo, no momento não há código, então nada a ser executado aqui. Então, continua assim. Mas se adicionarmos código, você notará que também terá o botão de parada aqui, onde poderá interromper o jogo, impedir a execução do código, pois, no momento, não temos nenhum código Então isso não está fazendo nada, e você também pode torná-lo um pouco menor aqui com isso ou torná-lo um pouco maior ou até mesmo torná-lo em tela cheia. Então você tem um jogo em tela cheia aqui, quase em tela cheia. Você ainda tem esses botões aqui, é claro, para iniciar e parar o jogo e, em seguida, um botão para sair da tela cheia aqui. Ok, esse é o seu Canvas, sua tela de jogo aqui, onde todos os gráficos do seu jogo são renderizados Isso é basicamente para a interface do usuário do Scratch do editor de rascunho aqui. E você também tem esses menus aqui. Seu arquivo é muito importante, para que você possa criar um novo jogo e também carregar algo do seu computador, do seu disco rígido ou salvá-lo. E isso é muito importante. Você deve sempre salvar o jogo aqui. Então, ele será baixado para sua pasta de download e, posteriormente, você poderá recarregá-lo com este menu aqui, carregue do computador. Assim, você pode fazer o upload desse arquivo novamente e ter seu projeto de jogo completo novamente. E aqui você pode restaurar o traje. Então, por exemplo, eu excluí o pano de fundo da fala e, em seguida, posso restaurá-lo aqui Portanto, desfaça aqui a exclusão deste pano de fundo. E também dos seus sprites, talvez se eu excluir o sprite, eu possa excluir o sprite e depois restaurar o Então, basta uma breve visão geral do Scratch I aqui, e abordaremos cada seção com mais detalhes, é claro, na seção de código. Esta será a seção principal com a qual você terá que lidar, mas também roupas, é claro, para animações e outras coisas. E os sons também serão importantes e também o pano de fundo, é claro Mas o mais importante será o código, porque esse é o lugar onde você realmente programa seu jogo e o torna dinâmico, interativo e divertido, é claro. 4. 04 Primeiro jogo, primeiro código: Então, estamos começando com nosso primeiro jogo e este jogo será um jogo de balões, então é sobre balões subindo e se movendo de baixo para cima para que eu possa mostrá-los aqui com o mouse Eles devem se mover ou esse balão deve sair daqui No topo, e então ele deve desaparecer, e o jogador tem que clicar nele para que ele se destaque, algo parecido. E então ele deveria ganhar pontos, ou ela deveria ganhar pontos por isso. Portanto, no final, também deve haver vários balões , e quanto mais balões você puder estourar, mais pontos você ganha Então esse é o nosso desafio aqui. Então, temos que mover esse balão do fundo. Coloque-o talvez aqui até o topo em um movimento constante, eu diria Esse é o nosso primeiro desafio e podemos fazer isso. Podemos conseguir isso usando um trecho de código ou script, por assim dizer, um Precisamos programar aqui. Este é o nosso primeiro programa que fazemos. E esta é a posição inicial do nosso balão aqui Então, se você quiser acompanhar, basta colocar o balão em algum lugar aqui, talvez, então tudo bem Então, como podemos começar nosso código? Como podemos começar nosso roteiro? Na maioria das vezes, você quer começar com um evento. Então, neste caso, é o evento inicial. Então, sempre que o jogador clicar em Iniciar em Go here on the flag, teremos esse evento E o que isso significa? Então, sempre que a bandeira é clicada, o código que está abaixo dela aqui Então, eu arrastei isso quando cliquei em eventos. Vá para a categoria de eventos e, em seguida, o primeiro bloco aqui é quando você clica na bandeira verde, e é como correr, executar o jogo Isso significa que toda vez que o jogo começar, clicar em go, o código abaixo será executado Isso é o que fazemos agora. Adicionamos aqui outro bloco. É assim que você codifica no zero. Então você adiciona esses blocos aqui, então talvez possamos ir para o movimento aqui, por exemplo, e então podemos dizer, vá para uma posição aleatória, por exemplo, só para mostrar. Então, sempre que esse botão de ir for clicado, vá para uma posição aleatória. O que isso significa? O balão vai para uma posição aleatória. Vamos ver como isso se parece. Então clicamos em ir e vemos que esse balão está indo é colocado em uma posição aleatória aqui Podemos fazer isso de novo e, a cada vez, é uma posição diferente, uma posição aleatória. Isso não é o que queremos, é claro, porque queremos um movimento de baixo para cima. E não é assim que você faz, mas apenas para mostrar como a codificação aqui é feita Precisamos empilhar esses blocos aqui. Depois disso, talvez possamos fazer o mesmo. Por exemplo, podemos fazer isso duas vezes. Isso não fará nenhuma diferença porque vai para uma posição aleatória, mas você não a verá porque logo depois disso, ela irá para uma posição aleatória diferente. Isso não é muito bom ou não faz nenhum sentido. O que nós fazemos? Podemos fazer um atraso aqui no meio. Vamos controlar. E então vemos que o primeiro bloco aqui sob controle é o peso. É isso que queremos. Controle o peso, e então eu arrasto isso aqui para cá. Você vê essa foto aqui. Isso se encaixará aqui e ficará um pouco cinza, então você verá que, se você soltá-lo, terminará nesta posição aqui, abaixo da posição ir para a posição aleatória Em seguida, isso será colocado abaixo do peso em um segundo. Se você quiser desmontar isso, basta arrastá-lo para longe. E então todos os blocos que estão abaixo deles aqui, o primeiro em que você clicou se moverão e, em seguida, você poderá arrastá-lo até E então não será mais executado porque não há conexão com esse evento aqui. Então, se eu começar um jogo, não há código executado porque não há nada abaixo Então, eu preciso conectar isso a isso quando clicar. Novamente. E agora podemos ver que primeiro, o balão vai para uma posição aleatória e depois espera por 1 segundo e depois vai para outra, uma posição diferente Então, isso também não é o que queremos. Queremos um movimento contínuo. Então, vamos nos livrar disso aqui. Como se livrar dele, como excluir, você pode clicar com o botão direito nele e, em seguida, excluir o bloco. Então, isso excluiria apenas um bloco em que você clicou e, em seguida, você pode excluir todos os blocos aqui Mas o mais conveniente é simplesmente arrastar isso aqui para o lado, soltá-lo aqui e depois sumir também. E você move essa tela aqui, sua área de código arrastando aqui, para que você possa ver. Você também pode usar a roda do mouse, é claro, ou você pode arrastar, e então você pode alcançar posições diferentes aqui, e você também pode ampliar e diminuir o zoom com esses botões aqui com as lentes de aumento aqui. E isso redefinirá a posição e o zoom aqui. Esse botão. É assim que você navega aqui na área de código. Então, vamos colocar isso aqui. E o que fazemos para mover essa coisa para cá. O que podemos fazer é colocá-lo aqui novamente, talvez aqui, o que temos que fazer. Primeiro, precisamos posicionar o balão novamente nessa posição porque essa é a posição inicial, mas quando o programa move o balão, talvez ele acabe aqui e depois fique lá Portanto, precisamos redefini-lo sempre que clicar em go. Então, precisamos definir a posição inicial. E como você faz isso? Basta arrastá-lo para onde quiser? Então, talvez, por exemplo, aqui, e então tenhamos o x e o y aqui, e é isso que podemos usar agora. Então, vamos ao movimento. Então você tem que ir para X, ir para y, e isso é o que usamos aqui, vamos para x, vamos para Y e usamos essas duas coordenadas aqui. Convenientemente, eles já estão aqui preenchidos, então não precisamos alterar nada Basta arrastar este bloco aqui até quando clicar e tudo será configurado para esse local aqui Eu posso mudar isso agora para talvez aqui. Então, quando eu clicar em ir, será redefinido para esta posição inicial. Isso é bom. É disso que precisamos também. Agora temos que mover o balão para o topo, e é isso que faremos no próximo vídeo Mas, aqui em diante, esses blocos são todos para mover ou girar seu sprite Por exemplo, aqui você definiu o estilo de rotação, para poder alternar da esquerda para a direita, talvez não girar ou girar ao redor Em um ângulo, isso será mais parecido com espelhamento, como aqui, isso será espelhar ou virar, isso será uma rotação, e isso não será E a mesma coisa aqui, você pode definir esse estilo também aqui. É o mesmo que aqui. Este é apenas um exemplo, e você também pode usar algo como definir y para uma posição ou definir x para uma posição, ou você pode definir ambos em um bloco. Além disso, você pode deslizar para uma posição aleatória. Talvez possamos tentar isso, colocá-lo em uma posição inicial e, depois, deslizar talvez 4 segundos até uma posição aleatória ou até o ponteiro do mouse Também podemos fazer isso. Vamos tentar isso. Na verdade, não é isso que queremos, mas de qualquer forma, vamos tentar e ver como fica. 4 segundos, este balão vai para uma posição aleatória. Então, cada vez que eu começo aqui, ele vai para uma posição diferente, mas sempre leva 4 segundos para chegar lá. Isso é muito bom. Talvez pudéssemos usá-lo e , em seguida, o usuário precisa clicar nele para obter os pontos. Mas eu não sei. Talvez não seja tão interessante fazer o jogo desse jeito. Mas poderíamos usar isso. Mas isso será bem fácil. De qualquer forma, temos que esconder o balão quando ele atingir a posição aleatória aqui Caso contrário, seria muito fácil para o jogo clicar nele. Talvez possamos escondê-lo após 4 segundos, ou talvez façamos 2 segundos e então será mais rápido. Aqui, e isso será mais rápido. Mas isso também depende da posição em si, é claro. Se a posição não estiver muito longe da posição inicial, será lenta; se estiver muito longe da posição inicial , será rápida. Isso será fácil de clicar e será um pouco mais difícil assim ou talvez assim. Também podemos reduzi-lo para 1 segundo, ou também podemos usar números decimais como 1,5, por exemplo, isso é um pouco mais rápido porque era um longo caminho a percorrer para o balão, outro longo caminho e esse é um caminho curto Vamos esconder o balão quando ele atingir a posição aleatória aqui Como fazemos isso? Isso está na categoria looks. Vamos para Ls e aqui no final, quase no final, você tem show and hide. É disso que precisamos. Basta arrastar o esconderijo para esta posição aqui após o deslizamento e, quando chegar aqui, nessa posição aleatória, ele deve se esconder Vamos tentar isso. Agora ele desaparece Vamos fazer isso de novo. OK. Então você vê que não vê nada. Ela sumiu. Está escondido. E por que isso? Seja como for, escondemos isso. Então, com essa ocultação, você a ocultará e ela não será redefinida para ser exibida. Mas podemos fazer isso, basta mover show ou arrastar show aqui para o início. Então, quando clicar em go, mostre o balão, vá para a posição inicial e deslize para essas posições aleatórias aqui e depois esconda Então, vamos tentar isso. Então, é mostrado. Ele vai para a posição inicial e depois desliza para a posição aleatória E então está escondido. E então, toda vez que eu clicar em G, ele será exibido novamente, e isso será executado aqui. Obviamente, o código é sempre executado de cima para baixo. Então, este é o evento inicial quando você clica em go, depois mostra, vai para x e y, posição inicial, desliza nesse período de tempo para uma posição aleatória e depois se esconde Então está tudo bem. Poderíamos usar isso como ponto de partida para o nosso jogo. Provavelmente não vamos continuar assim, mas é meio que um começo. Então, precisamos, é claro, fazer com que o jogador possa clicar no balão, e então ele pare, e então o jogador ganhe pontos por ele 5. 05 Como melhorar o movimento do balão: Continuamos com nosso jogo e, no último vídeo, tínhamos nosso balão indo desta primeira posição para uma posição aleatória, e fizemos esse pequeno script aqui, e este é nosso primeiro programa ou primeiro script Sempre que o botão Iniciar é clicado, mostramos esse balão e, em seguida, vamos para a posição inicial do Isso é -207 e f x e -200 534, y, e a partir daí deslizamos Essa sempre será uma posição diferente a cada vez que rodarmos o jogo e o tempo necessário para deslizar até essa posição é de 1,5 segundos aqui Então, quando atinge a posição , escondemos o balão Agora eu quero trocar isso aqui, o deslizamento para uma posição aleatória com um bloco similar, e este é este Eu já preparei isso. Então, isso é deslizar na quantidade de segundos dois x e y. Há uma posição predefinida aqui para a qual podemos deslizar, e não será a Porque o problema com a posição aleatória é que às vezes é mais difícil e às vezes mais fácil bater no balão ou clicar no balão, porque é disso que trata o jogo, clicar no balão ou clicar em todos os balões que puder até que todos desapareçam Esse é o problema com a posição aleatória. Eles não estão indo para cima, mas talvez nessa direção ou direção ou qualquer outra coisa Não está claro para onde os balões vão com a posição aleatória, então nós os trocamos por uma posição fixa Este é o bloco para a posição fixa, e eu estou arrastando esse esconderijo aqui e o planador também, e podemos nos livrar desse bloco deslizante simplesmente arrastando-o até aqui e ele desaparecerá e podemos nos livrar desse bloco deslizante simplesmente arrastando-o até aqui e Esse bloco foi excluído. Agora podemos pegar esse bloco, colocá-lo aqui, para que ele se encaixe lá e depois colocar de volta o bloco de esconderijo novamente para que fique assim Vamos começar o jogo e ver como fica. Veja, é sempre o mesmo movimento aqui toda vez que eu começo o jogo. O balão sempre subirá em 2 segundos até essa posição aqui, e é sempre o mesmo Isso é muito melhor porque o balão vai apenas para cima, mas também é mais fácil porque você já sabe de onde o balão está indo e para onde está É muito fácil jogar este jogo, mas teremos mais balões, não apenas um balão, ficará um pouco mais difícil acertar todos os Talvez isso já esteja bem e já seja um jogo divertido. Mas precisamos de algo que seja mais aleatório aqui. Digamos que não seja a posição alvo do balão, mas também pode ser a posição inicial . A posição inicial, a posição x aqui pode ser aleatória, e o balão então começaria talvez uma vez daqui, uma vez daqui Isso dependeria da posição escolhida aleatoriamente na época Como fazemos isso? Precisamos de um número aleatório para a coordenada x. Vamos verificar como isso é feito. Vamos aos operadores aqui e ali, já escolhemos aleatoriamente um número aleatório e, em seguida, você pode definir entre quais dois números o número aleatório deve ser escolhido. Vamos arrastar isso aqui para nossa tela, nosso script Canvas, e então podemos colocá-lo em algum lugar aqui neste bloco. Podemos colocá-lo aqui para ir para x e depois esse campo aqui. Vamos experimentá-lo. Nós o arrastamos até aqui e depois o soltamos e agora o temos em nossa coordenada x. A coordenada x será de 1 a 10. Isso não é muito bom, digamos que -200 102 mais 210, esse será o intervalo Vamos tentar isso. Vamos começar, e então temos uma posição inicial aleatória. Isso é bom. Às vezes, começa daqui a partir do x aqui ou talvez ali. Assim, o jogador nunca sabe de onde o balão está começando. Isso é melhor. Mas também a posição do alvo é sempre a mesma, e isso é um problema aqui porque sempre sabemos que o balão vai passar por aqui Esta é a posição alvo para que possamos colocar o cursor do mouse aqui, e então poderemos clicar aqui quando se trata dessa posição aqui. Isso não é muito bom, então precisamos definir a meta x isso aqui com o mesmo valor deste ano. Poderíamos usar uma variável para isso e primeiro atribuir esse número aleatório duas variáveis A e depois usar essa variável nesses dois lugares. Primeiro aqui neste bloco, vá para x e depois para variável, e depois deslize em 2 segundos dois x e depois a variável Mas não faremos isso porque isso é um pouco avançado e eu farei em variáveis em um capítulo posterior. Aqui fazemos outra coisa. Há um bloco, outro bloco aqui em movimento, e este é esse bloco aqui, posição x, e você pode arrastar essa posição x aqui para qualquer lugar que quiser nesses campos arredondados. Por exemplo, aqui neste campo x, então deslize em 2 segundos dois x e depois na posição x. O que é posição? posição X é a posição ex do sprite neste momento em que ele chega a esse bloco aqui Isso sempre será atualizado se o balão se mover. Ou muda sua posição x, então essa sempre será a posição x atual. E você também pode exibi-lo clicando aqui nesta caixa de seleção Então, basta verificar isso aqui para exibi-lo aqui, e então sempre podemos ver o valor atual da posição x dos balões Ok, então o que temos agora? Vamos para uma posição x aleatória aqui e uma posição y fixa. Portanto, a posição y será -253 e a posição x será aleatória Isso significa que o balão começa em algum lugar entre aqui e aqui E então ele irá para essa posição y -253 e, em seguida, manterá a posição x. Então, definimos a posição x aqui com esse número aleatório, e então essa posição x será a mesma. Ele permanece o mesmo, então não é alterado posteriormente. Sempre será isso aqui. Com isso, estamos definindo a posição x para um número aleatório, e então isso estará neste bloco aqui neste bloco de posição. Então, o balão sempre subirá. E aqui também podemos ver. Você também pode arrastar isso para qualquer lugar que quiser aqui. Também podemos ver que esse x sempre será o mesmo, mas será definido aleatoriamente no início do jogo Então, desta vez foi -166, e na próxima vez é -107, e na próxima vez é Mas aqui estamos deslizando para a mesma posição x em que estivemos aqui aleatoriamente Ok, eu acho que isso está claro, deveria ficar claro. Então, esse x está apenas mantendo a posição x e o y e a posição alvo de 200 aqui. E dessa forma, esse é o tipo de jogo que eu tinha em mente no início. Então, temos um balão partindo de uma posição aleatória indo direto para cima e, em seguida, o usuário ou o jogador precisa clicar nele Então, também podemos entrar em tela cheia e ver como é, então, iniciando o jogo, o usuário precisa clicar nele, e então ele deve desaparecer, e o usuário ganha pontos por isso. Então, no momento, temos apenas um balão, não é muito interessante, mas se tivermos, digamos, cinco balões Será muito difícil clicar em todos os balões antes que eles atinjam o alvo aqui Ok, então isso é tudo para melhorar o movimento do balão, e acho que podemos continuar assim, e podemos simplesmente fazer mais balões E então a lógica do movimento aqui será, obviamente, a mesma. Mas antes de fazer isso, precisamos implementar a lógica do clique para que quando o jogador clicar no balão, ele desapareça e o usuário ganhe pontos, por exemplo Ok, então vamos fazer isso no próximo vídeo. 6. 06 O evento clicado: Agora que temos o movimento dos balões no lugar, posso mostrá-lo novamente aqui. O balão vai de uma posição horizontal aleatória para cima e depois Desaparece aqui fora dos limites. Agora que temos isso, a única coisa importante que falta é, claro, que o jogador precisa clicar no balão e o balão então desaparecerá e o jogador ganhará pontos Isso é bem fácil. Só precisamos de dois blocos para clicar e depois esconder o balão, e podemos encontrar o primeiro bloco aqui em eventos, pois clicar no balão desse Sprite aqui é Temos isso quando a bandeira, quando go já está clicada aqui, mas abaixo está quando esse Sprite clicou, e aqui também temos quando e aqui também temos Isso é para eventos de teclado, mas isso aqui é para o evento de clique. Nós arrastamos isso para o nosso Canvas aqui, e então temos esse evento. Quando esse sprite é clicado, faça o seguinte e, o que precisa ser feito aqui, precisamos ocultar o sprite Isso é muito fácil. Nós já tínhamos isso. Temos um show aqui e depois um esconderijo no final, vamos olhar novamente, e então temos um esconderijo aqui. Basta arrastar a pele para esta posição aqui e podemos experimentá-la. Então, vamos embora. E então clicamos nele. Oh, eu perdi isso aqui. Mas agora eu consegui clicar nele e você vê que o balão desaparece aqui, está escondido OK. Vamos fazer isso de novo. Então, desta vez eu estava melhor preparado. Portanto, não é muito difícil bater no balão. Mas se você tem, digamos, cinco balões aqui, todos em posições aleatórias, então talvez seja um pouco mais difícil Então, isso é bem fácil. Também podemos usar a tela cheia e depois testá-la em condições reais de jogo. Isso é muito fácil com um balão. Também podemos usar, é claro, uma velocidade maior, uma velocidade maior. Como fazemos isso? Nós apenas mudamos a hora aqui, o intervalo de tempo desliza de 2 segundos para x, então podemos fazer com que seja um pouco menos de 2 segundos, 1,5 segundos, e então a velocidade deve ser mais rápida, e também podemos usar Vamos tentar 1 segundo, e então será bem rápido, e também será muito difícil acertá-lo. Vamos ver. Eu consegui fazer isso. Agora, esse eu perdi , de novo. Vamos fazer isso de novo. Sim. Isso é muito difícil. Talvez seja muito difícil, mas vamos deixar as coisas assim. E agora temos a mecânica básica do jogo implementada. O balão começa a subir, então podemos clicar nele e depois desaparecerá Talvez queiramos adicionar mais tarde uma animação para que o balão estoure No momento, está apenas escondido aqui com esse bloco. Então, toda vez que o sprite é clicado, o balão fica escondido Agora, o que precisamos fazer é, claro, o jogador ganhe pontos por isso para que, no final, quando todos os balões acabarem, o jogador possa ver quantos pontos ele ganhou Isso será feito no próximo vídeo , porque não é tão fácil. Precisamos usar variáveis para isso. Eu já mencionei variáveis, mas esse é um conceito muito importante, então isso estará em um vídeo extra, e então também podemos contar os pontos e exibir a pontuação. 7. 07 Reproduza som e conte a partitura: Agora que escondemos nosso balão, quando o jogador clica nele, precisamos contar a pontuação Mas primeiro, vou apresentar outro recurso aqui, então temos que tocar um pouco de som aqui quando o balão estoura, então precisamos tocar um som pop Os sons que você tem aqui na categoria sons, basta arrastar este bloco aqui abaixo Depois da altura, precisamos tocar um som aqui. Essa é a guitarra elétrica. Este não é o som certo, então precisamos alterá-lo para pop, e então você poderá ouvir que isso reproduzirá um bom som pop. Quando o jogador clicar no balão, esse som será reproduzido, então vamos tentar trabalhar Ok, é isso para o som por enquanto, vamos entrar nas variáveis e contar a pontuação aqui. O que são variáveis e por que precisamos delas aqui? Pelo menos precisamos de uma variável aqui e precisamos contar a pontuação. Cada vez que o jogador bate no balão, estoura o balão, então, digamos, dez pontos devem ser adicionados à pontuação e a pontuação deve ser Já temos uma variável aqui e ela já está exibida aqui. Esta é a exposição do balão, coloque-a aqui. E como a obtivemos? Está aqui em movimento, então categoria movimento, e então temos essa caixa de seleção que o exibirá. Também podemos exibir a posição y e também a direção. Vamos somar tudo isso e voltar às nossas variáveis. Essas também são variáveis, mas não podemos definir as variáveis. Não podemos alterar o valor dessas variáveis aqui diretamente. Isso é interno ao sistema de jogo aqui. Mas é semelhante a uma variável porque isso aqui representa um valor e um valor que pode mudar. Podemos usar isso em todos os lugares onde esses campos arredondados estão. Podemos simplesmente colocá-lo lá, e isso é um espaço reservado para um valor Esse -210, por exemplo, é um valor. Esse é um valor fixo. Sabemos qual é o valor, -210. Mas aqui, não é óbvio qual posição essa será , só fica clara em tempo de execução ou é definida apenas em tempo de execução. No momento, a posição será determinada no momento. Também podemos exibi-lo aqui, mas se rodarmos o jogo , isso mudará. Variável. Além disso, é claro, o nome significa valor variável, então ele pode mudar e precisa mudar para torná-lo realmente útil. Uma variável é um espaço reservado para um valor que mudará, ou seja, variável Vamos criar nossa própria variável e precisamos nomeá-la de alguma forma. Então, criamos uma nova variável chamada pontuação. Criar uma variável é o botão aqui. Acesse as variáveis aqui, as variáveis da categoria. Já temos um aqui. É predefinido. Também podemos excluir essa variável porque não precisamos dela. Então, clique com o botão direito nessa variável predefinida e exclua a variável my variable Vamos fazer com que um novo torne variável. E então podemos escolher um nome. Então, escolhemos a pontuação do nome. Também podemos escrevê-lo assim. Em seguida, você também pode decidir se essa variável é para todos os espordes ou apenas para esse sprides ou apenas para esse Eu diria que, como temos mais de um sprides, devemos definir a variável de pontuação aqui para todos os Sprides. O que isso significa? O valor da pontuação estará disponível para todos os Sprits, não apenas para esse prêmio É isso que queremos, não só para esse conjunto, porque queremos mostrá-lo Talvez queiramos usá-lo em um spr diferente, talvez em um script para um spride diferente, então vamos defini-lo para todos os Em K, e agora temos essa variável aqui em variáveis, e ela se parece com esse movimento x posição aqui, posição y. Eu também arredondei aqui, retângulo arredondado, os cantos arredondados, isso é azul, mas isso é laranja, então essa é nossa própria variável Podemos usar essa variável qualquer lugar que quisermos nesses campos arredondados, por exemplo, aqui, aqui, podemos ver que podemos soltá-la em qualquer lugar aqui. Ok, então essa caixa de seleção também está aqui, então você pode mostrar o valor, o valor atual dessa variável também clicando aqui, e então ela aparecerá no jogo Vamos nos livrar dessa posição do balão. Então, basta remover a caixa de seleção aqui. Não precisamos mais disso. Mas a pontuação, devemos exibir, então mantenha a caixa de seleção marcada aqui Agora temos a pontuação exibida aqui, mas é zero. Esse é o valor padrão, o valor inicial. E se clicarmos no balão, ouvimos o som. Mas é claro que a pontuação permanece a mesma. Agora que temos nossa variável, podemos usá-la. Podemos alterar o valor em tempo de execução. É para isso que servem esses blocos. Essa é a pontuação definida de um bloco, neste caso, 20 ou altere a pontuação por um com esses dois blocos, você pode alterar o valor da variável. O que nós precisamos? De qual desses blocos precisamos agora? Bem, precisamos do segundo porque o primeiro definirá a pontuação em um valor fixo, mas precisamos aumentar o valor da pontuação em um determinado valor. Vamos usar esse bloco, arraste-o aqui. Logo abaixo, digamos que depois de se esconder . Basta soltá-lo aqui. Altere a pontuação em um. Vamos ver o que isso faz e, para facilitar um pouco para mim, vou alterar ou aumentar esse tempo aqui, talvez digamos 5 segundos, e isso seria muito fácil porque o balão está muito lento Vamos abrir e você verá que temos dois. Por que temos dois? Porque toda vez que eu clicar aqui, isso vai aumentar, e eu só cliquei uma vez, e então eu comecei o jogo e estourei o balão Então, temos dois. Mas é claro que precisamos redefinir a pontuação no início do jogo. Então é isso que precisamos fazer. Para isso, precisamos usar o primeiro bloco aqui. Então, defina a pontuação como zero, que já é kag, defina-a aqui logo após clicar em go, solte-a aqui e, em seguida, a pontuação será definida como zero Então, cada vez que começamos o jogo, começamos com uma pontuação zero, é claro. E então estouramos o balão e temos um. Então, como temos apenas um balão, não consigo obter mais do que uma pontuação de um no momento Mas de qualquer forma, isso funciona muito bem aqui. Então eu estouro o balão e obtenho uma pontuação de um Então, se tivéssemos dois balões, o jogador seria capaz de obter uma pontuação de dois É assim que você usa variáveis. Você pode alterar a variável por um determinado valor. Nesse caso, um, eu também posso usar talvez dez. Então, quando eu estouro o balão, eu ganho dez pontos, não faz muita diferença, mas talvez existam balões maiores que só dão ao jogador cinco pontos, então você pode usar dez e depois cinco para os maiores, porque eles são mais fáceis de acertar Isso é tudo para variáveis. Não é tudo o que você precisa saber sobre variáveis, mas como usá-las. Assim, você pode defini-los aqui para um determinado valor. Você também pode defini-lo como um valor aleatório. Então, por exemplo, talvez você possa ir aqui e escolher aleatoriamente de 1 a 10. Então, basta soltá-lo aqui. E então a pontuação será definida para um número aleatório, não muito útil neste caso, mas para mostrar o ponto. Agora serão cinco e outra vez seremos dez, outra vez seremos seis. Se eu estourar, for o balão, ele será aumentado em dez aqui Podemos vendê-lo por um valor fixo ou esse valor aleatório aqui também, e podemos aumentá-lo em uma certa quantia. Ou também podemos aumentá-lo em uma quantidade aleatória. Você pode colocar essa escolha aleatória aqui também nesta alteração por campo. Vamos tentar isso. Estoure e ganhamos quatro pontos, e depois ganhamos três pontos. E na próxima vez, ganhamos nove pontos. Não é muito útil aqui, mas de qualquer forma , isso é possível, vamos nos livrar disso e usar dez aqui. Então, cada vez que estouramos o balão, o jogador estoura o balão, então ele ou ela ganha dez 8. 08 Fazendo mais balões: Nosso jogo está funcionando com um balão. Não é tão interessante, nem tão difícil, mas está funcionando e também temos a pontuação. Mas precisamos de mais balões e como fazer isso? É bem fácil. Só precisamos duplicar nosso primeiro Clique com o botão direito no s aqui na lista. Então, balão um, clique com o botão direito, dobre e temos um segundo Vamos tentar o que acontece se rodarmos o jogo. Temos dois balões. E podemos pular os dois. E sempre obteremos 20 pontos como pontuação, é claro, porque sempre estouramos os dois balões. Então, isso é muito bom porque acabamos de duplicar esse balão e tudo funciona Portanto, não havia necessidade de mudar nada aqui no roteiro, mas talvez possamos mudar a cor do balão Vamos entrar no balão dois selecionado aqui, e depois nos trajes, e então temos esse balão azul, o mesmo que o primeiro, então precisamos trocá-lo Vamos até este pequeno botão aqui, e então ele se expande com esta lista, para que possamos fazer o upload de uma nova roupa. Podemos pegar uma aleatória, ou podemos pintá-la, ou podemos escolher uma fantasia Isso é o que fazemos. Vamos escolher uma roupa, e depois procuramos aqui o balão, lá temos os balões Já temos o balão azul. Vamos usar um balão amarelo aqui, e aí temos o balão amarelo Podemos nos livrar da primeira aqui da primeira fantasia aqui da lista porque só precisamos desse balão amarelo aqui É isso mesmo. Agora temos dois balões, um azul, um amarelo, e vamos começar um jogo Para que fique mais bonito com duas cores aqui. Nós podemos fazer mais desses, é claro. Também podemos tornar isso mais difícil O problema é que agora precisamos alterar dois desses sprites aqui porque cada sprite tem seu próprio script aqui, então precisamos alterar os dois Por exemplo, 5 segundos aqui é um pouco demais, então definimos para dois, mas agora precisamos mudar os dois scripts porque se eu apenas trocar o do balão amarelo, então só o alteramos para o balão amarelo, é claro, não para o azul Então, vamos mudar para o azul e também configurá-lo para dois aqui. Agora está definido nos dois scripts em ambos os códigos, temos a mesma quantidade de tempo ou a mesma velocidade aqui Isso fica mais difícil agora, mas ainda é factível Mas se tivéssemos um terceiro balão , seria muito difícil fazer isso Temos dois balões agora, mas temos o problema de que precisamos mudar o script de cada balão aqui, de cada um para fazer alterações como a velocidade aqui ou talvez se quisermos mudar o som aqui para um diferente, um que tenhamos enviado, Também podemos gravar um som aqui. Precisamos fazer isso aqui duas vezes. Isso é um problema. No momento, a solução será preparar um sprite aqui e preparar um script E se você tiver certeza de que esse é o script final, duplique o sprite Então, digamos que temos o roteiro final aqui. Não há necessidade de mudar nada aqui. Então, podemos duplicá-lo. Digamos, quatro vezes. Agora, vamos começar o jogo. Então, temos três balões amarelos e um balão azul aqui Mas também podemos mudar, é claro, aqui, o traje do terceiro. Vamos vestir fantasias. Escolha uma fantasia. Procure um balão. Aí está. Pegue esse roxo. Facilite o primeiro aqui e aqui. Bem, vamos fazer o mesmo. Procure por um balão. Mas nós só temos essas três cores aqui. Isso é um problema, talvez. Então, vamos voltar e mudar a cor aqui. Então selecione o balão ou a parte principal do balão, e então vamos enchê-lo e trocá-lo um pouco Vamos colocar mais no vermelho. Temos uma cor mais avermelhada aqui, e você também pode mudar essa. Por exemplo, torne-a um pouco mais vermelha, assim Sim, tudo bem. Você também pode, é claro, trocar a roupa aqui ou colocar uma diferente conforme desejar. Agora temos quatro balões aqui, e vamos ver se podemos estourar todos Não, não foi bem sucedido. Vamos entrar no modo de tela cheia. Sim. 40 é a pontuação máxima que podemos alcançar aqui neste jogo, e isso é muito bom. Mas se os balões estiverem mais afastados, talvez não seja possível estourar todos eles. Eu consegui fazer isso. Perdeu um. Sim. Agora eu tenho todos os balões. Ok, então eu diria que é isso para o nosso primeiro jogo. Mas há mais uma coisa que eu posso fazer para configurar aqui o número de segundos. Cada balão tem que chegar ao destino. Também podemos usar variáveis, é claro. Então, vamos criar uma nova variável aqui. Crie uma variável aqui, abaixo das variáveis da categoria. Vamos criar um novo, e também para todos os sprites, porque queremos usá-lo em todos os sprites Então, chamamos isso de velocidade, basta chamá-lo de velocidade. Não é preciso porque é um número de segundos, mas de qualquer forma, vamos chamá-lo de velocidade, e menor o valor, maior a velocidade. Mas de qualquer forma, acho que está tudo bem. Não precisamos exibi-lo aqui, então podemos remover a caixa de seleção e, em seguida, ela desaparecerá. O que precisamos fazer? Precisamos substituir esses dois aqui, deslizar 2 segundos dois x e y, precisamos substituí-los por uma variável Então, a variável de velocidade aqui, então vamos arrastá-la até aqui, soltá-la e temos a velocidade de deslizamento segundos até esta posição Então, precisamos definir, é claro, a variável aqui, o valor da variável, como, digamos, 1,5, e podemos fazer isso aqui ao clicar. Aqui, arrastamos essa variável definida com dois valores e, em seguida, escolhemos a velocidade e aqui no campo de valor, basta inserir 1,5. É isso mesmo. Esse britânico aqui tem agora esse 1.5, esse, então vamos verificar isso Um é mais rápido, veja, e isso precisamos fazer com todos os balões aqui Agora precisamos colocar a variável de velocidade aqui neste lado. Isso é fácil, vá até o balão roxo e arraste a variável de velocidade aqui para deslizar, e depois para o balão amarelo o mesmo, e para o balão azul Então, todo balão tem a mesma velocidade aqui. Vamos experimentá-lo. fica muito difícil estourar todos os balões, então vamos tentar Apenas um, também um, três, isso é pontuação alta. Agora, três é minha pontuação mais alta aqui. É quase impossível fazer todos os quatro. De qualquer forma, agora podemos usar essa variável aqui, e também precisamos definir o valor da variável aqui na primeira ou na quarta aqui no balão quatro Podemos realmente usar essa velocidade definida para 1,5 em qualquer lugar aqui, mas só precisamos fazer isso em um sprite Vamos deixar isso aqui, e não precisamos definir a pontuação para zero em cada sprite, então talvez também possamos nos livrar disso Remova-o aqui e remova-o aqui. Você também pode deixá-lo lá. Não é tão importante, mas não é necessário configurá-lo em cada sprite aqui em cada script Então, só precisamos configurá-lo aqui em um sprite. E o mesmo para a velocidade, a velocidade e a pontuação são definidas no último sprite aqui no sprite vermelho, e então todos os outros sprites podem usar Vamos experimentá-lo. Trabalhando. Usamos variáveis aqui em dois lugares. Em primeiro lugar estava essa pontuação que aumentava dez toda vez que o jogador batia em um balão, estourava um balão, e o segundo lugar estava aqui em planar e a quantidade de segundos usada para chegar à posição alvo, por assim dizer, a velocidade do É isso para esta parte. Agora também podemos melhorar um pouco o jogo, por exemplo, podemos usar um atraso aleatório para cada balão para que nem todos os balões se movam ao mesmo tempo. Nós faremos isso na próxima. 9. 09 Como adicionar delay aos balões: R. Então, vamos tornar o jogo um pouco mais interessante atrasando cada movimento, cada movimento do balão por um tempo aleatório Isso é o que fazemos, e isso é bem fácil porque temos esse bloco aqui. Sob controle. Vá para o controle de categoria e , em seguida, o número do primeiro bloco em segundos. Isso aqui pode ser um número fixo, por exemplo, um segundo, 2 segundos, qualquer coisa. Podemos tentar isso primeiro. Vamos fazer isso no balão quatro no balão avermelhado. Podemos simplesmente inseri-lo aqui. Ou talvez devêssemos apenas movê-lo aqui abaixo desses blocos variáveis definidos. Portanto, antes de iniciarmos o movimento, esperamos 1 segundo e vamos verificar o que isso faz. E vemos que o balão vermelho está atrasado em 1 segundo. Isso é fácil. Mas isso não é muito interessante porque cada vez que iniciamos um jogo, isso sempre será de 1 segundo, então é previsível. Não queremos que isso seja previsível porque é um jogo e deve ser divertido, é claro. Então, vamos corrigir isso. É fácil. Vamos até os operadores e esse bloco aqui, escolha aleatoriamente de um a dez, escolhe um número aleatório Acabamos de colocá-lo aqui em peso neste campo arredondado aqui, e então temos uma escolha de peso aleatória de um a dez. Dez é um pouco longo, 10 segundos. Então, digamos quatro, 4 segundos, e então tentamos isso. Então, cada vez que iniciamos o jogo , deve ser um, dois, 4 segundos aleatoriamente, e aqui está Talvez tenham sido 4 segundos. Vamos tentar novamente. E agora temos talvez 3 segundos. Vamos fazer isso de novo. 4 segundos e vamos fazer isso de novo. Também podemos fazer isso de 0 a 4. Veja se eu faço isso, então você vê que o reset da posição aqui sempre acontecerá depois do peso aqui. Acho que precisamos mover isso aqui. Vamos mover isso para x e y acima do peso. Ele será reiniciado imediatamente para essa posição aqui e , em seguida, esperará e deslizará Isso é melhor. E aí está o balão. Ok, então temos esse mecanismo de ponderação aqui para o balão vermelho Precisamos disso também para os outros balões. Então, vou te mostrar algo para que você possa copiar um bloco, um bloco complexo como esse, como esse peso com um número aleatório de segundos para os outros balões Para isso, basta extrair isso aqui. Podemos simplesmente separar isso e depois arrastá-lo para fora. Então esse bloco aqui pode simplesmente arrastar para os outros sprites aqui Por exemplo, este é que ele se mexe um pouco, então você pode soltá-lo aqui e, dessa forma, ele será copiado Este bloco aqui fica aqui, mas também será copiado aqui para este sprite Aqui está, e agora podemos simplesmente colocá-lo aqui logo antes do deslizamento e depois voltar para o balão vermelho, e então também podemos arrastá-lo até a segunda espada, soltá-la e também até a Agora precisamos colocá-lo na posição correta aqui. Logo antes de planar, esperamos por um número aleatório de segundos. O mesmo vale para o balão azul aqui. Logo antes de planar, esperamos por um número aleatório de segundos. É isso mesmo. Vamos tentar ver os balões esperarem por um número aleatório de segundos. Novamente, é claro, o balão vermelho não está mais funcionando porque o arrastamos para fora, então vamos colocá-lo de volta aqui. Juntos novamente, dessa forma, o balão vermelho também funcionará Há um problema. Talvez você já tenha visto isso. Se eu começar de novo, você verá que todos os balões estão esperando para subir aqui Isso é muito fácil porque o jogador pode simplesmente colocá-lo na parte inferior. Temos um pequeno problema aqui, mas é fácil de resolver. Vamos ver o que temos aqui. Estamos definindo a pontuação zero aqui em nosso script de balão vermelho, estamos definindo a velocidade para 1,5, e vamos para essa posição inicial aqui, e então a mostramos Depois de mostrarmos o balão, estamos esperando. O problema é que aqui, neste momento, o balão já está mostrado, e então ele espera, digamos, no máximo 4 segundos, e nesse tempo, o jogador pode ver o A correção é muito fácil, altere o pedido aqui. Precisamos mostrar o balão logo antes desse deslizamento aqui, e isso precisará acontecer em cada sprite Nós inserimos o peso na posição errada. Ou o programa está na posição errada agora, vamos corrigir isso. É isso para o balão roxo, e fazemos o mesmo para o balão amarelo aqui e para o azul O show deve ser logo antes de começarmos o planador. Aqui, está correto. Vamos verificar novamente, mostrar logo antes do planador Então isso deve estar correto. Vamos tentar. Os balões não são mostrados antes de começarem a se mover Está melhor agora, e eu posso tentar estourar os balões. Sim, sim. Não. Sim. Foi uma falta. Vamos tentar novamente. Dessa vez. Eu tenho a pontuação máxima de 40. Agora temos um bom jogo e é muito divertido, e não é tão fácil bater em todos os balões, estourar todos os balões estourar todos os Por exemplo, agora, eu só tenho 30, e você também pode, é claro, duplicar aqui mais balões para que você possa ter talvez dez ou qualquer Além disso, esse atraso pode ser um pouco maior ou esse atraso aleatório pode ser de talvez 5 segundos, para que seja mais fácil estourar os balões ou mais difícil, conforme você quiser Mas acho que isso deve concluir nosso primeiro jogo. Na minha opinião, isso é muito bom, ou talvez devêssemos nos livrar deste ano. Essa posição Y não precisa ser exibida. É mais uma vez. Vamos começar o jogo. Já perdi um balão. Agora eu também tenho 30 como pontuação. Sinta-se à vontade para brincar com isso e se divertir. Talvez você possa melhorar uma ou outra coisa aqui. Talvez possa melhorar um pouco a mecânica do jogo, você pode dobrar mais balões para dificultar as coisas ou o jogo demorar um pouco. Se você tiver cada vez mais atrasos, o jogo fica mais longo , é um pouco. Se você tiver cada vez mais atrasos, o jogo fica mais longo , o jogo fica mais longo , Talvez você também possa trocar as roupas aqui. Se você não gosta desse balão, você pode desenhar o seu próprio ou importar um novo traje, fazer o upload do traje aqui e depois escolher, por exemplo, um PNG JPEG ou um SVG, então você pode substituir esse balão aqui pelo seu próprio balão ou talvez você Com os trajes predefinidos aqui. Isso conclui nosso primeiro jogo e o próximo jogo começará na próxima seção 10. 10 Crie uma conta para armazenamento e compartilhamento em nuvem: Antes de continuarmos com nosso próximo projeto de jogo, mostrarei como entrar no Scratch e como criar uma conta para que você possa armazenar seus projetos, seus jogos on-line e também compartilhá-los com outras pessoas para que outras pessoas possam jogá-los, além de dar uma olhada no código em nossos scripts e, em seguida, fazer ajustes no jogo, criar seu próprio jogo com base em seu jogo e todas essas coisas boas. Vamos fazer isso. Você precisa clicar em Join Scratch aqui e, em seguida, inserir um nome de usuário. Por exemplo, eu coloquei o jogo Def teacher e depois uma senha, então você pode querer desmarcar esta caixa de seleção aqui para não mostrar sua senha, mas eu também posso deixá-la marcada que qualquer coisa que você digitar aqui fique visível, eu não vou fazer isso, então vou criar uma nova conta aqui e depois usar uma senha aleatória Eu não vou aparecer. Portanto, você precisa digitar sua senha duas vezes para ter certeza de que a digitou corretamente e, claro, precisa se lembrar da senha Então, coloque-o talvez em um gerenciador de senhas, algo assim, ou anote-o e esconda-o. Então, se você digitou corretamente as duas senhas, senhas idênticas aqui Você pode clicar em Avançar e, em seguida, escolher seu país. Então, estou escolhendo a Alemanha porque esse é o meu país, mas por favor, escolha seu próprio ano e mês de seu aniversário. Então isso é meu aqui. Eu sou um e-mail, e depois o próximo. Qual é o seu e-mail? E então o scratch o manterá informado sobre coisas novas adicionadas ao scratch, algo parecido. Então, basta inserir seu endereço de e-mail. Vou colocar a minha aqui e depois criar sua conta com este botão aqui. E demora um pouco. Então, bem-vindo ao professor do Scratch Game Df. Então, agora estou trancado aqui. Também tenho esse menu aqui, configurações da conta do perfil MyStuff Então, vamos primeiro ao perfil. Aqui está meu perfil. Você pode escrever algo sobre mim, no que estou trabalhando, e também pode mudar sua foto aqui. Basta se livrar disso, confirme seu e-mail para ativar o compartilhamento. Para compartilhar um projeto, você precisa clicar em um link no e-mail que você recebeu. Eu já deveria ter recebido, basta clicar aqui e você pode inserir aqui seu nome, que estou trabalhando e também alterar sua foto aqui. Também aqui, você tem uma lista dos seus projetos compartilhados, dos seus projetos favoritos e dos rascunhos que você está acompanhando Mas isso não é tão importante. Você tem uma mensagem aqui. Aqui estão as mensagens do zero. Bem-vindo depois de fazer projetos e comentários, você recebe mensagens sobre eles aqui, explore e crie um projeto. Isso é o que faremos. Vamos voltar ao nosso projeto aqui. Veja nossa página do projeto aqui, e também podemos salvar agora aqui, ou podemos salvar como uma cópia. Para que seja feita uma cópia do seu projeto. Mas, por enquanto, salvamos o projeto salvo e, em seguida, podemos dar uma olhada na página do nosso projeto. Aqui está. Você também pode alterar, é claro, o nome aqui, balões estouram e aqui você também pode jogar o jogo E instruções são instruções para jogar o jogo, e outras notas e créditos também podem ser inseridos aqui. Mas, por enquanto, isso não é compartilhado. Você precisa clicar em compartilhar e, em seguida, outros arranhões também podem ver o projeto, reproduzi-lo e editar o projeto de quem eles estão gostando Vamos voltar aqui, fechar este tutorial. Estamos logados em nossa conta e, como eu disse, você pode economizar online Você não precisa fazer o download. Você também pode baixá-lo, é claro, e carregar do seu computador, fazer upload de um projeto, mas também pode salvar agora online na nuvem, por assim dizer. Ou você também pode fazer uma cópia. Agora fizemos uma cópia e o nome mudou para Balloons pop copy Agora você tem dois projetos. Aqui, se você clicar aqui, neste botão, poderá ver suas coisas. Minhas coisas são dois projetos não compartilhados, zero projetos compartilhados porque eu não compartilhei nenhum projeto aqui Agora isso é privado aqui, mas você também pode excluir os projetos aqui, ver o interior para editá-los, reproduzi-los e compartilhá-los. Isso é o que eu queria te mostrar. Vamos voltar aos nossos balões. Pop. E aqui temos nosso projeto. Então, toda vez que você fizer login em outro computador, talvez você ainda possa editar seus projetos aqui porque eles estão salvos online. 11. 11 Novo jogo que controla a nave espacial: Então, aqui estamos. Este é o começo do nosso novo jogo, chamará Space Explorer, e o jogador controla um foguete espacial que viaja pelo espaço e encontra coisas como meteoróides, rochas, rochas Mas também talvez recursos de matéria-prima, algo valioso pelo qual o jogador ganha pontos, e se o jogador, o foguete atingir um meteoro, por exemplo, haverá danos, e essa será E vamos começar. Então, temos esse ano de CATs. Eu comecei um novo projeto. Podemos excluir o gato e criar um novo sprite aqui, escolher um sprite os recursos aqui dos sprites predefinidos, e podemos procurar um foguete, e aí está, nosso foguete e aí está, nosso Basta clicar nele. Você também pode ver que ele tem uma animação. Então, vamos conferir as roupas aqui. E você pode ver que tem cinco quadros aqui, animação para cinco quadros, e podemos usar isso para tornar o visual um pouco mais interessante para ter uma animação do objeto do jogador aqui, a nave espacial Mas primeiro, vamos começar a controlar a nave espacial. A ideia é que você possa controlar a nave espacial usando as teclas do cursor, as teclas seta para cima moverão a nave espacial para baixo e para a Para a esquerda e da direita para a direita. Fácil, mas precisamos aprender um novo conceito. Então, vamos tornar nossa nave espacial um pouco mais adequada para o jogo Vamos torná-lo um pouco menor, talvez 30, definir o tamanho para 30, então será muito menor, mas também haverá mais espaço para outras coisas, como meteoróides e outras Aqui está, e vamos entrar no código aqui. Vamos para a seção de eventos e, em seguida, clique aqui para acessar nosso script Canvas. OK. Quando clicar em go, então, temos que definir a posição inicial Vamos para o movimento e depois para dois e depois para a posição inicial. Eu sugiro que você comece do centro da tela, e o centro da tela seja zero, zero, essa será a posição inicial. Bem no centro, então aqui vai para o sim positivo e aqui para o sim negativo. Você pode ver isso aqui se eu simplesmente for para a posição y e marcar esta caixa de seleção aqui. O valor será exibido aqui. No momento, é zero, claro, porque eu comecei o jogo e esse bloco aqui está configurando para zero, e também o x será zero. Eu também posso te mostrar o x aqui. Se eu mover isso para o topo aqui, você pode ver que o y fica mais nos valores positivos. Se eu movê-lo para baixo, você verá que isso é menos alguma coisa. Isso é positivo y, isso é negativo y, e à esquerda, você também pode ver para o x, isso é negativo x, e isso é positivo x para a direita. Ok, então agora temos isso. Estamos centralizando o foguete e agora precisamos deixar o jogador controlar o navio precisamos deixar o jogador controlar o Vamos nos livrar deles, então desmarque essas duas caixas aqui, e então teremos mais espaço para o resto Então, como você controla isso? Estamos apresentando aqui algo que você pode chamar de loop de jogo. E o que é um loop de jogo? O loop do jogo é algo que se repete para sempre. Não para sempre, mas enquanto o jogo rodar, ele se repetirá infinitamente. Então, onde está isso? Ficamos sob controle, e então temos isso para sempre. E também é chamado de “para sempre”. Então, basta arrastar isso para baixo, vá para x, vá para y. E aqui temos esse loop, e o que significa loop? Isso significa que tudo dentro se repete infinitamente. Então, se você fizer algo depois disso aqui, nunca será executado. Então, se eu fizer algo assim aqui, mover dez etapas, por exemplo, não consigo nem anexá-lo aqui porque o scratch sabe que depois desse loop eterno, não faz nenhum sentido colocar algo lá porque isso não será executado. Então isso não é possível. Você só pode mover isso dentro do loop eterno. Então, o que acontece se eu fizer isso? Então, dê dez passos. Vamos fazer isso. Vamos começar isso, e você vê que vai para a direita. E então sim, está meio preso aqui, então você não pode movê-lo mais do que isso. Portanto, o x será de no máximo 242 aqui. Então, mover isso mais para a direita, não funciona. Então, isso é sempre fazer isso aqui. E se você fizer duas coisas em sequência, ele também fará essas duas coisas para sempre. Então, vamos fazer outra coisa. Vamos para uma posição aleatória depois de dar dez passos. Execute isso e você verá que está se espalhando por todo o lugar o mais rápido possível. Isso não é muito útil, mas também podemos inserir um atraso aqui. Vamos para o controle, e aqui temos o bloco de espera de 1 segundo, ou podemos esperar 1 segundo ou dois ou qualquer outra coisa. Vamos tentar isso. Você vê que está se movendo dez , depois espera por 1 segundo e depois se move para uma posição aleatória Mas de qualquer forma, não precisamos disso aqui. O que precisamos é de outra coisa. Espero que você entenda que tudo o que está aqui dentro se repetirá para sempre. Não há saída. Será sempre repetido, repetido e repetido. Também há um loop diferente aqui. Você pode repetir dez vezes. Em seguida, ele apenas repetirá dez vezes. Ou você pode repetir até, e isso repetirá os blocos internos aqui até que uma condição seja atendida e, em seguida, ela sairá. E você percebe que eles têm um pequeno entalhe aqui. Então você pode fazer algo depois disso. Mas no futuro, você não tem isso, não há como anexar algo aqui depois de uma eternidade, o que é meio lógico, então você deve ter em mente que nunca sairá desse ciclo eterno Então, sempre estará aqui. Mas você também pode adicionar um evento diferente aqui. Então, quando você quiser fazer algo em paralelo, você sempre pode arrastar outro ao clicar aqui e depois adicionar um script. Isso é possível. Você pode ter duas coisas funcionando ao mesmo tempo, ou três ou quatro ou qualquer outra coisa, quantas quiser. Nesta lupa para véspera, o que fazemos? A ideia é verificar se uma tecla está pressionada e se esse bloco está sendo detectado. Pressionamos esse espaço de tecla e podemos arrastá-lo para a tela aqui. Mas também precisamos de outra coisa. Precisamos de algo que também esteja sob controle. Em inglês, podemos dizer que, se a tecla for pressionada, faça alguma coisa, e aqui no zero, é a mesma coisa se alguma coisa, então faça alguma coisa. Essa condição aqui depois do if, esse pode ser esse bloco aqui. Vamos colocar isso aqui depois do if. Basta soltá-lo aqui. Então você tem se o espaço da tecla for pressionado então, e então, sob essa condição, se a tecla de espaço for pressionada, então podemos fazer algo aqui. Mas não queremos a tecla de espaço aqui, precisamos, digamos que comecemos com a seta para cima. Se a tecla de seta para cima for pressionada, faça alguma coisa. O que fazemos então? Claro, nós movemos a nave espacial Vamos verificar como isso é feito. Nós mudamos Y. Nós mudamos a posição y em uma certa quantidade Então, vamos ficar com a dezena aqui, mudar y por dez. Portanto, sempre que a tecla de seta para cima for pressionada, altere y por dez. E dez significa para o topo, então o y será aumentado. Então, vamos verificar se isso funciona. Pressione go, e então eu estou pressionando a seta para cima aqui, e vemos que isso funciona. Não posso descer, mas eu posso subir. Então eu preciso pará-lo e reiniciar, e então eu posso fazer isso de novo. Ok, então vamos fazer o down também. Clique aqui no botão direito do mouse, e então você pode dizer Duplicar, e então você tem que colocar este segundo cadeado if duplicado aqui logo abaixo Essa é a seta para cima e essa será a seta para baixo. Se a seta para baixo for pressionada, não a seta para cima , precisamos mudar y na direção oposta. Aqui isso é positivo porque queremos que a espaçonave suba e aqui isso precisa ser negativo, e então o y da espaçonave cairá. Vamos tentar isso. Estou pressionando para cima Agora estou pressionando para baixo. Isso parece funcionar, muito bom. Agora precisamos movê-lo para a esquerda e para a direita. Novamente, duplique esse bloco. Você tem isso se, e então trocamos a chave aqui. Vamos começar com uma tecla de seta para a esquerda e, em seguida, alterar não y neste momento porque a esquerda é x, e a direita será x. Vamos remover isso aqui, excluí-lo, e aqui pegamos a alteração x y, colocamos isso aqui, e desta vez, x será alterado por dez. Vamos tentar isso e vai para a direita. Isso está errado. Essa precisa ser a seta para a direita. Vamos tentar isso novamente para a direita, sim, pressionando a tecla direita, a tecla de seta direita. Isso funciona. A única coisa que resta é a que resta, e vamos duplicá-la novamente mais uma vez Coloque-o após o anterior if, e agora se a tecla seta esquerda for pressionada, altere x por, e agora precisamos movê-lo para a esquerda, significa que temos que subtrair dez aqui Vamos mudar isso em menos dez. Novamente, vamos tentar, para a esquerda, para direita, para cima e para baixo, e isso funciona. Assim, a peça pode controlar a nave espacial. Se isso for muito rápido, talvez não seja suave o suficiente , precisamos alterar esses valores aqui. Talvez possamos dizer, vamos colocar cinco aqui, e isso será menos cinco E isso será cinco, isso será menos cinco Agora, a velocidade será um pouco menor. Vamos tentar isso de novo, e agora a velocidade está mais lenta Agora, temos o controle da nave espacial. Este é um passo muito importante aqui. Vamos examinar o código novamente. Quando clicar em go, estamos colocando a nave espacial na posição inicial, a posição inicial aqui, aqui, e isso é zero e zero, x é zero e y zero Então temos um loop. Percorra esses blocos aqui dentro para sempre, então repita isso para sempre ou enquanto o jogo continuar. O que fazemos é verificar em cada iteração aqui se a tecla, o erro para cima, o erro para baixo, o erro para a direita e a seta para a esquerda ou o erro para a esquerda estão verificar em cada iteração aqui se a tecla, o erro para cima, o erro para baixo, o erro para a direita pressionados E se for esse o caso, estamos mudando y e x aqui neste caso. Deixe isso entrar um pouco. Isso é muito importante. É assim que você faz o movimento, o movimento do controlador. Essa é a maneira padrão de fazer isso. Você tem esse loop eterno, que é como um loop de jogo em jogos mais sofisticados. Isso sempre se repete o mais rápido possível, e aqui estamos sentindo qual tecla é pressionada e, em seguida, alterando a posição x ou y de nossa nave espacial Então, no próximo vídeo, substituiremos esse valor constante aqui, esse cinco neste caso, por uma variável para que possamos alterar a velocidade aqui de acordo com nossa preferência. Não precisa alterar quatro valores aqui o tempo todo. Talvez haja algo como um power up ou algo que possa aumentar a velocidade, então precisamos substituir esses valores constantes aqui por uma variável. Mas vamos fazer isso no próximo vídeo. 12. 12 Como adicionar o fundo: Estamos aqui em nosso jogo de explorador espacial e agora se trata de criar o plano de fundo. Você pode pensar que é o plano de fundo, então temos que usar os cenários aqui. Mas há uma razão para não fazer isso. Estamos fazendo isso com outro sprite. Vamos criar outro sprite. Aqui você pode escolher um sprite, ou você também pode pintar um sprite, e é isso que fazemos Claro, também existem essas opções para fazer upload de uma imagem de sprite, SVG, algo parecido E também tenha uma surpresa e tenha alguma coisa. Vamos fazer isso, vamos pegar um sprite aleatório aqui. Não é isso que queremos, é claro, mas é claro que podemos excluí-lo novamente. Este é o nosso sprite aleatório. Se você fizer isso de novo, receberá um diferente. Desta vez é uma tigela. Essa é a opção surpresa, e podemos verificar aqui se você encontrar algo como espaço, universo ou estrelas, mas você não encontrará nada aqui. Encontramos um sol, mas não é isso que queremos. Queremos um fundo preto com pontos claros, branco, talvez pontos brancos, e isso não está na biblioteca Vamos fazer isso sozinhos, basta escolher a tinta aqui. Então, podemos pintar nosso plano de fundo. Vamos começar com um retângulo. Escolha essa ferramenta de retângulo aqui e, em seguida, escolhemos uma cor diferente, é claro, ela deve ser preta Definimos o brilho para zero, e isso é preto. Se você quiser branco, você tem que definir o brilho para 100 e a saturação para zero, e agora você tem branco Mas queremos preto aqui, então o brilho a zero tornará tudo preto. Não importa o que você define aqui ou aqui. Tudo ficará preto se você definir o brilho para zero. Agora temos a cor preta do primeiro plano e a ferramenta retângulo ativada, e então você precisa arrastar um Então, tente ajustá-lo a esses limites aqui. Se você criar o retângulo aqui, poderá ajustá-lo com esses pontos aqui com os pequenos círculos Vamos fazer com que seja mais ou menos exatamente igual a essa área interna aqui. Você também pode ampliar. Para verificar se conseguimos. Agora não é exatamente. Agora, está tudo bem. Não precisa ser exato. Se você fez algo errado, basta desfazer aqui, então essa seta é desfazer e, em seguida, a última ação será Vamos corrigir isso aqui. No lado esquerdo, sempre vá até esses círculos aqui, e então você pode ajustá-los, e então, tudo bem. Vamos diminuir o zoom. Esse é o nosso histórico. Mas, o que está faltando aqui? As estrelas. Então, estrelas são círculos, pelo menos neste jogo. Portanto, escolha o círculo e, em seguida, precisamos alterar a cor do primeiro plano de co, brilho para 100 e a saturação Isso vai te dar branco aqui. Ok. Em seguida, ampliamos um pouco e arrastamos um círculo aqui. Não será um círculo se você não segurar a tecla shift aqui. Então, no teclado, segure a tecla Shift e, em seguida, é um círculo perfeito aqui. Mas é um pouco grande demais, então vamos torná-lo um pouco menor. Algo talvez assim. Vamos verificar isso. Talvez um pouco grande demais, vamos continuar assim. Temos uma estrela aqui, não muita. Temos que fazer mais estrelas. Vamos voltar para a ferramenta de seleção aqui. Selecione a ferramenta de seleção, esta seta aqui. Agora podemos selecionar nossa estrela aqui e agora podemos copiá-la. Como você copia isso? Pressione copiar aqui, neste botão, ou você também pode comandar C ou no Windows, é o Controle C, e você o copiou e depois pode colá-lo Colar é esse botão ou comando V ou Control V. Vamos colá-lo e, em seguida, está aqui e você pode arrastá-lo para um local diferente aqui Vamos arrastá-lo para outro lugar. Talvez aqui. Vamos fazer outra cópia. Comando C ou controle C, controle ou comando V, e isso fará outra cópia. Nós o arrastamos para outro lugar. Mais uma vez, movendo-o. Fizemos uma pequena pilha de estrelas aqui. Agora, o que podemos fazer para tornar as coisas um pouco mais rápidas é selecioná-las. Vamos diminuir o zoom. Selecione e, em seguida, podemos arrastar um retângulo aqui. Agora você também selecionou o plano de fundo, o que não é bom. Então, vamos desmarcar o plano de fundo aqui. Pressione shift e, em seguida, selecione o plano de fundo, e isso desmarcará o plano de fundo Agora, só temos esses selecionados aqui. Vamos copiá-los, Conti ou Komaz e depois inserir e colar novamente Vamos ampliar um pouco e depois podemos mover essas novas estrelas para outro lugar. Temos que arrastar uma das estrelas e todas as outras estrelas também irão com ela. Vamos colocá-los aqui e fazer com que eles os ajustem um pouco, selecionamos este e o movemos. Talvez esse também. Essa. É um pouco diferente aqui. Assim. Agora devemos fazer outra cópia do nosso campo estelar aqui. Novamente, selecione-os, desmarque o plano de fundo e, em seguida, você pode copiá-lo e movê-lo para outro lugar. Como aqui, você também pode girá-lo com este. Essa alça aqui pode girar a coisa toda. E então copie novamente, movendo-a talvez para cá, girando-a um pouco, talvez desta vez ao contrário, e outra cópia, e então a movemos para cá Eu acho que está tudo bem. Talvez movamos essas estrelas um pouco para a direita. Ok, eu acho que está tudo bem. Portanto, este é o fundo da nossa estrela. Acho que está tudo bem por enquanto. Então esse é o nosso sprite de fundo aqui, o primeiro sprite de fundo que temos, mas há um problema Não está em segundo plano. Você não pode mais ver a nave espacial. Então, se eu clicar na nave espacial, ela não está visível aqui, mas deveria estar Qual é o problema aqui? Está atrás do segundo sprite, atrás do sprite de fundo E isso, claro, não é o que queremos. Como podemos resolver isso? Podemos movê-lo para o fundo. E isso é aqui em Los, selecione looks aqui, e então você pode rolar para baixo, ir para a camada frontal. Esse é esse quarteirão aqui. Então, arraste esse bloco para a tela até a tela do script. E então podemos mudar isso não para a frente, mas queremos que vá para a camada posterior. Então faça isso. E como nunca mudamos isso, podemos fazer isso apenas uma vez aqui no editor e clicar neste bloco aqui. Se você clicar no bloco, isso será executado aqui neste bloco. Vá para a camada posterior. Agora, esse orgulho está em segundo plano e, claro, nosso foguete está agora em primeiro É isso mesmo. Esse é o nosso orgulho de fundo Está tudo bem assim, mas é estático, não está se movendo, e queremos um efeito de rolagem, para que pareça que o foguete está realmente voando pelo espaço Isso é o que faremos no próximo vídeo. 13. 13 Mover o fundo: Aqui temos nosso plano de fundo novamente, e esse bloco aqui não é mais necessário, então podemos apagá-lo, basta arrastá-lo até aqui e ele desaparecerá Ok, então precisamos mover o fundo para que o jogador tenha a impressão de que o foguete está realmente voando pelo espaço Então, como fazemos isso? Vai ser assim aqui. Mas é claro que estará em segundo plano. Mas vamos primeiro definir a localização do plano de fundo para a posição inicial. Qual é a posição inicial A posição inicial estará aqui em algum lugar aqui no centro, então deve ser 00. Isso é o que faremos a seguir. Vá aos eventos. Quando clicar em go, estamos definindo a posição inicial Vá para x e y, e esse já é o caso aqui, x zero e y também zero, para que seja reiniciado toda vez que o jogo for iniciado. Vamos tentar isso. Basta mover o sprite de fundo e começar, e agora o temos novamente na posição inicial Mas nosso foguete desapareceu novamente. Então, para evitar isso, talvez ainda devêssemos usar esse bloco go to layer aqui. Então, basta configurá-lo para trás, vá para a camada traseira aqui. Depois de dois x e y, nosso chip de foguete fica novamente visível, não mais atrás do sprite de fundo Como movemos esse sprite de fundo? É como o chip do foguete, mas sem os controles, os controles serão automáticos, por assim dizer, então precisamos de um loop eterno Algo assim e, claro, isso será após a inicialização aqui Primeiro, definimos x e y como zero e depois vamos para a camada posterior para garantir que o sprite esteja realmente em segundo plano e que o foguete esteja em Agora temos esse loop de jogo aqui para nosso sprite de fundo Falando em sprite de fundo, poderíamos simplesmente renomeá-lo aqui, para que você possa renomeá-lo, por exemplo, Talvez tenhamos um segundo, então o chamamos de BG one return, agora ele foi renomeado O que precisamos aqui? Precisamos mover o fundo, e é claro que isso está em movimento, então vá para movimento e depois mude y por dez. Vamos tentar isso. Essa é a direção errada. Eu queria cair, então deveria ser menos. É um pouco rápido demais, então tente menos dois aqui Vamos tentar novamente e agora ele se move para o fundo aqui. Isso é o que queremos, mas também queríamos começar de novo aqui no topo, então precisamos reiniciá-lo se essa posição for alcançada. A posição aqui é -346, e isso é o que precisamos ter em mente Precisamos verificar se a posição está colocada aqui nesta posição y. Como fazemos isso? Nós vamos controlar. Desta vez, não se trata de loops, mas de uma condição. Se uma condição for atendida, queremos redefinir essa localização do Sp, a localização dos Sprites y. Isso é se a condição A, então faça isso, e aqui já podemos colocar, vá para x y, x está bem, do jeito que é zero, e y deve ser a posição inicial. Não, não deveria ser a posição inicial, mas deveria ser algo assim aqui. Vamos movê-lo até o topo aqui. Esta é a localização mais alta aqui. E aqui temos 346. Então é o mesmo, mas no lado positivo. Ok, então esta é a posição que precisamos para reiniciar esse sprite dois E agora precisamos da condição. Então, a condição está aqui. Como podemos fazer uma condição simples? Nós já fizemos isso. Aqui temos operadores. Portanto, não está detectando desta vez, mas são os operadores. O que precisamos verificar? verificar se a localização, a localização y, está abaixo de um valor. E esse é esse bloco aqui. Coloque isso aqui. E solte isso. E agora precisamos da localização y do nosso sprite. Vá para o movimento. Então aqui temos a posição y. É disso que precisamos. Verificamos a posição y se a posição y for menor que isso menos 4346, então precisamos redefinir para Vamos tentar isso. Essa condição não foi atendida no momento, não foi cumprida e, em seguida, não está funcionando. Y? Como a posição y nunca será menos três, 47, ela sempre ficará aqui Precisamos diminuir isso. Precisamos diminuir isso em um ou aumentar isso em um, não é 36, 345 Se a posição y obtiver dois menos três, 46, isso será cumprido aqui, essa condição. Vamos tentar isso. E está funcionando, muito bom. O sprite de fundo agora se moverá para a parte inferior e, se chegar à parte inferior, será redefinido aqui por meio dessa condicional Se a posição y for menor que menos 36, cinco, redefina a posição para isso Esse é o movimento do fundo. Funciona muito bem. O problema aqui é que você tem esse espaço em branco vazio aqui. Para isso, precisamos ter outro sprite e essa deve ser uma cópia desse sprite, mas ele deve se mover de forma um pouco diferente, ou pelo menos deve começar em um local diferente, e faremos isso no próximo vídeo 14. 14 Segunda animação de fundo: Agora que temos nosso plano de fundo móvel assim, precisamos duplicar esse sprite de fundo aqui porque você tem esse espaço vazio ou branco aqui no meio, então precisamos preencher isso, é claro com um segundo Como fazemos isso? Isso é muito, muito fácil. Basta duplicar esse sprite ou o primeiro sprite de fundo. Agora temos um segundo e, em seguida, comece de novo, você verá que ele ainda tem esse espaço vazio, esse espaço em branco aqui, de, porque os dois sprites estão exatamente na mesma posição Mas isso é muito fácil de mudar. Só precisamos mudar a posição inicial do segundo plano de fundo aqui e configurá-lo para três, quatro, seis. Vamos desconectar isso aqui para ver como é Ele será definido no início para este local aqui e, em seguida, começará a partir daqui. Isso é o que vemos se simplesmente conectarmos isso novamente. O segundo começa daqui e depois desce e o outro espírito também desce, desce Você não pode ver isso porque não há lacuna entre os dois. O que podemos fazer é usar roupas aqui no primeiro plano de fundo e, em seguida, selecionar esse retângulo aqui, onde o preenchimento é preto, e definir o contorno, vamos defini-lo como vermelho Então, isso terá um contorno vermelho para que você possa vê-lo aqui. Vamos cuidar do outro aqui. Mude para o segundo plano sp. Selecione novamente o retângulo altere o contorno Ah, você também pode alterar o preenchimento, é claro. Mas vamos mudar o contorno aqui para, digamos, esse azul aqui Agora temos essa borda azul. Aqui temos a borda vermelha, para que você possa ver como eles se movem juntos em sincronia. Vamos começar e você pode ver aqui esta linha de separação. Do segundo, a borda superior aqui, e não há nenhuma lacuna entre os dois sprites de fundo aqui Isso é muito bom e foi muito fácil conseguir isso. O segundo sprite é exatamente igual ao primeiro sprite de fundo Somente a posição inicial precisa ser alterada. Vamos verificar novamente o código. Vamos para a posição inicial, que é no segundo sprite uma posição diferente Começa aqui no topo e depois vamos também para a camada de fundo do. Então fazemos por mim aqui. E mudamos y por menos dois, que significa que ele diminui. A cada iteração do loop, ela diminuirá dois pixels. E se a posição, a posição y atingir um certo ponto, atingir o fundo aqui, que verificamos com essa condição aqui, então a redefinimos para a posição inicial aqui. O mesmo para o primeiro plano de fundo sp, o que é diferente aqui é apenas a posição inicial, ela começa bem no meio para cobrir tudo aqui. Você pode ver esse vermelho aqui, essa borda superior vermelha aparece aqui e depois desce, desce, desce , desce, desce, desce. E se atingir essa posição , sobe novamente da mesma forma que na segunda. Esse é o nosso plano de fundo comovente, e eu acho que isso é realmente impressionante. Não escrevemos nem construímos muito código. Tudo é muito simples e podemos mover o chip do foguete aqui E o fundo está rolando de cima para baixo. Também podemos mudar, é claro, as estrelas para que fique um pouco mais interessante porque, no momento, só temos uma cópia, um clone do primeiro plano de fundo aqui, e ele tem as mesmas estrelas Então, podemos trocá-la aqui, roupas, e então você pode mover todos esses pontos aqui ao redor Lembre-se de desmarcar o retângulo aqui, e então você pode movê-lo, girá-lo, A. e então você pode movê-lo, girá-lo, A. O mesmo aqui. Desmarque o plano de fundo e, em seguida, mova-o ou gire-o para que o padrão seja um pouco diferente Talvez assim. Aqui, vamos girá-lo um pouco Parece diferente agora. Vamos tentar novamente. Também podemos nos livrar das fronteiras agora. Não precisamos deles. Selecione esse retângulo aqui e, em seguida, redefina o contorno dois Vamos também remover o outro. Aqui, defina-o para preto novamente, brilho zero. Vamos começar o jogo novamente. Eu o coloquei em tela cheia para que você possa vê-lo começar melhor, e agora podemos mover a nave espacial para cá Não há nada a ser coletado ou algo parecido , ou a nave espacial não pode atingir nada no momento, mas ela pode flutuar pelo espaço e o jogador pode Isso é muito bom. É um começo muito bom. Temos um plano de fundo rolante com dois sprites de fundo diferentes Agora, no próximo vídeo, adicionaremos mais alguns objetos aqui para que o jogador possa talvez atingir um meteoróide e sofrer danos 15. 15 Primeiro obstacle the rock: Agora que temos nossa nave espacial flutuando pelo espaço, viajando pelo espaço e nosso plano de fundo se movendo, precisamos de um Então, vamos parar esse jogo aqui e criar outro sprite, é claro Então escolha um sprite, e temos algo parecido com uma pedra aqui Então, procure por rochas aqui neste campo, e temos lascas de foguete e pedras, e eu estou escolhendo rochas Agora temos esse aqui. Então, temos que ajustá-lo um pouco. Então usamos fantasias, e aqui temos o sprite, o traje, o traje principal do sprite Então, vamos primeiro nos livrar disso aqui, para ter certeza de que você tem a ferramenta de seleção, esta seta aqui e, em seguida, basta selecioná-la. Você pode usar este botão excluir ou pressionar delete no teclado ou no backspace, também funciona Agora temos isso e é um pouco grande demais. Eu acho que, então vamos mudar o tamanho Aqui você pode alterar o tamanho aqui. Vamos fazer com que seja 50%. Agora, acho que esse é o tamanho correto e mova-o um pouco aqui. Isso é um pouco melhor. Agora também podemos mudar um pouco a forma, se você quiser. Como você faz isso? Você pode, é claro, girá-lo assim Mas com essa ferramenta, você não pode acessar os diferentes pontos aqui dentro dessa imagem vetorial. Você tem que usar este aqui. Essa é a ferramenta correta para realmente acessar esses pontos aqui do SVG Agora você pode ampliar um pouco e depois alterar esses pontos aqui. Esse é o interior. Então aqui temos o esboço. Esse também é o esboço. Vamos fazer uma forma um pouco diferente aqui. É claro que isso é um pouco complicado aqui. Temos que ter o cuidado de selecionar, clique nesses círculos aqui. Apenas faça com que fique um pouco mais longe do círculo. Então, vamos fazer uma pequena curva aqui, algo assim, algo como uma pedra. Agora o outro lado. O que você também pode fazer é mover isso aqui. Então, isso mudará a curvatura aqui. Algo parecido com isso. Você também pode torná-lo curvo ou pontudo Dessa forma, você tem uma borda pontiaguda aqui ou uma curva Aqui você pode alterar a curva. Você pode mexer um pouco aqui. Vou limitá-lo a mudá-lo um pouco. Esta é a área interna aqui. Acho que isso é suficiente. Ainda não é muito bonita. Mas acho que está tudo bem. Se você quiser, você pode, é claro, fazer melhor aqui, colocar um pouco mais de esforço nisso. Vamos torná-lo um pouco melhor. Como você pode adicionar pontos aqui é apenas clicar na linha como esta. Então você tem um novo ponto. Talvez precisemos de um aqui. Basta clicar na linha e obter um novo ponto aqui que você pode usar. Eu não sou um artista, então esse não será o meteoróide mais bonito que Mas acho que assim, talvez esteja tudo bem. Vamos deixar isso assim. O importante é usar essa ferramenta aqui para ter acesso aos pontos únicos aqui e usá-la, se você quiser, por exemplo, movê-la ou girá-la aqui Algo parecido com isso. Mas eu coloquei no meio novamente. Eu deixo assim. Este é o nosso meteoróide, mas eu quero mudar um pouco a cor Vamos novamente para essa ferramenta, esse seletor de pontos aqui, e vamos selecionar essa área interna aqui Então mudamos a cor disso. Essa é uma cor verde, mas eu mudo para marrom. Algo assim, talvez. Eu acho que está tudo bem. Agora temos nosso meteoróide, e ele está lá parado, sem se mover Obviamente, isso não está correto. O que podemos fazer agora é copiar nosso script do plano de fundo, do primeiro plano de fundo aqui, talvez ou talvez do segundo. Vamos pegar o segundo. Aqui temos o roteiro, e agora copiamos esse script para essa rocha meteoróide Basta arrastar isso aqui até que ele se mexa e, em seguida, solte-o, e agora você o copiou. Selecione a rocha. Aqui temos esse script. Esse script é uma cópia do outro script. Vamos ver o que acontece se eu começar o jogo. Está se movendo para baixo, está se movendo para baixo. Isso é bom. Mas também está preso aqui. Precisamos deixá-lo desaparecer aqui se atingir esse fundo aqui. Essa é a condição aqui se a posição y for menor que -345 Isso é diferente aqui. Você pode ver aqui que esse meteoro está preso em uma posição Vamos fazer isso de novo. Não podemos ver isso porque não está em primeiro plano Obviamente, precisamos alterar essa opção de ir para a camada posterior para ir para a camada frontal. Agora ele deve ir para o primeiro plano. Aí está. Nós o vemos preso aqui. Isso é -187. mudar isso menos 8186, deveria ser Se estiver abaixo disso e 187 estiver abaixo disso, então ele deve ir para a primeira posição Essa é a correta aqui. Vamos verificar isso. Aí está a pedra, e então ela atinge o fundo e depois volta aqui no topo. Isso é bom. Está se repetindo. É claro que é muito fácil para a nave espacial evitar o obstáculo Mas é um começo. Este é nosso primeiro obstáculo aqui, e o foguete ou o jogador devem evitar atingi-lo Não há nenhum teste de sucesso no momento. Mas é claro que vamos implementar isso. Além disso, está sempre na mesma posição aqui, então é chato. Mas temos nosso meteoróide. 16. 16 Como bater na pedra: Agora, estamos atingindo a rocha ou a nave espacial está batendo na rocha, e então ela deve desaparecer, e talvez devêssemos diminuir alguns pontos ou aumentar alguns danos Mas pelo menos no final, a nave espacial deve reaparecer, e então o jogo continua, mas talvez com uma viva a menos, algo assim Vamos fazer a parte de bater. Como fazemos isso? Quando a nave atinge a rocha, ela deve desaparecer por enquanto, digamos que depois de 3 segundos, ela deve reaparecer, depois no meio da tela, algo assim Como fazemos isso? Temos esse loop de jogo aqui em nosso foguete e lá podemos testar o evento de sucesso, ou não é um evento, mas ele pode ser encontrado aqui em detecção, vá para detecção e, em seguida, tocamos o ponteiro do mouse Este é o bloco que estamos procurando. Mas não se trata do ponteiro do mouse, é sobre outro sprite, e isso são pedras Tocando pedras. Essa é a condição e, para uma condição, usaremos o bloco if. Isso aqui. Se tocar nas rochas, se o foguete tocar na rocha, certo, então faremos alguma coisa. O que vamos fazer? Nós escondemos o foguete. Sob a aparência, e aqui na parte inferior, há um esconderijo. Basta colocar isso aqui, e isso podemos testar. Vamos colocar isso se bloquear aqui. No final do ciclo eterno. Isso é importante, não do lado de fora. Você não pode fazer isso do lado de fora porque não pode fazer algo depois de uma eternidade. Este é o lugar onde você precisa deixá-lo aqui. Estamos percorrendo o ciclo do jogo para sempre e , se o foguete atingir a rocha, se tocar na rocha, ele deve estar Vamos fazer isso. Não estamos controlando a nave, e agora ela desaparece Isso funciona. Agora queremos que ele reapareça após 3 segundos. Temos que esperar 3 segundos e dentro desses 3 segundos, esse controle aqui não funcionaria. Continuamos esperando por. Coloque isso atrás da pele, espere, digamos, 3 segundos. Então, dentro desses 3 segundos, esse loop eterno não será iterado e, após os 3 segundos, queremos reaparecer Precisamos mostrar isso. Arraste esse show aqui. Depois de esperar 3 segundos. Vamos tentar isso e veremos que a nave não está visível. Por quê? Como não o mostramos no início, precisamos mostrá-lo aqui ao clicar depois mostrar o sprite Agora podemos vê-lo e agora ele desaparece, porque bate na rocha e depois reaparece Então, podemos controlar a nave e contornar o meteoróide Vamos bater novamente na rocha e então ela deve reaparecer. Isso é bom. Mas é claro que precisamos fazer alguma coisa se a nave espacial atingir a rocha porque deveria haver uma penalidade por bater nas rochas, e digamos que a nave Talvez tenhamos três vidas e, em seguida, uma vida é subtraída se o navio bater na rocha Então, se o navio tiver zero vidas, o jogo acaba. Vamos fazer isso no próximo vídeo. 17. 17 Danos e reparos: Neste vídeo, contaremos os reparos. Você tem uma certa quantidade de reparos. Você tem dinheiro para, digamos, três reparos. Se você bater na pedra mais de três vezes , o jogo acaba. Precisamos contar o número de reparos e como contamos? Já sabemos que são variáveis com uma variável. Vamos fazer um. Vá para variáveis, exclua esta, a minha variável. Nós não precisamos disso. Faça um novo, e isso deve ser para todos os sprites Devem ser reparos ou talvez restem reparos, algo assim. Claro, precisamos definir no início. Restam dois, três reparos, o jogador tem três reparos, três ou dinheiro para três reparos, e então o jogo termina. Podemos ver aqui que os reparos deixaram zero. Precisamos começar o jogo. Agora temos três e, claro, isso não muda. Isso é o que temos que fazer agora, e é super fácil. Só um troco repara a esquerda, este quarteirão por um. Agora, essa não é a quantidade certa menos um, deve resolver o problema, então deve diminuir a diminuição os reparos deixados Vamos fazer isso antes ou depois do peso, talvez antes seja melhor. Vamos fazer isso. Agora temos dois. Se acertarmos novamente, temos um, e se acertarmos novamente, temos zero, e agora a próxima falha deve terminar o jogo. Mas neste caso, temos menos um. Precisamos verificar se ainda temos reparos abaixo de zero. Se chegar a menos um, o jogo acaba. Onde fazemos isso? Talvez façamos isso aqui logo antes do peso. Precisamos verificar uma condição para isso, temos o bloco if then aqui, arraste-o aqui. Agora também temos esse bloco menor, precisamos dele também e precisamos arrastá-lo aqui. Agora precisamos obter o valor de nossos reparos variáveis restantes. Vá para variáveis, e aqui temos reparos restantes, nossa variável, e podemos arrastá-la aqui para essa condição inferior. Se os reparos restantes forem menores que zero, o jogo termina. Então, temos que verificar o que fazemos se o jogo acabar. Por exemplo, podemos dizer alguma coisa. Parece engraçado, mas é assim que você pode fazer isso. Então, em Looks, você tem que dizer olá por 2 segundos, e isso mostrará uma bolha com um texto Vamos tentar isso. Vamos tentar primeiro mostrar essa mensagem sempre que o navio bater na rocha. Então diga olá. Talvez não seja o texto certo aqui. Diga acidente, por 2 segundos. Sim, acho que está tudo bem. Vamos tentar isso. Aqui você pode ver, não, está escondido, é por isso que você não pode ver a bolha Vamos mudar a ordem aqui. Precisamos escondê-lo depois desta mensagem. Deixe isso acontecer. Alteramos a variável por menos um, dizemos falha, nos escondemos e depois esperamos 3 segundos. Vamos ver isso. Colisão. E mais uma vez, falhe. Agora, se o valor da variável esquerda do reparo estiver abaixo de zero, precisamos dizer algo como fim de jogo. Vamos colocá-lo novamente aqui. Fim do jogo e tente novamente. Primeiro acidente, segundo acidente. Agora, o terceiro acidente ainda está bom, mas agora não temos mais reparos. Eu deveria dizer que o jogo acabou. Não é o caso. Temos que verificar, e eu sei porque está escondido. Claro, pedido errado novamente. Vamos esconder isso depois disso. Vamos tentar novamente. Agora, desta vez, diminua o número de reparos. Vamos consertá-lo e depois terminar o jogo. Então, o próximo acidente terminará o jogo. Funciona. Primeiro acidente, é claro, porque caímos e depois terminamos o jogo Temos os dois e, em seguida, leva 2 segundos para exibir isso e, em seguida, ele verifica essa variável. Talvez seja melhor dizer o acidente logo após essa verificação aqui. Vamos alterar novamente o pedido e depois tentar novamente. Primeiro acidente, zero reparos restantes e agora o segundo acidente acabou. E depois caia. Como terminamos o jogo, na verdade? Se for esse o caso aqui, precisamos parar o jogo. Também é possível. Vamos controlar e depois paramos tudo. Coloque isso aqui na caixa do jogo. Vamos tentar novamente. Primeiro acidente. Segundo acidente e depois fim do jogo. Isso é bom. É até um jogo. Não é muito empolgante porque temos apenas uma rocha, um meteoróide e também não há nada para coletar e talvez preencher os reparos que restam ou não há meta a ser alcançada Então é chato. Mas já é um jogo, então podemos melhorá-lo, é claro, e o faremos. Por exemplo, a primeira coisa que eu melhoraria aqui é que a rocha aqui está em uma posição x aleatória. Se reiniciarmos a rocha, de modo que esteja aqui, vá para x e y, vamos definir isso para um x aleatório e não para zero. Vamos fazer isso no próximo vídeo. 18. 18 Posição inicial aleatória e blocos personalizados: Para tornar o jogo mais interessante, queremos introduzir uma posição inicial aleatória para nosso meteoróide Vamos verificar o jogo novamente. A rocha está sempre partindo da mesma posição x aqui. É claro que também está partindo da mesma posição y, mas a posição x é interessante. Então, o jogador aqui sabe onde está o meteoróide, e é muito fácil voar nessa posição x aqui Você não precisa fazer mais nada. Então isso não é muito interessante. Então, precisamos mudar isso, e isso é bem fácil. Usamos esse bloco aqui. Então, os operadores escolhem aleatoriamente. Então, já usamos isso antes nos balões do jogo de estourar balões Então isso está gerando um número aleatório entre esses limites aqui. De quais limites precisamos? Então, vamos colocar esse meteorito no lado esquerdo e ver qual é a exposição Algo assim, talvez, e então temos esse -221 Então, digamos -220, e então eu diria mais 220 e depois do outro lado Seria como colocar isso aqui assim. Eu acho que está tudo bem. Então, entre esses dois números, haverá um número aleatório escolhido aqui, e isso precisamos definir aqui para o nosso x. Então, aqui, mas antes de fazer isso, vamos clicar com o botão direito do mouse no bloco aqui e duvidar. Nós temos dois desses, vamos colocar o primeiro aqui, vá para x. É quando o jogo começa. Vamos para essa posição de reset, e esse é o número aleatório aqui para x e o y é 346, e também o mesmo aqui quando redefinimos a posição Se essa posição y for alcançada, reiniciaremos e passaremos também para um número aleatório x e essa posição y fixa. Isso é fácil e vamos tentar aqui, e vemos que desta vez é essa posição aqui da rocha, e desta vez é aqui, então o jogador não pode simplesmente deixar o foguete aqui no meio porque haverá um número aleatório, uma posição x aleatória no meio, e essa é a única e a queda, então o jogador precisa se afastar do caminho até aqui, e isso é um pouco um pouco mais interessante. Ainda assim, temos apenas um meteoróide, apenas uma rocha, então não é muito difícil evitar isso, mas pelo menos é aleatório e a exposição é, a cada vez, a rocha é zerada, a posição é definida a posição é OK. Então, o que não é tão bom nisso aqui é o fato de termos que colocar isso duas vezes. Então esse bloco, esse bloco de números aleatórios de escolha. Temos que colocá-lo duas vezes. Então, se você quiser, por exemplo, alterar os limites aqui, temos que fazer isso aqui aqui. Então, se quisermos que essa rocha fique mais no meio , precisamos alterá-la em dois locais aqui. Não é muito bom. E é por isso que introduzimos um novo conceito aqui e esse conceito são blocos personalizados. Você pode criar seu próprio bloco. Aqui estão meus blocos. Você pode fazer seus próprios blocos, e você verá como isso se parece e nós o usaremos aqui para redefinir a rocha para essa posição inicial e também para a posição inicial quando ela atingir o fundo A ideia é substituir essas duas chamadas para ir para x, ir para y por um x aleatório com um bloco personalizado. Vamos fazer isso, criar um bloco abaixo dos meus blocos e, em seguida, você pode escolher o nome do bloco aqui. Basta colocar o cursor aqui ou você pode simplesmente escrever e digitar seu nome para o bloco. Eu direi que isso é redefinido aleatoriamente x. Deve ser um nome que de alguma forma transmita o significado do que é feito dentro do bloco Um bloco pode conter outros blocos, algo como uma subrotina O nome deve descrever o que é feito nesse bloco. Então, basta clicar. As outras opções não são importantes no momento. Então, basta clicar em k, e então já temos esse bloco aqui. E aqui definimos o que é feito nesse bloco. Assim, você pode colocar os blocos que quiser aqui, assim como depois de clicar no W, pode colocar o que quiser aqui. Então, vamos fazer isso. Queremos redefinir a posição das rochas para a posição inicial, então precisamos extrair esse bloco aqui. Então, basta separar isso e, em seguida, puxar isso para fora e colocá-lo aqui nesta definição de reset aleatório x. Vamos deixar assim. E também, isso pode ser arrastado até aqui, e você pode apagar aquele, guiar aquele Então, deixe-o aqui. Ok, então como chamamos esse bloco? Muito fácil? Vamos aos meus quarteirões e depois o temos aqui. Definimos x aleatório, e este é o nosso bloco personalizado e podemos usar como qualquer outro bloco, arrastar esse bloco personalizado aqui depois juntar tudo. E também o segundo local está aqui. Se essa posição y for alcançada, redefina também para essa posição x aleatória e para a posição y fixa. Então, vamos tentar isso primeiro, e deve funcionar da mesma forma que antes? exposição das rochas é escolhida aleatoriamente cada vez que o botão é pressionado Então é isso que queríamos, e é o mesmo de antes, então nada mudou. Mas o bom é que esse código é mais fácil de mudar. O que eu quero dizer? Se você quiser alterar esse intervalo aqui do qual o número aleatório é escolhido, basta alterar esse local aqui. Por exemplo, se você quiser que fique mais no meio, no centro, poderíamos dizer que está entre -100 e mais 100, e pronto Só precisamos alterar essa localização aqui desse código nessas duas posições, função, como você pode chamá-la, também, ou esse procedimento, ou essa subrotina é chamada a partir desse código de posição e desse código de localização Dessa forma, é mais fácil mudar e você pode fazer o que quiser aqui dentro. Então, toda vez que G é clicado, esse bloco é chamado O que isso significa, os blocos sob esse reset aleatório X sob esse reset definido aleatório X, são executados. E então, quando não há mais blocos aqui, a execução é retomada aqui após esse bloco personalizado Então, o próximo será ir para a camada frontal e, em seguida, esse loop eterno. O mesmo aqui, se essa posição y for alcançada, e pularmos para esse bloco X aleatório redefinido aqui, e irmos para x for executado e depois disso para sempre. Continuará. Então, esse é um bom truque. Não é necessário usar blocos personalizados. Você sempre pode ir sem eles. Mas é mais fácil fazer alterações se você usar esse script aqui, esses blocos dentro desse bloco personalizado em mais de um lugar. Estamos chamando isso aqui e aqui, e dessa forma só precisamos alterar esse único local dentro do nosso X. Usarei essa possibilidade para criar blocos personalizados também mais tarde, mas aqui está a primeira introdução a esse conceito, e isso é muito importante porque torna seu código mais legível Então, imagine se você tem dez blocos aqui neste bloco personalizado, e você teria que colocá-los aqui, diretamente sem esse bloco personalizado, e você tem o dobro do mesmo em dois locais aqui no código e você quer mudar alguma coisa lá, então você sempre tem que mudar dois locais. Se você precisar dessa funcionalidade em dez lugares, por exemplo, precisará alterar esses dez lugares. Mas se você tiver esse bloco personalizado aqui, precisará alterar apenas esse local. Obviamente, isso também torna o código mais legível porque você pode nomear esse bloco, o que exatamente esse bloco faz É como escrever um comentário para que esse bloco aqui redefina a posição x para um número aleatório, e é isso que a descrição aqui diz O nome do bloco diz, reset random x. Você pode colocar uma boa descrição para que você possa ler seu código como uma frase em inglês, por exemplo. Ao clicar em redefinir X aleatório, vá para a camada frontal e assim por diante, e talvez também possamos colocar esse loop eterno em um bloco personalizado , não é necessário nomeá-lo. Nós podemos fazer isso. Vamos fazer isso, fazer outro bloco, fazer um loop de jogo e, em seguida, tudo bem. Agora podemos definir nosso bloco personalizado de loop de jogo, colocar esse loop eterno aqui e usar esse bloco de loop de jogo aqui, e isso será o mesmo. Vamos começar o jogo novamente. E você vê que isso está funcionando da mesma forma que antes. Mas agora estruturamos nosso código um pouco melhor, e você pode lê-lo como em linguagem normal aqui. Ao clicar, redefina um X aleatório, vá para a camada frontal, loop de jogo. E se você quiser saber o que é feito no Game loop, basta acessar aqui para definir o loop do jogo. Então você pode deixar assim, mas vou colocar isso para sempre aqui Eu fui só um exemplo. Coloque isso de volta aqui, e podemos nos livrar da definição aqui. O que você precisa fazer primeiro é se livrar desse bloco aqui. Em seguida, você pode se livrar do definido e, em seguida, o bloco também é excluído aqui. É assim que você define seus próprios blocos personalizados que podem conter código arbitrário, podem ter seu script completo aqui dentro Você também pode chamar outro bloco aqui dentro, isso também é possível. Dessa forma, você pode estruturar seu código de forma mais adequada para que você ou outras pessoas que possam trabalhar neste jogo possam entender do que se trata o script 19. 19 Clonando nossa rocha: Nosso jogo é meio divertido ou pelo menos mais divertido do que no começo porque introduzimos a aleatoriedade aqui, e essa é a posição aleatória da rocha aqui que o jogo seja um pouco mais difícil de jogar, mas ainda assim, é muito fácil evitar essa pedra aqui Então, do que precisamos? Precisamos de mais pedras, é claro. Então, dessa forma, o jogo será mais difícil. E, claro, poderíamos simplesmente copiar as rochas aqui com o botão direito do mouse no Sprite Dublic, e então temos duas pedras, e poderíamos fazer assim Então, vamos tentar. Então, temos duas pedras e está tudo bem. Então, vamos verificar isso mais uma vez. Então, eles estão mais próximos. Limitamos o intervalo aqui a 100, -102 a 100 positivos Então, vamos colocar isso de volta em Eu acho que foi 220 e depois dois 220 positivos. Então, isso é um pouco melhor, então é mais aleatório. Aqui podemos ver que as rochas estão mais afastadas, o que é melhor. E o jogo está mais difícil agora, porque você tem que evitar duas pedras. E, claro, podemos fazer outro, kit duplo e assim por diante. Então, temos três agora. Eles estão juntos aqui. E aí você também tem o problema. Essas duas rochas estão mais juntas. Mas o problema é que eu troquei esse 220 apenas por esse rock e o primeiro ficou com 100. Então, temos que mudar isso aqui também, menos 222 positivos 220 Vamos começar de novo. Tão bom. Mas você viu o problema. Agora eles estão distribuídos uniformemente aqui, não mais. Mas você vê o problema de que, se fizermos cópias dessas rochas aqui, precisaremos mudar algo mais tarde Temos que fazer isso em cada sprite aqui. Então, se eu tiver que alterar o intervalo aqui, tenho que entrar em cada sprite no código e depois alterá-lo para cada sprite Isso não é muito bom, então precisamos encontrar uma solução melhor aqui. Então, vamos deletar as pedras adicionais aqui. Podemos fazer isso com apenas uma pedra. E como podemos fazer isso? Esse é um método chamado clonagem, e todo fã de Star Wars sabe o que quero dizer, o que é clonagem, é claro, porque em Star Wars, você tem a guerra dos clones, e um clone é uma cópia de uma fonte, digamos, uma entidade Então você tem a entidade de origem e, no nosso caso, é claro que é o sprite Você está fazendo clones dele, então cópias exatas dele Mas essas cópias têm sua própria vida, por assim dizer, e são independentes do clone original Ou da entidade original. Como fazemos isso e como funciona do zero? Selecionamos nossa única pedra aqui. E estamos fazendo cópias ou clones dessa rocha. Então, precisamos ir para o controle. Então aqui temos quando eu começo como um clone e crio um clone de mim mesmo e também excluo esse Então, como isso funciona? Precisamos criar um clone primeiro. Vamos arrastar esse bloco aqui para o Canvas aqui. Então, basta inserir esse clone de criação de mim mesmo aqui logo após clicar em go Ok, vamos verificar como isso afeta nosso jogo. Vamos começar. E agora temos que fazer isso. Mas apenas um funciona conforme esperado e o outro que não está funcionando, está sempre aqui nessa posição. Isso não é suficiente. Temos duas pedras, tudo bem, mas a segunda não está funcionando de alguma forma. Por quê? Porque o que create clone of myself está fazendo é apenas criar um clone neste momento e, depois disso, o resto do código não é executado Aqui começa quando você clica, cria um clone de mim mesmo e, em seguida, o clone é Portanto, esse código não é executado novamente para esse novo clone, mas apenas para o sprite original E somente o sprite original funciona. Portanto, tudo o que vem depois de criar clone é executado apenas para o sprite original, não para o clone. Como podemos corrigir isso? Isso é muito fácil. É para isso que serve esse bloco. Quando eu começo como um clone. De alguma forma, isso é o mesmo de quando G clicou. Mas isso é acionado sempre que é chamado aqui. Criar um clone de mim mesmo acionará isso, mas para o sprite clone, não para o sprite original Como usamos isso aqui? Temos que mover isso para cá. Para este evento, quando eu começo como um clone. Quando clicamos em go, estamos apenas criando um clone de nós mesmos, e isso é executado no sprite clonado Vamos começar. Agora ainda temos uma pedra aqui no topo e ela não está se movendo ou não está descendo para o fundo, mas esta aqui. Na verdade, esse é o clone. Vamos parar com isso. Então esse é o clone, e se eu parar o jogo, o clone desaparecerá e será excluído Somente o sprite original permanece. Portanto, cada clone criado durante o tempo de execução é excluído se eu parar o jogo Dessa forma, você também pode ver que esse sprite em movimento é o clone E, claro, o original está apenas criando um clone, uma cópia de si mesmo, e depois não está fazendo mais nada. É por isso que o sprite original não está fazendo nada. Está apenas sentado lá. E o clone agora está funcionando. Isso é o que nós queremos. Também podemos criar outro clone. Então, basta colocar outro bloco aqui, criar um clone de mim mesmo, então temos dois clones agora ou devemos ter dois clones Vamos começar. E isso está correto. Temos dois clones. E todo clone tem o mesmo script aqui. Se eu mudar alguma coisa aqui , isso mudará para todos os clones. O que não é tão bom é que ainda temos esse sprite original aqui em exibição, que é fácil de corrigir Podemos simplesmente dar uma olhada e depois nos esconder. Basta colocar um esconderijo aqui. Então, quando eu começo como um clone, isso é chamado para cada clone Precisamos mostrar isso. Essa é a primeira coisa que fazemos, mostramos o novo clone, a nova cópia e, em seguida o resto será o mesmo do sprite original Mas o sprite original não está fazendo nada aqui, apenas se escondendo e criando dois clones Portanto, este é um modelo agora. O sprite original é um modelo, que também está oculto para que você não possa vê-lo, e os sprites reais usados no jogo são esses Vamos começar o jogo, e agora temos dois clones, e o sprite original aqui está escondido, mas os clones estão visíveis porque estamos fazendo esse show aqui sempre que um clone Isso é muito bom. Também podemos ter cerca de dez clones aqui. Não tem problema. Podemos simplesmente duplicar isso Clique com o botão direito do mouse aqui no menu de contexto, clique em Duplicar. Você tem quatro clones agora. Vamos começar o jogo novamente com quatro clones. Está ficando mais difícil para o foguete evitar todas as rochas Eles ainda estão na mesma posição y. Não é tão difícil. Você só precisa identificar a lacuna aqui e depois direcionar seu chip de foguete para essa Então, isso ainda é fácil. Mas também podemos tornar isso mais difícil. Mas eu não quero copiar tudo isso, criar um clone de mim mesmo. Eu quero fazer isso em um loop. E isso é algo que não fizemos antes. Temos esse loop eterno, que é claro que é um loop eterno sem parar, mas também há um controle de loop diferente, e então temos essa repetição e várias iterações Podemos repetir, por exemplo, dez vezes. Isso vai acontecer aqui dez vezes. Não precisamos disso, crie blocos de clones aqui. Não é necessário dessa forma, estamos criando dez clones, esse loop é iterado dez vezes Vamos verificar isso. Devemos ter dez clones agora. Isso está correto, e agora é muito, muito difícil, e eu diria que é impossível assim. Portanto, você não tem chance de evitar todos os dez. Talvez agora eu tenha uma chance, então está tudo bem, mas agora fica muito difícil porque talvez não haja nenhuma lacuna entre todas essas rochas aqui. Isso é muito difícil, mas acho que consigo. De qualquer forma, temos dez clones agora, e isso é muito bom porque não duplicamos os sprites, mas criamos clones, e a vantagem é que você não precisa alterar o código em dez sprites aqui, mas você só precisa alterá-lo Por exemplo, se quisermos que todos os clones estejam em uma faixa estreita, podemos simplesmente alterá-la aqui, podemos talvez voltar para essa faixa de -100 100 Todos os clones estão dentro dessa faixa x. Vamos ver como isso se parece. E agora é muito fácil para o foguete evitar os clones, porque você pode simplesmente ir até a fronteira externa Esse não é o problema aqui. Mas veja, você pode alterá-lo para todos os clones aqui. Todos os clones usam o mesmo script, e isso é uma vantagem muito grande O sprite original é usado aqui apenas como um modelo para criar os clones, não mais, e está oculto logo no início, e todos os clones aparecem logo no início quando são criados como De alguma forma, esse é o Wen go click para os clones, semelhante, mas é um evento diferente Aqui eu uso esse clique Wen go, quando o jogo é iniciado para criar todos os clones de que precisamos Esse também é um conceito muito importante, a clonagem, e dessa forma você pode evitar a duplicação de código aqui, que é muito importante, ou por exemplo, se você tiver algo como tiros ou também, por exemplo, temos recursos para pegar não apenas as pedras, mas também alguns objetos que o jogador pode Você também precisa de talvez dez deles, algo assim. Então, isso também pode ser feito muito bem com a clonagem. Se você fizesse isso com essa duplicação de sprites, isso ficaria muito, muito confuso Se você precisar alterar alguma coisa no script, se tiver dez duplicatas de um sprite, é muito chato mudar isso Esse é o caminho a seguir se você tiver objetos semelhantes do mesmo modelo. Nesse caso, são as rochas, os meteoróides, e essa é a maneira de fazer isso aqui Então você tem esse modelo de sprite, que também é definido aqui com os figurinos e os sons, e também com os scripts Esse é o modelo para os clones, e sempre que o clone for criado, você receberá esse evento quando eu começar como um clone, e então o script principal, por exemplo, pode ser E dessa forma, temos dez pedras agora. Mas, é claro, não é muito bom que todas as pedras estejam na mesma posição y o tempo todo. Então, precisamos distribuí-los um pouco, e isso faremos no próximo vídeo. 20. 20 delay aleatório: Este será um pequeno vídeo. Tornaremos o jogo mais interessante introduzindo o atraso. Qual foi o problema ou qual é o problema? Acabei de remover isso aqui novamente porque já introduzi a aleatoriedade, mas vou removê-la por enquanto e mostrar o problema novamente. Cada pedra aqui está mais ou menos na mesma posição y aqui. Então, tudo está começando no topo ao mesmo tempo. É por isso que praticamente não há como contornar essas rochas aqui, exceto nos momentos em que existem algumas lacunas aqui, mas, por exemplo, agora é quase impossível passar por aqui. Como podemos corrigir isso? É muito fácil. Precisamos introduzir um atraso aleatório aqui. Então, eu já preparei isso aqui. Aguarde um número aleatório de segundos e apresentaremos isso no início do script aqui. Quando eu começo como clone, isso espera por um número aleatório de segundos e, em seguida, o movimento começa Podemos colocar isso aqui, ou talvez também possamos colocar isso dentro do loop, ou também podemos colocar isso dentro de reset random x aqui. Vamos colocá-lo aqui. E remonte isso. Cada vez que começamos, ou talvez também devêssemos não mostrá-lo antes desse atraso. O show será aleatório após essa reinicialização. Quando eu começo como um clone, reinicio aleatoriamente, isso espera por um tempo aleatório e depois vai para a posição inicial, que também usará um número aleatório entre -200 Estamos usando essa aleatoriedade aqui duas vezes esperando para redefinir a posição e também para a posição x aqui Vamos tentar começar e aqui podemos ver que isso funciona. Alguns estão na mesma posição y, mas também podemos ver que isso não está totalmente correto aqui, porque tudo está visível aqui ainda na parte inferior. Vamos consertar isso. Por que isso? Porque não estamos escondendo o sprite aqui. Vamos ver a aparência e depois escondê-la logo antes de redefinir o X aleatório. Dessa forma, ela não deve ficar visível na parte inferior Agora ele está desaparecendo na parte inferior e depois, com um atraso aleatório, reaparecendo na Mas esquecemos de mostrá-lo novamente, esse é o problema aqui. Vamos colocar esse show nesse reset aleatório X aqui e depois show e esse w, também é chamado aqui após o atraso. Vamos reiniciá-lo. Então, existem as rochas e depois desaparecem na parte inferior e reaparecem na parte superior com um atraso aleatório Dessa forma, o jogo fica bastante difícil, eu acho, ainda factível Mas também apresentaremos alguns objetos para coletar. Isso será então mais interessante para o jogador, porque o jogador deve coletar os objetos valiosos e evitar as pedras aqui. E isso é, claro, mais difícil. No momento, dez pedras estão bem, eu acho que deveriam estar bem, e agora podemos introduzir nossos recursos valiosos ou talvez ou algo parecido, algo que o jogador possa coletar e talvez vender depois. 21. 21 Como coletar estrelas: Neste vídeo, apresentaremos nossos recursos que o jogador pode coletar, ou seja, são colecionáveis, e estamos implementando-os de forma muito semelhante às pedras A primeira coisa que fazemos é duplicar o sprite das rochas, ou melhor chamá-lo rock porque é apenas uma Então, basta renomeá-lo para rock e clicar com o botão direito do mouse no Sprite Escolha Duplicar e agora temos um segundo sprite do rock. A primeira coisa que fazemos é renomear isso para recurso e agora precisamos trocar a roupa, é claro Certifique-se de ter selecionado o spray de recursos aqui e, em seguida, vá para fantasias. Esse é o traje de rock. Estamos escolhendo um diferente. Então, estamos escolhendo o traje de estrela aqui. Procure por uma estrela, e então você a terá aqui. Agora podemos deletar o primeiro traje, o traje de rock. E agora só temos a fantasia de estrela aqui. Ok. Portanto, temos estrelas e também temos código aqui. O roteiro é exatamente igual ao roteiro de rock. Então, talvez possamos começar isso, e então teremos dez clones aqui da nossa estrela Então faça isso. Talvez não dez, isso é demais. Vamos começar com quatro. E então começamos o jogo. Então, vamos ver. Aí temos um e aí temos 12. Mas não está fazendo nada. Se eu bater neles, não está fazendo nada. Além disso, o que você vê é que todos os clones estão presos aqui na parte inferior Vamos consertar isso. Pare o jogo. Por que eles não estão reiniciando aqui? Porque essa coordenada coy não está correta. Vamos ver, é essa coordenada aqui porque temos que selecionar o recurso, é claro, e ela também está oculta, então precisamos mostrá-la no momento E então podemos arrastá-lo para cá, agora, assim aqui. E então esse é o máximo ou o mínimo y porque se eu tentar fazer com que seja menor do que isso, ele está voltando para -180 Então -180 é o limite aqui, e é isso que precisamos verificar aqui Portanto, não é -180 que precisamos inserir aqui, então é menos 179 porque a posição y deve estar Então, vamos tentar isso e ver se todas as estrelas estão desaparecendo. Ok, então isso parece funcionar Eles estão todos desaparecendo na parte inferior e reaparecendo na parte superior Isso está funcionando. Não podemos coletá-los. Mas é claro que isso é algo que implementaremos. Mas, por enquanto, parece funcionar. Talvez sejam estrelas um pouco demais. Acho que mudamos o script errado aqui. São dez, e aqui, precisamos ter quatro, agora são mais rochas do que estrelas, então isso é melhor. É mais difícil desse jeito. Mas, no final das contas, acho que dez também é demais. Então, vamos colocar sete aqui. Vamos verificar isso novamente. Sim, acho que isso é razoável. Claro, precisamos adicionar o teste de acerto agora. Então, vamos fazer isso. O teste de acerto do chip do foguete para as rochas está aqui, mas não podemos o teste de acerto das estrelas aqui também porque precisamos esconder o recurso aqui e redefinir sua posição quando o foguete o atingir Então, isso não é nada que possamos fazer aqui porque, a partir daqui, não podemos fazer o recurso desaparecer, a estrela desaparecer. Então, o que temos que fazer é fazer a mesma coisa, ou quase a mesma coisa que estamos fazendo aqui. Então, se estiver tocando uma rocha, precisa estar no recurso aqui Então, vamos ao chip de foguete sensível ao toque. Então, tocando no chip do foguete, e agora temos que inserir um se estiver Se tocar no chip do foguete. Essa é a condição que precisamos verificar. Então eu toco no chip do foguete, e isso é algo que temos que fazer, temos que colocar o Fevepe aqui no Vamos fazer isso se tocarmos no chip do foguete, então podemos, é claro, escondê-lo Então, vamos escondê-lo e testá-lo novamente. Se a estrela estiver atingindo ou tocando o foguete , ela deve desaparecer, e isso parece funcionar. Mas o problema é. Depois de acertar, não ganho pontos por isso, é claro, porque não estamos contando nada aqui. Vamos fazer isso então. O que precisamos para contar os recursos? É claro que precisamos de uma variável, então vamos às variáveis, criamos uma variável e a chamamos de recursos. E isso pode ser para todos os sprites. Agora temos recursos, e eu coloquei isso aqui do outro lado da tela. Se atingirmos o foguete, os recursos precisam aumentar, podemos configurá-lo para mais um, então basta mudar. Depois dessa altura, podemos alterar os recursos em um Lembre-se de que o chip do foguete, se atingir uma rocha, alteramos os reparos deixados por menos um, então está diminuindo, e aqui estamos aumentando os recursos Vamos tentar isso. E aí está a primeira estrela. Sim, e funciona. Recursos é um recurso coletado e agora temos dois, três, 45 e assim por diante. Isso parece funcionar e acho que é bem fácil. Talvez devêssemos aumentar o número de pedras aqui novamente. Isso talvez seja muito fácil. Ok, vamos fazer isso. O número de pedras está aqui, repita sete vezes, então talvez nove vezes estaria bem. Agora fica mais difícil. Claro, um acidente. Primeiro acidente, e vamos ver. Há uma estrela. Este está fora de alcance, mas eu entendo esse, então eu tenho 21 estrelas. Claro, esquecemos alguma coisa. Esquecemos de redefinir essa variável aqui. Vamos fazer esse conjunto, e vamos fazer isso aqui no início, quando clica em recursos até zero. Estamos começando com zero recursos e três reparos. E eu tenho quatro agora. Não consigo chegar a cinco, e assim por diante. Ainda não é muito difícil, mas às vezes é muito próximo. Eu acho que está tudo bem. Temos um sistema de recursos em funcionamento, para que o jogador possa coletar com a nave espacial, as estrelas e os recursos variáveis estão contando progressivamente e o que podemos fazer com as Decidimos mais tarde, talvez possamos comprar upgrades para nossa nave estelar aqui, ou talvez possamos comprar reparos para ela, para que tenhamos mais vidas do que algo assim Mas, por enquanto, coletar recursos funciona, e isso é muito bom. Isso é quase um jogo. Então você já pode ver o quão bom o jogador é observando os recursos que ele coletou. 22. 22 Aterrando em um planeta: Agora que o jogador pode coletar recursos, colete estrelas. Precisamos de uma oportunidade para o jogador vender esses recursos e receber algo em troca, por exemplo, um upgrade para a nave espacial ou outro reparo, ou seja, outra vida, por assim dizer E isso faremos com planetas, para que o jogador possa pousar em planetas. Então, temos que adicionar outro sprite aqui, semelhante às estrelas, semelhante às rochas Então, basta copiar aqui nosso sprite de recursos, então clique com o botão direito no recurso Duplicate E então trocamos o traje, então vamos até os trajes, escolhemos um traje e entramos no planeta, e temos essa terra aqui. Mas vamos pegar esse planeta dois aqui. E agora podemos apagar a primeira fantasia aqui. Não precisamos mais disso. E então vamos para o código. E aqui podemos querer mudar isso aqui, talvez repetir quatro vezes. Então, precisamos de quatro planetas? Eu acho que não. Talvez possamos fazer com dois planetas aqui. Então o jogador tem que tocar, tem que colidir com um planeta, e então será automaticamente uma aterrissagem neste planeta Também precisamos mudar o pano de fundo aqui. Então, no momento, temos apenas esse pano de fundo branco vazio e adicionaremos outro Então escolha um pano de fundo. E então podemos procurar uma cidade aqui, e talvez peguemos esse metrô. Então, espero que isso pareça um pouco futurista aqui. E o problema agora, no momento, é que você não consegue ver isso. Então, temos esses dois sprites de fundo aqui, é claro. Se os movermos, você pode ver que existe, de fato, o pano de fundo, o novo pano de fundo Mas se começarmos o jogo, você simplesmente não o verá. E aí temos nosso planeta, o primeiro planeta, e isso é o mesmo que um recurso no momento. Então, esse é exatamente o mesmo código, então também aumentará os recursos aqui. Mas não é isso que queremos. Queremos outra coisa. Temos que esconder esses dois cenários para ver o verdadeiro pano de fundo aqui Então esse é o primeiro sprint em segundo plano e o segundo, e precisamos escondê-los. Como escondemos os sprites de fundo? Selecionamos o primeiro aqui. O que faremos é entrar nesse ciclo eterno aqui. E vamos embrulhá-lo com uma condição. Desta vez, não usaremos a condição normal se houver, mas vamos até os controles aqui e, em seguida, adotamos a condição “se não for o caso ”. Então arraste isso até aqui. Então, temos quase o mesmo que aqui, mas temos esse outro caso. E esse outro caso será executado se essa condição aqui no primeiro não for cumprida. Então, vamos colocar o primeiro bloco aqui, esse que estava no formato evlope Vamos colocar isso aqui no primeiro if. Então, se alguma coisa, precisamos inventar esses dois, é claro, e então fazer isso. E se algo não for cumprido, ou seja, se não essa condição aqui, então faremos isso de outra forma. Vamos pensar em que condição precisamos aqui? Vou usar uma variável global aqui. Já usamos variáveis antes, então você deve estar familiarizado com isso. Eu crio uma variável aqui, e para todos os sprites, isso é muito importante porque todos os sprites precisam da variável, precisam do eixo da variável, e vamos chamá-la de viagem parada A viagem pelo espaço será interrompida se isso for verdade, mas veremos como isso se parece. parada de viagem no momento é zero, como você pode ver aqui porque a estamos exibindo. Mas não é isso que queremos. Não vamos mostrar isso no final, então vamos adiar isso. Agora precisamos verificar se a viagem parou aqui com uma operadora. Vamos verificar a igualdade aqui, pegar esta e arrastá-la nesta condição if. E então vamos para as variáveis e arrastamos nossa variável de parada de viagem aqui. Então, eu viajo, a parada é igual a zero, que é o valor inicial, depois faço as coisas que fizemos antes no forevelope, e então precisamos fazer outra coisa E isso é que podemos esconder o sprite. Então, vamos fazer isso. Se a viagem interrompida não for zero, esconderemos o sprite aqui Agora podemos colocar esse bloco aqui de volta dentro do loop eterno, e não haverá mudança, é claro, porque sempre estaremos neste caso aqui se a parada de viagem for igual a zero porque esse é o valor inicial da variável e a variável não está alterada no momento OK. Então, nada ganhou no momento. Mas faremos isso se atingirmos o recurso dois e, a propósito, devemos renomeá-lo para planeta Então faça isso agora. Então, temos o planeta aqui. E se atingirmos o planeta ou se o planeta atingir o foguete, no momento isso é esconder-se e depois trocar os recursos por um Vamos deixar esse esconderijo aqui. Mas livre-se dos recursos de mudança por um, porque isso não é uma estrela, é um planeta, e isso deve esconder o fundo, sprite aqui ou os dois. Aqui, precisamos definir essa variável de parada de viagem. Então vá para variáveis e escolha este bloco, defina, repare, à esquerda. Mudamos isso para parar de viajar e colocamos isso aqui depois do esconderijo. Então, defina a parada de viagem dois, um. Por exemplo, qualquer outra coisa, exceto zero, faremos aqui. Então, se a nave estelar, se o foguete atingir o planeta , a parada de viagem será definida como 1, e isso fará com que ela , a parada de viagem será definida como 1, falhe Então, se estivermos dentro do for evepe, chegaremos a esse ponto em que o if é verificado Portanto, se a parada de viagem for igual a zero, isso não será mais verdade e passará para esse outro caso Vamos tentar isso. E vamos ver quando o primeiro planeta chega, lá está, e vemos que está funcionando. Claro, está apenas escondendo o primeiro, o plano de fundo aqui. Precisamos duplicar esse bloco aqui. Precisamos colocar algo no segundo plano de fundo. Vamos fazer isso, vá para o controle, e temos isso se então, e colocamos esse bloco dentro do if then, e então podemos copiar essa condição aqui. I. Esse, arraste isso para fora. Ele voltará, mas arraste-o aqui para o segundo plano, solte-o e, em seguida, ele retornará ao local anterior, e agora o temos aqui. Então, podemos arrastar isso aqui para o if then. Agora temos que se a parada de viagem é igual a zero, então fazemos o que fizemos antes, caso contrário, também podemos esconder o sprite Caso contrário, esconda o sprite. Coloque isso de volta no Fp e agora os dois fundos devem desaparecer Então, vamos fazer isso de novo, e vemos que o problema aqui é que os planos de fundo não são mais exibidos porque não os mostramos quando clicamos em go Vamos fazer isso. Arraste esse show aqui. E também no segundo sprint, arraste o show até aqui, e agora ele deve funcionar novamente. Então vá. Por que não está funcionando? Porque paramos de viajar. Se pudermos exibir, você verá que a parada de viagem é uma e não mais zero , porque o script aqui a definiu como zero e ela não será redefinida. Automaticamente, temos que fazer isso. Já que estamos fazendo isso aqui, talvez também possamos fazer isso aqui na redefinição Então, basta definir a parada de viagem 20 ao clicar em Go e agora temos nosso plano de fundo novamente. E então temos o planeta, vamos ver. Ok, agora vemos o fundo aqui, essa queda de cinta aqui Mas um problema permanece ou vários problemas aqui porque tudo ainda está se movendo, exceto os planos de fundo Mas as rochas inteiras e as estrelas, tudo ainda está se movendo. Então, precisamos aplicar também essa lógica aqui. O se mais. Não, onde a temos aqui, se a parada de viagem for igual a zero s para os outros sprites Então, vamos fazer isso, vá para o rock. E então aqui temos o feverop, o loop do jogo. Então, vamos pegar nosso se mais aqui. Podemos arrastar isso para dentro do if then. E então também podemos arrastar isso aqui e copiá-lo para a rocha, e vamos até a rocha novamente, e então colocamos essa parada de viagem igual a zero aqui na condição if E no bloco S, vamos esconder o sprite aqui Em seguida, colocaremos isso de volta no loop eterno. Então, agora as rochas devem estar todas invisíveis aqui. Vamos tentar isso. Talvez tenhamos o planeta chegando, aí está, e você vê que as rochas desapareceram. O planeta também precisa desaparecer, e também as estrelas, é claro. Vamos até as estrelas e fazemos a mesma coisa aqui, caso contrário, pegue isso e coloque aqui no caso n, e também copiamos essa condição aqui para o recurso. Use-o aqui e depois esconda o sprite no outro caso. Ok, coloque de volta no For Evo. O que falta é planeta. Então, fazemos o mesmo aqui. Se mais. E então arrastamos essa condição aqui para o nosso planeta. Coloque isso na condição if. E então esse bloco irá para o caso “então” e, no caso “outro”, esconderemos tudo. OK. Agora vamos tentar isso e vamos esconder a variável aqui. Ravel, pare. Não precisamos que isso seja exibido. Vamos tentar isso. Oh, existe um planeta. Mas fizemos algo errado. Claro, fizemos algo errado. Não colocamos tudo isso no Favepe. Vamos fazer isso de novo. E aí temos um planeta. E agora temos o foguete. Ainda assim, é claro, o foguete talvez também desapareça, porque aqui neste planeta, ele pousou, então não deve ser movido pelo jogador, e o jogador deve fazer outra O jogador deve negociar os recursos aqui. Então, vamos fazer isso para que o foguete também controle, se for o caso. E tudo que está dentro. O loop eterno será movido aqui no caso n, e esse é um bloco muito longo aqui, e obtemos a condição a partir daqui, talvez não importe porque é o mesmo, mas é apenas mais rápido dessa forma. Aqui está. Coloque isso aqui. Já podemos colocá-lo no circuito eterno novamente e, no outro caso, escondemos a nave. E então vamos tentar isso. E há um planeta, mas há um segundo planeta, e vamos pegar este. E agora tudo acabou, nada mais, apenas o pano de fundo aqui, e é isso que queríamos Então, nada será feito aqui. Esse loop eterno se repetirá para sempre e sempre ocultará os sprites Cada sprite aqui está escondido nesse loop, e talvez devêssemos colocar outra coisa aqui no else porque agora tudo está girando e se escondendo, e também podemos economizar um pouco de recursos, os ciclos da CPU, se esperarmos Então, podemos esperar, vamos esperar por 1 segundo aqui. Então, tudo está dentro desse loop eterno, e ele se esconderá e esperará por 1 segundo. E nesse 1 segundo, a CPU desse prise, pelo menos, está ociosa Então eu acho que é uma boa ideia. Vamos fazer isso em cada primavera. Economizaremos alguns ciclos de CPU aqui, economizaremos um pouco de desempenho aqui. Então, em cada um dos outros, esperamos por 1 segundo. Mas é claro que, se reiniciarmos a viagem pelo espaço, haverá um atraso de máximo 1 segundo, porque provavelmente estará em estado de espera aqui se voltarmos, e se mudarmos a parada de viagem para zero novamente, os sprites estarão ou alguns dos sprites, pelo menos estarão esperando Portanto, haverá um pequeno atraso máximo de 1 segundo. OK. Então aqui está o último, eu acho. Vamos esperar 1 segundo aqui. Ok, agora temos em cada sprite a espera de 1 segundo, então isso será fácil para a CPU Agora podemos pousar em um planeta. Tudo está parado e escondido, e aqui podemos implementar nosso comércio. 23. 23 Como refatorar o roteiro do foguete: Antes de fazermos a negociação aqui, quero fazer algumas refatorações Refatorar é reestruturar seu código para torná-lo mais legível e mais fácil manter Se olharmos esse script aqui, esse bloco dentro do circuito for do foguete, você pode ver que é um pouco longo demais e não é muito compreensível você pode ver que é um pouco longo demais e não é , não é muito compreensível Então, o que podemos extrair aqui? Então, eu diria que vamos extrair isso aqui. Então, o exterior, se for, deixamos como está, e isso aqui, podemos separar em duas partes. primeira parte é se tecla para cima for pressionada e as teclas inteiras aqui, e a segunda parte é aqui se estiver tocando na rocha Então, nós os separamos assim. Nós rasgamos isso aqui e separamos essas duas partes desse longo bloco aqui, dentro dele se a parada de viagem for igual E estamos criando dois blocos para essas duas partes aqui. O primeiro bloco seria a parte de controle do jogador. Esta parte verifica se há teclas que são pressionadas e, em seguida, controlam a nave espacial Vamos chamar esse jogador de controle e clicar. Agora temos esse bloco definido aqui, e basta arrastar essa primeira parte aqui até essa definição. Estamos definindo o controle do jogador com esses quatro ses aqui. Todos esses ses verificam se há uma tecla, e a tecla de seta, se ela for pressionada e, em seguida, alterando x ou alterando, y. Ok, então a segunda parte é esta aqui sobre a condição no caso de a nave espacial bater em uma rocha, e isso é o que chamamos de bloco, pressionada e, em seguida, alterando x ou alterando, y. Ok, então a segunda parte é esta aqui sobre a condição no caso de a nave espacial bater em uma rocha, e isso é o que chamamos de bloco, também teste de acerto, ou talvez vamos chamar de teste de impacto de rocha Então, aqui temos essa definição para o teste rochoso, e vamos arrastá-la até aqui Então, temos essas duas funções, ou esses dois blocos, procedimentos, como você possa chamá-los. Aqui no zero, eles são chamados de blocos personalizados ou blocos M. E agora precisamos chamar esses dois blocos aqui em nosso loop eterno em nossa parada de viagem I igual a zero. Vamos colocar isso aqui. O jogador controla o primeiro teste rochoso depois disso. E agora o jogo deve funcionar como antes. Vamos tentar isso. Aqui temos o controle funcionando, e também podemos, eu atingi o planeta. Então, vamos tentar novamente. Eu quero bater em uma pedra para poder ver o acidente. E também havia um planeta. É por isso que estamos aqui na cidade. Então, vamos tentar de novo. Basta bater em uma pedra aqui. Ok. Aí está. Tudo funcionando da mesma forma que antes. E essa é, obviamente, também a vantagem da refatoração ou a exigência de refatoração : a funcionalidade deve ser a mesma de antes funcionalidade deve ser a Então, aqui estamos apenas substituindo essas duas partes desse bloco longo por dois blocos personalizados aqui. E estamos apenas ligando para eles aqui. E talvez também devêssemos escrever isso com P maiúsculo aqui para torná-lo igual ao teste de impacto na rocha. Então é disso que trata a refatoração. Você não está alterando a funcionalidade, não está mudando a forma como ela funciona, mas está mudando a estrutura e tornando-a mais legível, tornando-a mais sustentável O que quero dizer com sustentável? Então você pode ver aqui que esses são dois blocos com funcionalidades separadas. Aqui está o controle do jogador e aqui está o teste de impacto. Alguém que não esteja familiarizado com o código, ou talvez você mesmo, que talvez não esteja mais familiarizado com o código porque talvez tenha mudado alguma coisa aqui há um mês . Então, agora você não tem certeza de como esse código funciona. Mas se você fizer isso dessa forma, separando o código em seu próprio bloco personalizado e chamando esses blocos aqui, poderá mantê-lo melhor, significa que você poderá localizar melhor o código que precisa ser alterado ou estendido. E então você também pode entender o código que está lá. Então, aqui eu posso ver imediatamente que esse é o controle do jogador, e esse é o teste de sucesso. Portanto, é muito fácil, por exemplo, colocar outra chave aqui neste bloco de controle do player. Então eu teclo, digamos, pressiono o espaço, depois disparo algo como um feixe de laser ou algo assim. Portanto, isso pode ser estendido aqui. Neste bloco personalizado, e para o teste de foguete, você pode querer testar outra coisa, não apenas a rocha, e então você precisa renomeá-la, é claro, ou definir outro bloco Por exemplo, podemos testar outro obstáculo, sei lá, talvez um buraco negro, algo assim, e então você pode definir outro teste de acerto de buraco negro, ou você pode colocá-lo aqui dentro desse teste de foguete e renomeá-lo para Just hit test, por exemplo, isso será uma opção, ou você tem Um para a rocha atingida, um para o buraco negro, teste de impacto, que você pode decidir. Mas a vantagem da refatoração dessa refatoração aqui é que ela é muito mais legível aqui Você pode ver qual bloco faz o quê? Porque você pode nomeá-los e também encontrar mais facilmente o local onde você precisa fazer alterações. Ok, então essa é a nossa primeira refatoração ou não a Já usamos os blocos personalizados. Então, se formos até a rocha em si, também temos esse reset aleatório, e isso também é um tipo de refatoração, porque tínhamos isso antes, aqui dentro dessa longa lista de blocos, e o refatoramos porque tínhamos isso antes, aqui dentro dessa , por assim dizer, nesse bloco e o chamamos aqui de reset aleatório x. E também quando eu começo como clone, reiniciamos o X aleatório. Então isso também foi refatoração, Então isso também foi também temos esse reset aleatório, e isso também é um tipo de refatoração, porque tínhamos isso antes, aqui dentro dessa longa lista de blocos, e o refatoramos, por assim dizer, nesse bloco e o chamamos aqui de reset aleatório x. E também quando eu começo como clone, reiniciamos o X aleatório. Então isso também foi refatoração, mas aqui está mais explícito. Eu já anunciei isso antes. Estamos fazendo uma refatoração e não estamos alterando a funcionalidade aqui ainda é a mesma de antes, mas aqui temos um código mais legível e um código mais extensível 24. 24 Mudando de cenário: Mais uma preparação antes de entrarmos na tela de negociação. Vamos dar uma olhada novamente nos cenários. Até agora, adicionamos apenas um pano de fundo, e isso foi definido se selecionarmos aqui, o palco, então teremos os cenários Adicionamos o metrô, e já tínhamos esse de pano de fundo, que é o primeiro Teoricamente, poderíamos simplesmente excluir isso porque só precisamos de um no momento, mas quero demonstrar aqui como alternar entre os cenários Nós fazemos este primeiro talvez em uma cor como, vamos fazer isso, talvez completamente preto. Defina o brilho para zero aqui, e então teremos um preenchimento de preto. Use esse retângulo com preto assim mesmo aqui. Vamos apenas estender esse retângulo aqui com o mouse e temos o pano de fundo. OK. Então esse é nosso primeiro cenário, então precisamos configurá-lo também Então, vamos colocar isso no código do foguete. Quando a bandeira é clicada, quando clicar em Go, precisamos trocar o pano de fundo, e isso está aqui em Looks, então você pode trocar a roupa do sprite aqui, mas também pode trocar o mas também pode Então, vamos fazer isso, alternar o segundo plano de fundo, depois o pano de fundo um, também podemos renomeá-lo, mas vamos deixar assim O pano de fundo de fundo é o preto. Então temos isso, e agora o problema é por que não vemos nada se, quando iniciamos um jogo, eu coloquei algo aqui no planeta para interromper a viagem em um, para que aqui no planeta para interromper a viagem em um, eu possa pular toda a viagem pelo palco espacial e então ir diretamente para esta tela aqui porque queremos implementar essa tela a seguir Então é por isso que eu coloquei esse atalho aqui. Definindo a viagem como parada para um no início, aqui no início, vamos simplesmente pular para esse estado aqui, que é o mesmo que se o chip do foguete atingisse um planeta Mas vou deixar assim por enquanto. Vamos voltar ao chip do foguete, então eu troco o pano de fundo dois, o pano de fundo um, ou também posso mudar o pano de fundo para É o mesmo. Então, dependendo do que eu escolher aqui, esse será nosso pano de fundo inicial, seja o preto ou o metrô Então é assim que você pode mudar para um cenário diferente. E isso também é o que devemos fazer no início, mudar para esse pano de fundo aqui E então, se atingirmos um planeta, ele estará aqui. Então, se tocarmos o chip do foguete no planeta sprite, então escondemos o sprite do planeta, é claro, e então paramos a viagem dois E também temos que mudar para esse metrô de fundo aqui Além disso, se quisermos ver esse pano de fundo, também devemos configurá-lo aqui porque eu adicionei esse atalho aqui, posso retirá-lo por enquanto, então veremos, eu tenho que colocá-lo de volta e configurá-lo como zero Claro, caso contrário, ele permanecerá em um. Agora temos o mesmo comportamento aqui e, se atingirmos um planeta, vamos para esse cenário aqui E também todo o resto está parado. É assim que você muda os cenários. Você também pode alterar ou mudar para o próximo pano de fundo aqui com este bloco Isso também é possível. Você pode ter uma animação de cenários, isso também é possível Mas o que você não pode fazer é não mover o plano de fundo. Mova o pano de fundo. É por isso que criamos esses dois sprites aqui, para um pano de fundo em movimento e um fundo em movimento O palco aqui, os cenários do palco não são móveis É por isso que você não tem nada em movimento aqui se selecionar o palco e pode alterar os cenários Por assim dizer, troque as roupas do cenário com esses blocos aqui Mude o pano de fundo para o metrô e o peso também é uma possibilidade e também o próximo cenário Usamos esse único switch, o segundo pano de fundo e, em seguida, um pano de fundo específico Por que temos esse segundo pano de fundo do Switch e esperamos? Isso ocorre porque também há um evento quando o pano de fundo muda dois, e esse bloco aqui está esperando por cada script que é acionado por essa troca do plano de fundo Vamos ver aqui em eventos, quando o pano de fundo muda para, digamos, metro, então também podemos executar um script aqui, blocos aqui embaixo Que aqui vamos esperar esses scripts terminem e depois continuaremos aqui. Terei um comportamento semelhante se considerarmos este ano, quando eu receber uma mensagem, mas não usaremos mensagens por enquanto, então é por isso que não vou entrar em mais detalhes aqui. Só que você sabe que isso também aguardará cada script que estiver aqui embaixo, quando o plano de fundo for ativado, e esperará antes de continuar e esperará antes Estes são os blocos de fundo aqui e podemos alternar entre os cenários No momento, isso não faz muito sentido porque estamos começando com essa mudança para a metropolitana, mas você não pode ver o primeiro cenário de qualquer maneira porque criamos nossos próprios sprites de fundo Pode ser outra coisa. Poderíamos simplesmente fazer nossas fantasias aqui nos sprites sem isso Digamos que simplesmente não teríamos esse retângulo preto aqui, então podemos nos livrar dele Agora só temos esses círculos aqui e os mesmos aqui. Podemos selecionar o retângulo excluído ou pressionar delete aqui, botão delete E agora ainda temos o fundo preto. Então isso é porque temos esse pano de fundo nessa cor aqui Nós mudaríamos essa cor. Então, vamos mudar a cor aqui. Vamos torná-lo vermelho. Vamos ver como isso funciona. Agora temos um pano de fundo vermelho, e as estrelas, esses pontos aqui, esses círculos ainda são brancos, mas com a linha preta aqui no Também podemos nos livrar disso, mas não vou fazer isso aqui porque no espaço, geralmente é preto, então vamos colocá-lo em preto novamente. Agora temos o mesmo. Mas dessa forma, é importante trocarmos fundo se atingirmos um planeta aqui Se o jogador atingir um planeta , o pano de fundo será alterado para a cidade para que possamos ter diferentes cenários nos quais o jogo acontece No próximo vídeo, vamos realmente negociar. 25. 25 reparos de compra: Ok, vamos implementar a negociação, para que o jogador possa negociar, vender os recursos e obter, por exemplo, a primeira coisa que queremos implementar é obter um reparo em um reparo adicional aqui. No início, o jogador faz três reparos e, em seguida, pode coletar recursos e trocá-los para obter mais um reparo. Para isso, precisamos de um botão, então vamos criar um novo sprite aqui Clique aqui, escolha um sprite, e aqui no campo de pesquisa, você pode inserir um botão e, em seguida, você tem alguns botões aqui. Eu vou pegar esse. Você também pode pegar este. Isso realmente não importa, mas você deve considerar ter um pouco de espaço dentro do botão para exibir um texto dentro dele. Vou escolher este e aqui está e podemos ir até as fantasias aqui e inserir um texto. Vamos fazer isso, escolha essa ferramenta de texto aqui e clique onde o texto deveria estar. Em seguida, entramos no meu reparo. Também podemos alterar a cor da fonte aqui para preto. Vamos fazer isso com a cor preta, e é um pouco grande demais aqui. Vamos torná-lo menor. Você pode arrastar esse canto aqui e torná-lo menor. Algo parecido com isso. Também podemos colocar outro texto aqui informando quanto isso custará Digamos que cinco recursos sejam o preço. Vamos fazer esses dois menores, colocá-los em algum lugar aqui. Sim, acho que está tudo bem. Se quiser, você pode alterar a cor de fundo aqui, selecione a seta aqui. Este e este podem ser alterados aqui, então você também pode escolher uma cor sólida aqui. Não é um gradiente. Isso é um gradiente. Isso é sólido e também é um gradiente de cima para baixo, e esse é um gradiente circular Então, como você quiser, vou escolher uma cor de fundo sólida aqui. Sim, acho que deveria ser algo muito brilhante para ter contraste. Eu acho que está tudo bem. E agora podemos colocar o sprite em algum lugar Talvez aqui, e talvez a borda deva ter uma cor diferente. Vamos escolher sólido, algum tipo de azul, talvez, talvez um pouco mais claro. Eu acho que está tudo bem. Além disso, vamos deixar assim. Também podemos apagar este ano. Não precisamos da segunda fantasia aqui para o botão. Agora temos o botão e agora precisamos, é claro, exibi-lo no momento em que é exibido, e isso não é bom porque, quando iniciamos o jogo, ele não deveria estar lá. Então, vamos para o código e, em seguida, para os eventos, quando clicamos , precisamos ocultá-lo Então, isso é baixo, é claro. E agora está escondido quando começamos o jogo. Claro, ele deve ser exibido quando vamos a esta cidade aqui neste planeta, e agora ele deve ser exibido. Como fazemos isso? Poderíamos fazer um loop aqui, também um loop eterno e verificar, por exemplo, se essa viagem parou. Mas não é necessário ter um loop eterno aqui. Há um mecanismo diferente que podemos usar aqui, e isso é sobre mensagens. No zero, você pode enviar mensagens de um sprite para outros sprites para todos os outros sprites, e você pode ter mensagens diferentes, e isso está em A partir daqui, quando eu receber a mensagem um, transmita a mensagem um, transmita a mensagem um e espere. Esses três blocos aqui são sobre mensagens, e isso é importante aqui porque é uma maneira muito boa de enviar uma mensagem para outros objetos no jogo. Que mensagem queremos enviar? Queremos enviar a mensagem de que a tela de negociação aqui deve ser exibida. No momento, acabamos de desaparecer todos os sprites de todas essas rochas planetárias de foguetes, implementados com isso para evepe e com essa verificação implementados com isso para evepe e com essa e com essa Mas também poderíamos fazer isso, é claro, para este novo sprite para este sprite de botão e verificar viagem. Se a parada de viagem for uma, podemos mostrar o sprite, mas há uma maneira muito mais fácil, na minha opinião, de usar o mecanismo de mensagem Precisamos enviar uma mensagem se a tela de negociação deve ser exibida e também, em seguida, o botão deve ser exibido. Então, aqui estamos configurando a parada de viagem para um, e isso faz com que todos os outros sprites aqui desapareçam, exceto o botão Aqui, exatamente neste caso, aqui, neste caso, se antes ou depois de definir a parada de viagem como uma, podemos transmitir uma mensagem. Transmitir uma mensagem significa que podemos simplesmente enviar uma mensagem para todos os outros sprites E se um sprite como o botão, por exemplo, quiser receber uma mensagem , podemos usar esse bloco quando eu receber a primeira mensagem Não quero usar a mensagem um porque o nome não é muito bom Vamos criar outra mensagem. É muito fácil. Clique aqui nesta lista suspensa nesta seta e depois na nova mensagem. Vamos chamá-lo de mostrar tela de negociação. Esse é o nome da mensagem, e então podemos colocá-la aqui depois de Definir parada de viagem como uma. Cada vez que o foguete atinge o planeta, estamos definindo a parada da viagem para uma, e estamos transmitindo esta mensagem aqui Agora, no botão, podemos ter esse bloco aqui, quando eu receber, não a mensagem um, mas mostrar a tela de negociação. Esses são os eventos. Quando recebo esta mensagem na tela de exibição de negociação , posso mostrar o sprite com muita facilidade Quando clicar em go, o sprite fica oculto. Quando essa mensagem é recebida , o sprite é exibido Você também pode clicar nesses blocos aqui e executá-los sempre que clicar neles. Então, quando eu clico aqui, ele fica oculto. Quando eu clico aqui, ele é exibido. Então esse foi um bom teste, mas vamos testá-lo no jogo. Então, aqui temos nosso foguete, e precisamos encontrar um planeta Há um, e aí você tem o botão também. Ok, vamos renomear o botão para comprar o reparo. Então, dessa forma, podemos identificar melhor o botão aqui nesta lista. Agora temos esse botão, e o que fazemos com o botão? Obviamente, o jogador precisa clicar no botão. E então os reparos restantes serão aumentados em um e os recursos serão reduzidos em cinco. Portanto, cada reparo custa cinco recursos. Vamos implementar isso. Primeiro, precisamos de outro evento, quando esse botão é clicado Vamos aos eventos quando a primavera clicar. Aqui está. Se o jogador clicar nesse botão, precisaremos aumentar os reparos, incrementar os reparos em um e diminuir os recursos Vamos fazer isso aqui em variáveis. Podemos fazer isso, trocar os reparos deixados por um. Isso aumentará os reparos em um, incrementalmente. E então precisamos diminuir, é claro, os recursos porque o jogador tem que pagar por isso. Portanto, altere os recursos em menos cinco, para que diminuamos os recursos Então, vamos tentar isso no jogo. Novamente, eu reinicio o jogo. E espero que haja um planeta lá. E então eu clico neste botão aqui e vemos que os reparos restantes agora são quatro eram três, quatro, e os recursos são menos cinco Então, menos cinco não é bom porque você está em dívida, mas não é assim que funciona aqui Você precisa ter os recursos para comprar o reparo. Então, temos que verificar se isso é possível, se o jogador tem recursos suficientes. Vamos controlar se e vamos pegar esse bloco se for então bloco e colocá-lo ao redor desses dois blocos aqui. Dessa forma, esses dois blocos estarão no caso “if then”. Assim. No outro caso, o que podemos fazer no outro caso? Podemos dizer alguma coisa. T's unders, diga olá, nós mudamos o olá. Você não tem recursos suficientes. Por 2 segundos, talvez isso seja suficiente. Agora precisamos da condição aqui. As condições estão sob os operadores. Precisamos verificar se o número de recursos é mínimo de cinco. Vamos verificar se há mais do que variáveis e, em seguida, recursos. Se os recursos forem maiores que quatro, cinco em cinco ou mais , podemos simplesmente comprar o reparo ou o jogador pode comprar o reparo. Se esse não for o caso, dizemos que você não tem recursos suficientes. Como alternativa, você também pode usar isso menos de. Vamos fazer isso também. Se os recursos forem menores que cinco, isso significa quatro ou menos, então podemos dizer, vamos trocar isso, prolongar isso. Coloque isso e agora precisamos trocar esses dois. Se os recursos forem menores que cinco, digamos você não tem o suficiente, precisamos separar esses dois, você não tem o suficiente e, no caso. Nós fazemos o comércio. Então você pode fazer assim ou o contrário. A vantagem aqui é que você tem os cinco, e aqui você também tem os cinco, então é muito mais fácil. Aqui, você deve subtrair um do preço e aqui você pode usar o preço diretamente Para que você possa fazer realmente o que quiser. Também podemos definir outra variável para o preço e, em seguida, substituí-la pela variável. Nós fazemos isso? Isso faremos no próximo vídeo. Mas agora vamos tentar no jogo se isso realmente funcionar. Não estou coletando nenhum recurso, então meus recursos são zero agora, não o suficiente, devemos entender isso, você não tem recursos suficientes. Agora vou coletar alguns. Vamos coletar cinco. Dois, três Agora temos cinco, e agora precisamos de um planeta. Aí está. Então, temos exatamente cinco, e depois da compra, devemos ter zero, e funciona, e os reparos restantes são quatro agora. Então isso parece funcionar. Portanto, você precisa de um mínimo de cinco aqui para comprar o reparo. E, claro, se você tiver dez, também poderá pressionar o botão duas vezes como jogador e depois fazer dois reparos, então é fácil. Então, no próximo vídeo, teremos uma variável de preço aqui, um preço para o reparo. E então vamos usá-lo neste lugar aqui neste local, e também neste, é claro, e dessa forma podemos usar mais um operador aqui. 26. 26 Variando o preço aleatoriamente: Queremos substituir esse valor constante aqui de cinco. Esse é o preço do reparo, portanto, cinco recursos para um reparo com uma variável. Então, vamos às variáveis, criar uma variável, é claro, e desta vez podemos configurá-la apenas para esse conjunto, configurá-la apenas para esse conjunto, porque os outros sprites não precisarão dela porque esse é o botão de compra, e somente o botão de compra saber o preço no momento, então a tornamos uma variável local aqui então a tornamos uma variável local Então, vamos chamá-lo de preço de reparo, e apenas para esse sprite E agora podemos usá-lo aqui dentro deste sprite de botões. E, por exemplo, você não pode usá-lo aqui neste sprite do planeta porque não está disponível aqui em variáveis Só agora está disponível aqui neste sprite do botão de reparo Então aqui está, o preço do reparo, e precisamos ajustá-lo ao preço. Então, digamos que toda vez que mostramos a tela de negociação. Portanto, quando recebermos esta mensagem, mostre a tela de negociação, podemos definir o preço aqui para que talvez na próxima vez que mostrarmos o fluxo de negociação, o preço possa ser diferente. Mas vamos configurá-lo para cinco. Por enquanto. Então, definimos o preço do reparo em 55 recursos dos quais podemos nos livrar. E agora podemos usar essa variável aqui. E em vez de usar esse cinco aqui e esse cinco ali, isso menos cinco, agora podemos usar a variável Então, vamos arrastá-lo novamente. Aqui. Portanto, se o número de recursos for menor que o preço do reparo, o jogador não tem recursos suficientes, então essa mensagem será exibida. E agora precisamos, no outro caso, diminuir os recursos pelo preço, mas não assim, é claro, então não podemos simplesmente colocar isso aqui porque isso é errado, alterar os recursos em mais cinco. Então, temos que mudar isso em menos cinco. Como conseguir isso? Vamos prolongar isso mais uma vez. E então vamos para operadores, e aqui temos esse operador de multiplicação Então, vamos pegar esse. Então, multiplicamos o preço por uma constante, e essa constante é menos Portanto, temos o preço de reparo definido como cinco vezes menos um é menos cinco, e isso é exatamente o que está aqui como constante Então, vamos colocar isso aqui e agora isso deve funcionar. Portanto, estamos definindo o preço para cinco aqui neste caso. Estamos verificando isso menos do que aqui. E se o jogador tiver recursos suficientes, estamos diminuindo o número de recursos pelo preço do reparo, e obtemos isso com essa multiplicação com menos Ok, então vamos tentar isso. Não deveria haver nenhuma diferença. Portanto, isso é uma espécie de refatoração aqui, mas usaremos essa refatoração a nosso favor, definindo o nosso favor, definindo preço aleatório Então, vamos tentar isso primeiro. Então, primeiro vou coletar os recursos. Vamos coletar esse tempo talvez seis ou sete antes de ir para o planeta. Desta vez é mais difícil. Eu tenho cinco agora, mais um. Aqui. Agora precisamos de um planeta. Aí está. E agora eu posso comprar um reparo, e isso funciona. Resta um recurso e temos quatro reparos. Então isso funciona. E agora eu posso mudar isso aqui para, digamos, dez ou dois, o que eu quiser, e eu não preciso mudar esses dois locais aqui. Eles também funcionarão. Então essa é a vantagem. Dessa forma, também podemos definir isso como um preço aleatório. Então, podemos simplesmente substituir os dois aqui escolhendo aleatoriamente de um a dez. Vamos pegar um, 25 aqui ou um, dois, seis, talvez. Um talvez seja um pouco pequeno, então vamos pegar dois, dois a seis, para que o preço seja sempre de 2 a 6. Então, vamos tentar isso. Vamos para o planeta agora. Eu sei que precisamos coletar recursos primeiro, digamos cinco às. Então, provavelmente seremos capazes de fazer isso. Ok, também podemos coletar mais. Temos sete agora, e isso deve ser sempre suficiente. Então, compre, repare, o preço do reparo está definido para seis agora. Podemos ver isso aqui porque aqui, em variáveis, há essa caixa de seleção aqui e, se eu desmarcá-la, ela ficará oculta Se eu verificar, ele será exibido. Sabemos que precisamos de seis recursos para comprar um reparo. Temos sete, então vamos comprar um. E agora temos um recurso restante e quatro reparos. Então está funcionando O único problema é que o preço não está correto aqui, então há cinco recursos neste texto aqui e esse texto está, obviamente, corrigido porque está no traje. Então, aqui temos esses cinco recursos, e não é variável. E aqui devemos exibir o valor do preço variável de reparo. OK. O que podemos fazer é mover isso aqui para este lugar. Então, primeiro, vamos nos agarrar a ela. Temos diferentes opções de exibição aqui, normal, leitura, controle deslizante de leitura grande ou ocultá-lo Então, podemos simplesmente fazer a leitura grande. Isso é muito grande. Então, podemos simplesmente colocá-lo aqui, e então podemos nos livrar desse texto aqui. Basta deletar esse texto aqui no traje do sprite, colocando-o talvez no meio, um pouco acima Tudo bem. Agora também podemos fazer isso um pouco menor aqui na parte externa 12. Isso parece melhor. E aqui temos o valor da variável, e talvez devêssemos colocar algum texto na frente para que o jogador saiba que esse é o preço do reparo. Então, vamos fazer outro sprite apenas para mostrar isso aqui. Só pode pintar. Então, vamos colocar o texto aqui. Preço dois pontos, talvez sim, acho que k. O tamanho está bom, então vamos colocá-lo no centro aqui Mas o problema é que precisamos de um plano de fundo para isso, vamos arrastar um retângulo aqui e, dessa forma, o retângulo fica na frente Mas primeiro, vamos mudar para branco aqui, então o preenchimento deve ser branco. A saturação precisa cair para zero. OK. Mas mais um problema, está no topo do nosso texto aqui. Então, precisamos mudar. Você tem esses botões aqui, para frente, para trás, frente para trás Então, colocamos na parte de trás. Então clique nesse botão. Esse caminho está realmente na parte de trás. Por assim dizer, o fundo é o retângulo e o preço está acima disso Assim, também podemos selecionar o preço e colocá-lo na frente. Isso é o mesmo. Então, nada mudou aqui. Mas agora temos o preço, mas é um pouco grande demais, é claro. Vamos torná-lo menor. Aqui precisamos de algum espaço para essa variável. Vamos torná-lo assim, talvez ainda um pouco grande demais, podemos diminuí-lo aqui também alterando o tamanho aqui. Vamos colocar em 80, talvez, ainda um pouco grande demais, algo assim. Então paramos o jogo aqui. Coloque esse botão aqui, coloque o preço aqui. E, além disso, podemos colocar isso aqui. Mas o problema aqui é que você não pode alterar o plano de fundo dessa exibição aqui da exibição variável. Então isso tem que ser assim. Mas podemos mostrar o preço com esse novo sprite aqui. E vamos colocar isso um pouco acima, para que fique centralizado aqui Ok, então parece que está bem. Mas agora temos que mostrar esse sprite também, e também temos que mostrar a variável Então, vamos primeiro nos livrar da variável. Então, desmarcamos isso aqui, ou talvez devêssemos fazer isso no código, é melhor, claro Porque precisamos inicializá-lo, para ficar escondido aqui. Então, vamos primeiro ao Sprite One, e quando começamos o jogo, precisamos nos esconder porque o foguete não pousou neste planeta, então nós o escondemos, é o mesmo que o botão aqui, é o mesmo que o botão aqui, e aí vem uma coisa complicada porque você pode arrastar isso aqui para o sprite da etiqueta de preço, mas eu não vou fazer isso, e há uma razão para isso Aqui está o problema com variáveis locais e essa cópia de um bloco para um sprite diferente Então, se você arrastar isso aqui, este conjunto de preços de reparo dois escolhe aleatoriamente 226 para este sprite de texto de preço aqui. Vamos fazer isso. Você verá que aparecerá aqui, é claro, é uma cópia, mas também há essa variável local de preço de reparo aqui. O Scratch também criou uma variável local aqui. Temos duas variáveis locais aqui. Um está aqui. E um está aqui, e eles têm o mesmo nome. Esse é o problema aqui. Então você poderia dizer: Ok, o preço do reparo é o mesmo que este, mas não é, e aqui está a prova. Vou mostrar o preço do reparo aqui, e ele aparece aqui. E se eu fizer o mesmo aqui, ele aparecerá aqui ao lado do texto do preço. Esses também são dois valores diferentes, quatro e dois, porque existem duas variáveis diferentes. Cada um é local do sprite. Então, isso é local para essa noiva, esse preço de reparo, e isso é local para esse orgulho Então, o que isso significa? Se eu definir aqui o preço do reparo como um número aleatório, esse preço de reparo ainda será o mesmo. Então, se eu configurá-lo aqui para outra coisa , por exemplo, podemos configurá-lo para, digamos, zero ou menos um, talvez para que possamos ver que é realmente esse valor aqui, e eu começo o jogo Vemos aqui que temos dois. Então, se atingirmos um planeta, podemos ver que esse preço de reparo de texto é menos um, e esse é quatro Este ainda é menos um, e este aqui é quatro definido aleatoriamente por este bloco Então, aqui você realmente precisa ter cuidado. Se você arrastar algo com variáveis locais, um bloco que está usando uma variável ou configuração local aqui neste caso , ele estará criando ou rascunhando, criando uma nova variável local no outro sprite Mas essas não são as mesmas variáveis. Ambos são locais para cada sprite. Isso é um problema aqui, vamos nos livrar desse, excluir a variável de preço de reparo. Nós não precisamos disso. Mas precisamos mostrar isso aqui no botão comprar reparo. Então, cada vez que mostramos isso aqui, quando eu recebo Mostrar tela de negociação, precisamos mostrar essa variável aqui. Como mostramos e ocultamos variáveis? Isso é aqui, esses dois blocos. Mostrar preço de reparo variável, ocultar preço de reparo variável. Então, quando G clica, vamos esconder isso porque no início do jogo, não queremos isso. E sempre que eu receber a mensagem Mostrar tela de negociação , ela mostrará o preço de reparo variável aqui, essa variável local. Aqui, o texto do preço só será exibido e ocultado. Precisamos adicionar aqui este evento quando eu receber a tela de negociação do show, depois nos mostramos aqui. É isso, ou deveria ser isso, vamos tentar. Estou indo direto para o planeta e aqui está. O preço é quatro. Não tenho nenhum recurso coletado e você não tem recursos suficientes é exibido. Tudo bem. Vamos coletar alguns recursos. Pelo menos cinco, eu diria, talvez mais, se houver. Sim, eu tenho três agora. Quatro e talvez mais dois. Ou acidente. Há mais um, e agora precisamos de um planeta. Ok, então aqui temos os recursos oito. Então eu posso comprar dois reparos. Vamos comprar um. Agora temos cinco. E vamos comprar outro, e agora tenho dois recursos sobrando e não tenho o suficiente para comprar mais um. Então, faltam quatro reparos porque eu tive o acidente. Então eu tenho quatro agora, mas comprei dois, então está tudo correto. Ok, então é assim que você pode tornar o preço do reparo aqui aleatório. Por isso, é sempre escolhido 2-6 como um número aleatório. Então, isso fica um pouco mais imprevisível, qual será o preço, quantos recursos você precisará Então, se o jogador for para este planeta e não tiver recursos suficientes , isso é má sorte, é claro. E então o jogador precisa voltar a viajar pelo espaço e coletar mais recursos e depois voltar para o planeta. Mas o problema é que não há como voltar a viajar. Então é isso que temos que implementar no próximo vídeo. 27. 27 Como corrigir o código de fundo: Neste vídeo, quero corrigir um erro que acabei de perceber que apresentamos anteriormente e o introduzimos quando trocamos as roupas dos sprites de fundo Então, excluímos esse retângulo aqui. Esse era o tipo de plano de fundo para as estrelas, o retângulo preto, e nós o excluímos porque tínhamos esse pano de fundo aqui, o fundo preto, esse, e não precisávamos do outro na época Você também vê que isso não está corretamente no centro. Mas esse não é o problema aqui. O problema é que mudamos essa roupa aqui e, com a exclusão desse retângulo aqui, mudamos o tamanho desse sprite Esse é o problema aqui. Se essa posição y não estiver correta, esse sprite de fundo não será redefinido para essa posição aqui Eu intencionalmente errei esse valor aqui, então não é o valor correto, e você verá o que isso causa Somente para o primeiro sprite de fundo. Eu fiz isso. O outro eu já corrigi Você pode ver que o primeiro plano de fundo está preso aqui. Aqui você pode ver uma estrela desse plano de fundo e ela não é redefinida. Isso significa que não acontecerá se a posição y for menor que menos 350. Por que não? Como você não pode alterar a posição mais do que podemos verificar qual é o valor, -320, você não pode defini-la abaixo disso Eu posso simplesmente configurá-lo para -500. Mas se eu fizer isso, ele voltará automaticamente para -320. Não é possível alterar y abaixo desse valor. Essa condição aqui sempre será falsa e não será redefinida. É por isso que temos que mudar isso. Temos que ajustar isso ao tamanho do sprite. Vamos fazer isso. Aqui temos menos 320, temos que verificar se está abaixo de -319 E então também temos que redefini-lo para vermelho 20. Vamos verificar se isso resolve o problema. Colisão. Mas parece que isso realmente está resolvendo o problema, porque podemos ver que o primeiro sprite em segundo plano está se movendo corretamente e foi reiniciado corretamente. Tudo bem. Erro corrigido e você sempre terá esses bugs que precisa depurar, ou seja, corrigir erros Para corrigir erros, primeiro você precisa encontrar o erro, e esse é o processo de depuração Você primeiro encontra o erro, tenta isolar os casos em que o erro acontece E então você corrige o erro, e isso é depuração O Scratch realmente não oferece suporte à depuração, pois outras linguagens, outras linguagens de programação ou ambientes podem fazer isso porque ele não é capaz de definir pontos de interrupção nos quais você possa interromper o script e depois inspecionar as Mas você pode inspecionar as variáveis, é claro, mostrando-as aqui. É por isso que você pode, em variáveis, fazer com que essas variáveis sejam exibidas aqui com uma caixa de seleção. Portanto, sempre podemos exibir o valor da variável de viagem interrompida aqui e ver se isso está correto. Então, também podemos mostrar a posição y do sprite, por exemplo, então temos que ir para o movimento, e aqui temos a posição x e a posição y, e também a direção Não precisamos disso no momento. Mas aqui, na posição y, você pode conferir, e então também estará visível aqui. E então você pode ver a posição y do fundo um. E então você verá que , se chegar ao fundo aqui, será redefinido para o topo novamente. Trata-se de corrigir o erro. Isso eu acabei de perceber neste momento, mas durante a codificação durante a programação, sempre haverá a necessidade de depuração Portanto, essa foi mais ou menos uma introdução à depuração, mas não havia a intenção de fazer Foi só um erro antes. Mas aqui está como você corrige isso e, novamente, como você pode definir esses limites aqui, esses -319 Se você fizer algo errado, algo assim aqui, esse plano de fundo ficará preso e não será redefinido. E então você pode ver qual é o valor mínimo desse fundo, e então você pode usar esse valor aqui menos 320 para fazer essa condição aqui, então deve ser mais uma Um pixel, por assim dizer, mais do que essa posição extrema, e então você pode usar isso. E então você define o mesmo que aqui no negativo como um y positivo para redefinir o plano de fundo aqui. E também há mais uma coisa que podemos fazer para tornar as coisas um pouco mais fáceis aqui em nosso cérebro. Então, podemos trocar isso aqui. Portanto, sabendo que essa posição Y sempre será no mínimo de -320, podemos trocar isso aqui por um igual Portanto, se a posição y for igual e depois menos 320, reiniciaremos o Isso é mais fácil, mas só podemos fazer isso porque essa posição y do sprite é sempre -320 se estiver abaixo dela Ele é sempre redefinido, por assim dizer, para esse valor mínimo aqui. Portanto, ele sempre assumirá esse valor. Se usássemos uma variável aqui e sempre a alterássemos por menos dois , poderíamos chegar a algo como -321 e essa condição não Mas como esse é realmente um caso especial aqui com a posição x, podemos fazer assim, e então você não precisará adicionar um a esse limite aqui. Portanto, se a posição y estiver no mínimo de -320, vá para essa posição inicial aqui Então, vamos tentar isso. E veremos que isso também funciona. Dessa forma, você pode usar o mesmo valor aqui, 320. Desta vez é -320, e aqui é positivo, 320, e é um pouco mais fácil 28. 28 Saia da tela de negociação: R Agora que temos a tela de negociação em execução, precisamos sair dela novamente, é claro. Então, vamos para a tela. Novamente, aqui temos a tela de negociação, podemos comprar. Se tivéssemos recursos suficientes, teríamos conseguido comprar aqui, mas não vamos, então precisamos sair dessa tela para poder viajar novamente pelo espaço para coletar recursos e depois comprar reparos aqui nesse tipo de loja, que é. Ok, vamos nos livrar dessa posição aqui. Primeira coisa. Então, onde temos isso? É BG um, então o plano de fundo é o primeiro, e aqui está a posição. Você está lá embaixo, desmarque a caixa de seleção e ela desaparecerá. Parada de viagem. Nós também não precisamos disso. Então, vamos remover a caixa de seleção aqui. Remova a marca na caixa de seleção aqui. Então, agora isso também acabou. E para a saída, precisamos de um botão, é claro. Então, temos que pintar outro botão. Talvez, não, não seja tinta. Vamos usar um botão predefinido aqui. Talvez esse sirva. Então, basta apagar este. Essa é a correta e agora podemos personalizá-la. Então, pelo menos, temos que colocar um texto aqui que diz saída. Faça-o um pouco mais bonito. Talvez faça a cor, a cor do texto, preta aqui e coloque-a no centro ou talvez aqui, um pouco acima do centro. Está tudo bem. E também a cor, a cor de fundo aqui deve ser outra coisa, talvez a duração. Sim, eu acho que é melhor, algo assim, e também a borda aqui, isso é um gradiente no momento Vamos torná-lo sólido aqui, e então talvez apenas preto neste caso, está tudo bem. E então precisamos torná-lo um pouco menor. Ok. Então eu acho que deve ficar tudo bem. E aqui mudamos o tamanho também para 80%. Ok. Agradável. Vamos colocá-lo aqui para que o jogador possa ver claramente que este é o botão para sair da tela de negociação. Ok, vamos ver o código aqui para o script. E precisamos de um evento, é claro, quando o sprite é clicado Quando esse sprite é clicado, o que fazemos então? Obviamente, precisamos definir a variável. A variável viagem parada precisa ser definida, então defina viagem parada 20. Isso fará com que quase tudo reapareça aqui e se mova novamente. Vamos tentar se isso já faz alguma coisa. Então, vamos imediatamente para um planeta aqui. A primeira que vemos, lá está, e tentamos a saída. Ok, então vemos que as rochas estão se movendo novamente, as estrelas estão se movendo, os planetas estão se movendo. O foguete não está se movendo, ou pelo menos não está visível Então, vamos e também o fundo não está visível. Vamos primeiro consertar o chip do foguete aqui. Por que o foguete não está se movendo? Porque está preso nesse ciclo eterno. E então, se a parada de viagem for novamente zero, será apenas o controle do jogador e o teste rochoso E aqui não há nada para mostrar isso novamente. Ok. Então, temos que mostrar isso. Então vá até os looks e depois mostre ou já o temos aqui, para que possamos nos livrar disso e usar esse programa aqui. E coloque aqui se a parada de viagem for igual a zero. Então, a primeira coisa que fazemos é mostrar e cada vez que ele passa por esse loop e a parada de viagem é zero Nós mostramos isso. Realmente não importa que mostremos isso várias vezes. É quase uma operação não, não. Então, isso deve ficar bem. Então, vamos voltar atrás. E agora, cada vez que parada de viagem está nesse ciclo zero eterno, o foguete é mostrado. Isso deve ficar bem. Vamos tentar isso. Há um planeta, e saímos, e então temos o foguete novamente. Isso também está funcionando. Reserve um tempo para que todos os foguetes e estrelas caiam, mas está tudo bem. Eu acho que isso é bom. O que falta aqui é, claro, o plano de fundo também precisa aparecer sempre que a parada de viagem for zero. Isso também é fácil. Remova isso aqui, coloque isso volta aqui, nesta parada de viagem é igual a zero, o mesmo para o segundo Então mostre a cada vez que ele passa pelo loop, em cada iteração, que a parada de viagem é igual Portanto, o plano de fundo também deve estar bom agora. Vamos experimentá-lo. Claro, tudo o que você faz você precisa testar. Então, basta fazer uma pequena alteração e testar se essa pequena mudança realmente funciona. Então é assim que eu faço. Se você fizer muitas, muitas coisas, alterar muitos blocos e inserir lá e alterar o valor, teste-os e perceberá que nada funciona mais. Isso não é muito bom. Então mude um pouco e depois teste essa mudança. Essa é a melhor maneira de ir. Ok, então vamos fazer isso. O plano de fundo também deve funcionar. Também deve reaparecer se clicarmos em sair. Sim, é. Mas o que ainda falta é que o pano de fundo não foi alterado. Então, precisamos mudar aqui para esse primeiro pano de fundo aqui. Ok, onde fazemos isso? Além disso, neste sprite. Vamos renomear o sprite aqui para sair botão ou simplesmente sair. Nós faremos. Defina a parada de viagem como zero e, em seguida, também podemos definir o pano de fundo aqui, alternar o pano de fundo, dois, o pano de fundo um e testá-lo Também podemos testar se podemos comprar algo com os recursos e depois sair. Agora, é muito caro aqui. Não podemos comprar reparos, mas vamos sair. E agora vemos que tudo está volta ao que era antes, exceto temos o botão de compra e reparo e o botão de preço aqui, então eles têm que ir, e também o botão de saída tem que funcionar. Como fazemos isso? Isso é um pouco diferente? Eu sugeriria usar uma mensagem novamente, então transmita uma nova mensagem aqui. Portanto, mostramos a tela de negociação e precisamos ocultar a tela de negociação. Portanto, crie uma nova mensagem na tela de negociação e, dessa forma, possamos reagir. Nesse sprite, também podemos reagir. Então, quando eu receber a tela de negociação oculta, vamos apenas esconder o sprite aqui Então se esconda assim. Além disso, precisamos mostrar o botão de saída. Isso é algo que não fizemos até agora. Então, sempre que eu receber essa tela de negociação de fotos, quero mostrar o sprite aqui Para que possamos lidar com a mensagem da tela de negociação do Hides e também com a mensagem da tela de exibição de negociação, temos que fazer o mesmo aqui para o texto do preço e para o reparo da compra Portanto, posso simplesmente copiar isso quando receber altura alta da tela de negociação texto do preço e também no botão de compra e reparo. Então, isso também fará o mesmo aqui nos outros Sprites. Ok. Além disso, o que precisamos fazer é o que é feito aqui, quando clicar, ocultar, ou vamos pegar essa , quando clicamos, ocultar e copiar para o botão de saída aqui Dessa forma, esse botão de saída também fica oculto quando o jogo começa. Vamos começar o jogo. Sem botão de saída. Vamos pousar em um planeta. Aqui está. Aí temos o botão de saída, temos o botão de reparo e o texto do preço. Portanto, não temos recursos. Não importa. Saímos e podemos novamente reunir recursos aqui. Ok. O que ainda falta é, claro, que essa variável também precisa ser escondida. Então, precisamos fazer isso porque é uma variável local. Precisamos fazer isso no botão de reparo aqui. Vamos fazer isso. Variáveis, variável Hight Sempre que recebo a tela de negociação oculta, oculte o preço de reparo variável. Então, vamos testá-lo novamente. Saia, e aí está. Agora podemos alternar entre esse modo aqui, o modo de viagem e coleta e esse modo de negociação aqui. Então, eu posso comprar na verdade dois reparos aqui, sair e coletar mais recursos. Para que eu possa comprar mais reparos aqui. Vamos tentar isso de novo. Posso comprar mais um e depois não ter mais recursos, depois sair e continuar o jogo. Muito bom, podemos sair da tela de negociação. Podemos entrar na tela de negociação. Portanto, temos esses dois modos de viajar e coletar e o modo de negociação, que é muito bom. E estamos fazendo isso usando uma variável aqui, como você viu, essa variável de parada de viagem, que é sempre verificada no loop de controle de cada sprite, e estamos fazendo isso também com mensagens Portanto, temos essa tela de negociação alta e mostramos as mensagens da tela de negociação que são usadas aqui. Dessa forma, não precisamos daquele loop de jogo eterno para cada sprite que não é necessário Também é chamado de ocupado esperando aqui. Então, se estamos neste modo aqui, parada de viagem não é zero, mas é uma. Estamos aqui nesta movimentada fila de espera. Para sempre, esconda-se e espere apenas esperando, esperando, esperando o tempo todo. E aqui, esse não é o caso. Na verdade, não estamos ocupados esperando. Neste caso, estamos apenas esperando uma notificação aqui para uma mensagem e, em seguida, estamos agindo de acordo a recepção dessa mensagem aqui. E isso é um pouco diferente. Para métodos diferentes para atingir o mesmo objetivo ou objetivo semelhante, talvez. Mas aqui também temos um loop de controle do jogo e é mais fácil verificá-lo aqui no loop do que fazer isso por meio de uma recepção de mensagem aqui. Ok. Então esse é o nosso jogo. Eu acho que é um jogo muito bom. Pode não ser muito difícil no momento, mas você pode ajustá-lo um pouco Isso fica mais difícil, talvez não tantos planetas, talvez mais rochas e menos recursos. É claro que também podemos adicionar uma atualização aqui para nosso chip de foguete, então talvez o chip de foguete possa disparar feixes de laser ou algo assim e depois destruir os meteoritos, as rochas E então talvez as rochas também revelem mais alguns recursos, eu não sei, talvez planetas escondidos ou eu não sei. Você pode fazer isso e também pode atualizar, é claro, a tela de negociação aqui para que você possa não apenas comprar um reparo, mas também fazer um upgrade em seu foguete aqui para que talvez você possa disparar um laser outra coisa, mísseis ou algo parecido Ou você também pode se estabelecer em planetas. Então, se você tem, digamos, 50 recursos que podem ser capazes de se estabelecer neste planeta, e então você também pode colher recursos no planeta e, com o passar do tempo, isso pode realmente lhe dar mais recursos, para que você possa se estabelecer em mais planetas e assim por diante. Mas, no momento, esse é o nosso estado final do jogo. Então você pode, é claro, estendê-lo. Não é tão difícil estendê-lo. Então, por exemplo, se você quiser vender ou deixar o jogador comprar outra coisa, basta copiar isso aqui e depois criar outra variável, talvez o estado de atualização do chip do foguete, por exemplo E então você precisa verificar, é claro, talvez aqui no controle do chip do foguete, possa verificar se há espaço para a chave de espaço Se a tecla de espaço for pressionada, você pode disparar esse feixe de laser, e se esse feixe de laser atingir uma rocha, a rocha simplesmente desaparecerá, ou você pode, mais tarde, se entrarmos em animações, você também pode fazer uma explosão, talvez animação, algo assim Ok. Mas é isso. Para este jogo, aqui, na próxima seção, começaremos um novo jogo, e isso exigirá que exploremos mais funcionalidades aqui no zero, porque existem mais Então, você não só tem essas variáveis aqui, mas também tem listas, e isso será abordado neste próximo jogo, e também usaremos mais blocos personalizados, e também haverá animações. 29. 29 novo jogo que controla o personagem principal: Este será nosso novo jogo e será um jogo de aventura. Assim como algumas antigas aventuras de apontar e clicar, temos uma personagem principal, e essa personagem principal se chama Avery porque temos no zero um sprite predefinido chamado Avery, que é uma garota que também tem uma Usaremos esse sprite e, portanto, Avery embarcará nessa aventura, e o jogador pode controlar Avery com as teclas do cursor e depois interagir com os objetos, coletá-los e resolver quebra-cabeças com a ajuda O que precisamos fazer primeiro é, obviamente, criar um novo projeto. Dê a ela o nome de aventura de Avery. Eu já fiz isso aqui. Em seguida, precisamos criar nosso primeiro sprite. Normalmente, você tem esse gato. Eu já removi o gato aqui. Vamos adicionar Avery. Aqui temos Avery em pé e em duas poses. Vamos conferir as roupas. Essa pose e essa, vamos mudar a ordem aqui. Você pode arrastar isso aqui. Vamos colocar a Avery em pé primeiro, e então isso pode estar falando de Avery como uma segunda Precisamos de mais sprites aqui, mais fantasias, não mais sprites, mais fantasias, e podemos inseri-las aqui, escolher uma fantasia, e então temos essas roupas ambulantes Vamos selecionar o primeiro, depois o segundo, depois o terceiro e o quarto. Agora temos o aviário ambulante aqui, e aqui temos o aviário em pé e o aviário falante Vamos mover o aviário falante aqui até o fim. Primeiro temos o aviário em pé, depois o aviário ambulante, e a última fantasia é o aviário falante Com a ajuda desses trajes, faremos a animação ambulante, é claro, e também em pé e falando. Isso é tudo para as roupas por enquanto, e vamos verificar o código. Vamos fazer com que o jogador controle o personagem, nosso aviário principal Primeiro, vamos aos eventos, é claro, quando clicamos, e precisamos de um loop eterno aqui Este será o nosso loop de jogo, e aqui verificaremos os controles, e os controles são as teclas, a seta para e os controles são as teclas, a esquerda e a seta para a direita. Vamos pegar um “se” aqui. Isso verificará a seta para a esquerda. Então vamos para a tecla de detecção pressionada e aqui, no menu suspenso, escolhemos a seta para a esquerda, e então também podemos duplicar isso e criar uma para a Então, o que fazemos? Estamos alterando x desse sprite em uma certa quantidade para que o personagem se mova nessa direção Então vá para o movimento e altere x por. Aqui, esta será a esquerda, então. Digamos que movamos x por, ou alteramos x por menos três, ele vai para a esquerda Duplique isso, e aqui movemos ou alteramos x por mais três, k. Já podemos tentar isso ou alteramos x por mais três, k. Já podemos tentar Vamos ver como isso funciona. Vamos começar E somos capazes de mover o personagem. Ok, em seguida, mudaremos a orientação, então Avery deve estar voltada para direita quando a seta direita for clicada ou pressionada e, claro, para a esquerda se a seta esquerda for Precisamos mover a orientação de Avery do personagem principal, e isso é feito por um bloco que também está em movimento, claro, e esse é um ponto na direção Podemos dizer ao scratch para orientar esse personagem para a direção certa ou para a esquerda e também para outras direções, mas, neste caso, precisamos apenas da direita e da esquerda Vamos fazer isso. Se a seta para a esquerda for pressionada e aponte na direção 90 graus, isso deve ser -90 graus, então você pode mudar isso aqui para -90 No outro caso, aponte na direção 290 graus, se a seta para a direita for pressionada Então, se você clicar aqui, você pode ver que essa é a direção certa aqui. Vamos tentar isso. E vemos que não está correto. E isso é porque não definimos o estilo de rotação correto, e esse é esse bloco aqui. Defina o estilo de rotação. Este é o último quarteirão aqui. Podemos configurá-lo aqui no início, definir o estilo de rotação para a esquerda, para a direita. O padrão está em todos os lugares, e nós o definimos para a esquerda e para a direita. Vamos tentar isso e funcionará. Agora podemos virar o personagem principal da direita para a esquerda. E agora, vamos à animação do próximo vídeo. 30. 30 animação de caminhada: I. Agora, queremos adicionar uma animação ao movimento aqui. No momento, podemos simplesmente nos mover e mudar a orientação do personagem principal. Mas também queremos uma animação, uma animação ambulante, e também temos os figurinos aqui para uma animação ambulante. Este é o primeiro quadro, por assim dizer, este é o segundo terceiro quarto. Precisamos percorrer esses quadros aqui, os quatro andadores, os quatro trajes de caminhada aqui, e isso pode ser feito em um segundo loop. Vamos clicar e depois para sempre. Aqui faremos a animação. Ok, então como você pode fazer uma animação? Você tem que trocar a roupa por uma diferente da próxima, por exemplo. Isso é descuido. Então, vamos ver Undos trocar o traje 2 Uma específica, aqui você pode escolher qualquer fantasia do sprite que quiser, ou também pode dizer a próxima fantasia Então, por exemplo, se tivermos o traje de pé, próximo traje, usaremos o primeiro traje de caminhada aqui. Se estivermos animando, fazendo a animação ambulante, mudaremos para a próxima roupa aqui Então, se chegarmos a essa roupa, precisamos verificar se ela é a primeira roupa de caminhada aqui. Vamos fazer isso. Primeiro, mudamos para o próximo traje, escolhemos este aqui, e depois o próximo traje e esse para sempre. Vamos ver como isso funciona. Sim. Obviamente, há uma animação aqui. Não é a correta, mas está trocando todas as roupas aqui. Mas é muito rápido, então precisamos adicionar um peso aqui. Vamos controlar a espera. E então não esperamos por 1 segundo. Isso é muito longo. Então, digamos que 0,2 talvez. Vamos ver como isso parece. Parece muito bom. Podemos tentar talvez 0,3. Vamos tentar isso. Eu acho que está tudo bem. Aqui você tem a animação, mas o problema é que não precisamos da primeira aqui e também não precisamos da última aqui. Precisamos verificar em que estado está a animação e depois ajustar o traje corretamente. Vamos fazer isso. Para isso, precisamos de um if here ou pegamos um if else. Em seguida, precisamos verificar em qual traje o personagem está no momento. Isso também pode ser feito aqui em looks. Então, aqui temos o número do traje ou o nome do traje. Então, isso é uma espécie de variável Vamos arrastá-la aqui e verificar, digamos, o número. Então, verificamos a igualdade, se o número do traje é igual, e então temos que verificar qual é o número do último quadro de animação ambulante Então esse é o primeiro, o segundo, terceiro, quarto, quinto em pé . Então, são cinco. Então, se chegar a cinco, ou se o traje atual for cinco, o número, precisamos configurá-lo para um traje específico, e esse é o primeiro. Então, um, dois, dois é o número do primeiro traje de caminhada. Ok. Então vamos dar uma olhada e depois trocamos de roupa. Não precisamos do número aqui. Podemos simplesmente configurá-lo para este quadro aqui. Acho que está correto. Vamos verificar isso novamente. Não, não é. É cada caminhada, cada caminhada A, é claro. Se atingir o último quadro de animação , passaremos para o primeiro. E a primeira é cada caminhada A. E se não for esse o caso, vamos mudar para a próxima roupa aqui. E, claro, também precisamos esperar para sempre. Para que a velocidade da animação não seja muito alta. Vamos verificar isso e isso parece funcionar bem. Avery está andando aqui. Também podemos deixá-la caminhar em uma direção diferente. Então, à esquerda e à direita, tudo funciona. Mas ela não para de andar. Ela anda o tempo todo, então a animação não para por aqui. E isso, precisamos fazer com uma variável. Portanto, precisamos definir uma variável com um valor específico e, em seguida, verificar esse valor no loop forever aqui. Então, vamos introduzir uma variável de caminhada aqui, tornar a caminhada variável. E só precisamos disso para esse sprite. Somente para esta primavera, todos os outros sprites têm suas próprias animações, se houver, então só precisamos delas para essa E precisamos configurá-lo, é claro, para zero no início. Então, comecei a caminhar ou já tinha uma variável de caminhada aqui. Vamos nos livrar dessa, e também vamos nos livrar da minha variável aqui. Portanto, defina a caminhada para zero no início. Então, se estivermos aqui nesta seta para a esquerda ou para a direita pressionada, precisamos configurá-la como uma. Vamos fazer isso aqui, configuramos como um, e também . E então precisamos verificar esse loop permanente se devemos continuar a animação ou se devemos apenas esperar aqui. Este ano lá dentro, eu posso prolongar isso, preciso estar em outro se. Vamos fazer isso se, e precisamos de um se, então outro. Aqui está, arraste isso para sempre. Se andar é igual, precisamos de um operador igual aqui. Então, precisamos de nossa caminhada variável. Se caminhar é igual a um, então podemos continuar com a animação . Colocamos isso aqui e se eu andar não é uma delas, então devemos ficar parados. Precisamos mudar para esse traje aqui. Troque o traje para Avery. Acho que é B, vamos fazer isso. Troque o traje para Avery B e vamos tentar isso Esquerda, direita, tudo está funcionando, mas não para por aqui. Isso é um problema, é claro, precisamos voltar a andar 20, e onde fazemos isso? Defina a caminhada para zero, poderíamos fazer isso aqui, mas o problema é que deveria ser condicional Há várias maneiras de fazer isso. Podemos ter um ninho, se não for o caso. Vamos arrastar esses ifs aqui para fora da eternidade. Dessa forma, fica mais fácil, e precisamos usar if than else para cada um. Se outra coisa e isso aqui precisam ir aqui, e isso precisa ir aqui, é claro. Se a tecla seta esquerda for pressionada, defina Esperando para um, modo que seja o mesmo de antes. Pode se livrar disso se for o caso. Mas no outro caso, verificamos a outra chave aqui, mas não com if then, mas também com if then else. Então, vamos pegar isso aqui. Arraste a condição aqui e arraste esse bloco aqui. Isso pode ser um pouco complicado porque estamos aninhando aqui se houver condições Primeiro, estamos verificando a primeira tecla de seta para a esquerda. Se isso for pressionado, e se isso não for pressionado, estamos verificando aqui, no caso els, a tecla de seta direita pressionada. Se esse também não for o caso, estamos entrando aqui no caso els desse caso interno, se não. Lá, podemos definir a caminhada para zero porque tecla de seta esquerda não foi pressionada porque estamos neste caso, e também a tecla de seta direita também não foi pressionada, então estamos neste caso. Nenhuma tecla foi pressionada e, então, podemos definir a caminhada para zero. Então, vamos colocar tudo isso aqui na lupa for eve novamente, e vamos experimentar à esquerda, à direita, em pé, e funciona Agora temos nossa animação aqui. Então, isso funciona apenas trocando de roupa, e se a roupa estiver em um determinado ponto, neste caso, é a roupa número cinco, precisamos redefini-la para o primeiro quadro da animação, que é cada caminhada A , caso contrário, estamos apenas mudando para a próxima, mas somente se caminhar for uma, e se caminhar não for uma, estamos apenas mudando para a roupa de pé. Como determinamos se a caminhada deve ser um ou zero? Estamos apenas verificando se alguma tecla foi pressionada, então não qualquer tecla, exceto a tecla de seta esquerda ou direita, se nenhuma delas for pressionada, então colocamos a caminhada em zero. Dessa forma, temos essa bela animação de caminhada. Agora temos todas as caminhadas e o jogador pode controlar em qual direção ou se ela deve ficar parada. Eu acho que isso é bom? controlar o personagem principal aqui e continuaremos no próximo vídeo. 31. 31 Como montar a primeira sala: Como podemos controlar nosso personagem aqui, nosso personagem principal agora. Assim, precisamos nos preparar para nosso primeiro enigma, nosso primeiro quebra-cabeça na primeira sala E por falar no primeiro quarto, precisamos escolher um cenário diferente aqui porque está vazio Então, vamos verificar o que está disponível. E minha ideia é que estamos começando em um quarto. Então, vamos pegar talvez o segundo quarto aqui. E coloque a Avery nesta sala. Vamos movê-la um pouco, então a posição inicial talvez deva ser algo como aqui, e como ela precisa andar da esquerda para a direita, ela não pode subir aqui. Precisa haver espaço suficiente e nenhum obstáculo aqui embaixo, e dessa forma, ela pode andar livremente para a esquerda e para a direita. Vamos fixar a posição inicial de Avery. Podemos simplesmente definir ir para x, ir para y aqui, e essas coordenadas são as coordenadas atuais, então está tudo bem. Ela está sempre começando a partir daí. Se a movermos e depois partirmos, ela voltará para a posição inicial e, a partir daí, poderá se mover em seu quarto para a esquerda e para a direita. Essa é a parte móvel e essa é a parte de fundo. Agora precisamos de objetos para que Avery possa interagir com eles e resolver um quebra-cabeça O primeiro quebra-cabeça será que a porta do quarto dela está trancada. Precisamos encontrar uma chave e como isso aconteceu? Minha ideia era que ela estava sonâmbula ontem à noite e acidentalmente trancou a porta e colocou a chave embaixo da cama, de modo que agora ela precisa encontrar a chave embaixo da cama e depois destrancar a porta para sair do Vamos implementar isso. Para isso, é claro que precisamos de uma chave. Vamos procurar um sprite chave. Tecla Enter, e aí temos uma. Felizmente, isso é um pouco grande demais. Talvez apenas 50% ou 30%. Sim, talvez esteja tudo bem. Vamos mover essa chave para algum lugar. Debaixo da cama, talvez na sombra aqui perto do topo da cama, talvez. Eu acho que está tudo bem. Portanto, não é imediatamente visível aqui e o jogador precisa localizá-lo primeiro e depois pegá-lo. Essa é a chave, o objeto da primeira sala para resolver o quebra-cabeça, e agora precisamos pensar como o jogador deve chegar à solução. Então, a primeira coisa que eu faria é se todo mundo quiser sair da sala, ela deveria ir para a esquerda ou para a direita, e deveria haver uma porta, mas a porta está trancada, então podemos decidir agora se a porta está do lado direito ou do lado esquerdo. Eu diria que está aqui, então temos que dizer ao jogador que essa é uma porta ali e a porta está trancada. Então, como fazemos isso? Temos que verificar a coordenada x aqui, e se a coordenada x for maior que um determinado valor, podemos deixar Avery falar Mas há uma solução diferente para esse problema. Podemos fazer isso verificando a coordenada x aqui, mas também podemos colocar um objeto aqui, talvez um objeto com uma determinada cor aqui E então, se Avery atingir esse objeto ou atingir a cor , podemos deixá-la falar Vamos tentar a segunda solução. Colocamos uma cor especial aqui e se Avery atingir a cor, deixamos ela falar Então vamos para o pano de fundo. Novamente, cenários aqui. Também podemos apagar o primeiro. Nós não precisamos disso. Então, vamos mudar primeiro a cor para algo marrom, acho que deve ficar tudo bem, um pouco mais escuro, talvez E depois um retângulo. Então, vamos colocar esse retângulo aqui. E esta é, por assim dizer, a porta aqui. Avery poderia simplesmente caminhar até a porta, e então precisamos verificar de alguma forma se ela atinge essa cor aqui Se esse sprite estiver tocando nessa cor. Espero que essa cor seja única aqui na sala e não seja encontrada em nenhum outro lugar. Então precisamos mudar a cor, é claro, mas esse não é o problema. Nós podemos fazer isso. Mas vamos primeiro tentar com essa cor e, em seguida, precisamos verificar o toque de uma cor Como fazemos isso? Sensing, esta é a categoria certa aqui, mas estamos em segundo plano Então, vamos mudar para Avery. Então, aqui temos a possibilidade de. Cor é cor tocante ou sprite tocando cor, e essa é a Então essa pode ser a condição, e podemos colocar isso aqui em uma declaração if. Então, vamos pegar um se, então. É, eu toco a cor, e agora precisamos escolher a cor Aqui você tem o seletor de cores. Basta clicar nele e agora você pode escolher uma cor aqui na tela. Nós pegamos, é claro, a cor da porta. Então essa é a nossa cor. E se acertarmos isso, deixaremos Avery falar alguma coisa Vamos dar uma olhada primeiro e dizer olá, e tudo bem por enquanto. Então, podemos colocar isso no velope for e, a cada iteração, ele verificará o toque dessa cor e, se tocar na cor, dirá olá Vamos tentar isso andando até a porta. Olá, e isso funciona. Claro, ela está sempre dizendo olá agora, e devemos colocar isso em um if else. Novamente, substituímos isso aqui por if then else. Mova essa condição para cá e mova o olá para aqui. E como podemos nos livrar do balão de fala aqui? Vamos colocar isso primeiro no F everop novamente. Não dizemos nada. Então, novamente, diga e não olá, mas nós o apagamos completamente Então não há nada, nenhum personagem está aqui, completamente vazio, e dessa forma, o balão de fala desaparece Ok, vamos tentar isso. Caminhando até a porta. Estamos batendo na porta. Ela diz, olá, e estamos nos afastando da porta e o olá desapareceu. O balão de fala desapareceu. Além disso, notamos que essa é a cor certa. Isso é exclusivo desta sala. Então, só temos essa cor aqui na porta. Isso funciona, e vamos mudar esse olá para a porta está trancada. A porta está trancada. Devo tê-lo trancado enquanto estava sonâmbulo à noite e colocado a chave em algum lugar para uma explicação longa, mas isso deve ser uma dica para o jogador o que procurar Vamos tentar de novo, reiniciando, indo até a porta, batendo na porta, a porta está Eu devo ter trancado. Há um erro de ortografia ao dormir andando à noite e colocando a chave em algum lugar Vamos corrigir isso e agora está correto. Afastando-se da porta, a tigela de fala desaparece. Este é nosso primeiro mecanismo aqui, e é baseado nessa cor tocante Você pode usar isso com cores especiais que você escolher, e então você pode sentir a colisão de um sprite com uma cor e depois dizer alguma coisa, por exemplo, aqui, ou você também pode fazer outra coisa. Ok, essa é a pista para o jogador aqui, e agora precisamos verificar como podemos obter a chave aqui, como o jogador pode pegar Se o jogador tiver a chave, Avery poderá abrir a porta e sair da sala 32. 32 Informações da chave de exibição: Agora vamos criar o código para o objeto chave. Temos a chave aqui, o sprite, e aqui temos o código No momento, não temos nenhum código, mas o inseriremos agora quando clicarmos, como sempre E então o que fazemos quando clicamos. Quando clicamos em go, criamos um para everop. E verificamos se o ponteiro do mouse está tocando esse sprite aqui Vamos até outra coisa. Caso contrário, coloque isso nos quatro velopes, e então precisamos da categoria de detecção aqui Se estiver tocando no ponteiro do mouse, se esse sprite estiver tocando no ponteiro do mouse, então vamos dizer alguma coisa ou vamos pensar em algo se esse sprite estiver tocando no ponteiro do mouse, então vamos dizer alguma coisa ou vamos pensar em algo. Então pense. Não, não, mas é uma chave e no outro caso, no outro caso, não pensamos em nada, então isso só é exibido se o ponteiro do mouse estiver realmente tocando no sprite da chave Vamos tentar isso. Passando o mouse sobre a tecla, é uma chave, funciona, e se eu colocar o ponto do mouse de lado, ela desaparecerá Isso é bom. Mas queremos algo mais. Essa bolha aqui só deve aparecer se Avery estiver perto dessa chave Se ela estiver, por exemplo, aqui , a poucos pixels da chave, ela deverá exibir isso. É uma chave se eu passar o mouse sobre a chave, e se ela estiver aqui, por exemplo, então não deveria estar lá Dessa forma, fazemos com que o jogador mova o personagem para explorar os arredores daqui, e não é só o ponteiro do mouse que precisa ir a qualquer lugar e procurar algo para, por exemplo, pegar, olhar ou usar Vamos fazer isso. Como fazemos isso? Certamente, existem várias maneiras de fazer isso. Usaremos outro sensor aqui. Então temos essa distância até aqui, é o ponteiro do mouse. É um padrão, mas também podemos escolher Avery, então vou fazer o sprite A distância até Avery, e a distância até Avery deve estar abaixo de um certo limite Então, vamos até os operadores e escolha isso aqui. Menor que, a distância até Avery deve ser menor que, digamos, vamos deixar como 50 ou algo parecido Também podemos ajustá-lo mais tarde. Não tem problema, deixe assim. Em seguida, precisamos verificar se o ponteiro do mouse está tocando na tecla e também se a distância até Avery está abaixo E esse fim não usamos antes, mas isso também está aqui em operadores. Então aqui temos esse fim. Então, vamos arrastar isso aqui. A distância dois é o segundo operando aqui, e o primeiro é o toque do ponteiro do mouse Portanto, temos duas condições agora, e ambas devem ser cumpridas para mostrar isso. É uma chave. primeira condição é tocar no ponteiro do mouse e a segunda é que a distância até Avery é menor que 50 Então essa é a condição completa com esse fim aqui, e nós colocamos isso aqui. Portanto, você deve ter cuidado ao inserir isso, então a borda esquerda aqui deve estar alinhada com essa forma se estiver aqui Então, está destacando se você colocá-lo no lugar certo aqui e depois soltá-lo Se tocar no ponteiro do mouse e a distância até Avery estiver abaixo de 50, você poderá É uma chave, caso contrário, não mostre nada. Vamos tentar isso. Primeiro, tentamos mouse sobre a tecla quando Avery A distância é, obviamente, mais de 50 aqui, e não está exibindo nada, então isso é bom. Vamos nos aproximar. Ah, aqui vemos que a ordem Z não está correta aqui Mas está funcionando, é uma chave. Agora está sendo exibida, é uma chave, e se eu mover Avery um pouco para a direita, ela não está exibindo É isso que queremos. Avery precisa se aproximar da chave para realmente receber essa mensagem aqui É uma chave. Isso está funcionando, mas precisamos corrigir a ordem aqui para que a chave esteja sempre em segundo plano, mas isso é fácil. Quando você clica, precisamos definir isso para a camada posterior. Aqui, vá para a camada frontal, mude para trás, então vá para a camada traseira. E então coloque isso logo depois de clicar na bandeira. E agora isso deve ficar bem. A chave deve estar em segundo plano e funciona. Vamos pairar. É uma chave. Também do outro lado, está funcionando. É uma chave, e se eu me afastar da chave , ela não funciona mais. Isso é o que queríamos e é isso que também alcançamos. Esse operador final aqui é novo. Portanto, você pode combinar duas condições aqui, essa condição de ponto de toque do mouse com essa distância até Avery abaixo de 50 Esse aqui é o segundo operante, e esse é o primeiro Somente se esses dois forem verdadeiros, exibiremos esse balão de pensamento e, caso contrário, esse balão de pensamento desaparecerá 33. 33 Como pegar a chave: Agora que podemos mostrar uma descrição do objeto da nossa chave aqui. Precisamos ser capazes de o jogador pegá-lo e colocá-lo no inventário. Vamos tentar isso. Quando o jogador clica na tecla e precisamos mudar para a tecla, é claro, para isso, algo deve acontecer Vamos a eventos quando esse preço clica e, em seguida, precisamos fazer alguma Primeiro, precisamos de uma nova variável aqui. Para todos os tipos, para que possa ser acessado em qualquer lugar, não apenas na primavera não apenas na primavera Chamamos isso de chave retirada, e isso será zero se a chave ainda não foi retirada e será definido como um neste caso aqui quando a noiva clicou, mas também temos que considerar isso se estiver aqui Então, precisamos disso se tocarmos no ponteiro do mouse e na distância dois, não especificamente tocarmos Acho que isso não é necessário porque a distância até Avery é essa condição importante que precisamos aqui Então, vamos duplicar esse clique com o botão direito do mouse nessa distância até Avery e colocamos aqui primeiro E precisamos de um controle aqui se então, se a distância até Avery, quando o sprite é clicado, quando a tecla é clicada, for menor que 50, podemos pegá-la e definir Ele pegou dois ou um e, no início, precisamos configurá-lo, é claro, para o valor padrão de zero aqui. Ok, vamos tentar isso. Aqui temos a exibição do valor da variável aqui. A chave pegou zero no início, está correto. E precisamos tentar clicar na tecla neste momento. Isso não é possível. Tudo bem. Isso é o que nós queremos. E agora podemos ver que é uma chave, e agora devemos ser capazes pegá-la e ela está funcionando aqui. Então, novamente, vamos reiniciar o jogo. Tentamos clicar na chave. Não está funcionando e, assim que uma chave é exibida, podemos clicar nela e a chave é retirada. A variável será definida como um. O que mais precisamos fazer aqui? Precisamos primeiro dar uma olhada e esconder o sprite para que ele desapareça aqui da tela Então, vamos tentar isso aqui. Tudo bem. A chave, é uma chave, e agora eu posso clicar nela, e agora ela sumiu, muito bom. Esta é a parte de coleta e está funcionando muito bem. Agora precisamos ter um inventário onde exibamos todos os itens, por exemplo, essa chave aqui que está atualmente no inventário, no bolso, por exemplo, ou talvez ela tenha uma mochila, algo parecido Em seguida, precisamos exibir todos os itens no momento, temos apenas um item aqui, a chave, e isso precisa ser exibido no inventário. 34. 34 Mover a chave para o inventário: Agora queremos colocar nossa chave retirada no inventário. Então, vamos fazer um inventário. Deveria ser algo como uma mochila ou algo parecido Mas, na prática, acho que é apenas um retângulo com uma cor de fundo e pronto Vamos pintar um novo sprite. Então escolha tinta aqui, e depois fazemos um retângulo aqui Então, desse jeito, coloque aqui no meio. Talvez seja um pouco grande demais. Então, talvez algo assim. Agora não é a cor certa, eu acho. Vamos mudar isso para quase branco, eu diria. Então, brilho um pouco menor do que isso, tudo bem. Podemos ajustá-lo mais tarde. E também a posição e o tamanho não estão corretos. Então, vamos colocar o tamanho aqui oito, ver o que parece. E então vamos movê-lo para baixo aqui, e podemos ver que Avery ou sprite aqui está um pouco baixo demais. Então, vamos movê-la. Vamos ver o código dela. E quando definimos a posição inicial aqui, talvez possamos defini-la de 250 a 50 Vamos ver como isso se parece. Agora, um pouco menos do que isso. Um pouco mais preciso de B. Vamos começar de novo. Sim, talvez um pouco mais parecido com 42, e agora temos a posição correta, eu acho. Então, vamos controlá-la um pouco. Isso parece bom. E também isso pode ser um pouco menor, talvez. Então, nós apenas redimensionamos aqui, vamos até a seta aqui e depois redimensionamos nas bordas aqui, algo assim, ou até menor, talvez algo assim Eu acho que está tudo bem, então vamos deixar assim. Por enquanto, esse é apenas o plano de fundo da nossa mochila, digamos que precisamos mover a chave, que está aqui para este inventário se o jogador a pegar Aqui temos o código quando o jogador pega a chave agora no momento em que a escondemos, mas em vez de escondê-la, devemos movê-la para o novo local dentro da mochila aqui Vamos nos livrar da pele e, em vez disso, pegamos a chave que está invisível no momento. Não o inicializamos para mostrar. Então, por segurança, vamos fazer isso. No início, mostramos nossa tecla pressionada aqui no programa e, em seguida, ela fica visível aqui. Vamos parar o jogo e depois movemos a chave aqui para o inventário. Talvez aqui seja um bom lugar. E então vamos para o movimento e vamos para x y, e esta é a posição atual aqui. Nós apenas arrastamos isso aqui até quando o sprite clicou. Agora, o que precisa acontecer é que se o jogador clicar na tecla, ela se moverá daqui para cá, então estará na mochila E também essa chave escolhida é definida como dois, um. Podemos usar esse valor variável aqui, podemos usar na porta se o jogador bater na porta, então vamos começar de novo. E o problema aqui é que não definimos uma posição inicial, então é por isso que a tecla no momento, podemos clicar na tecla aqui no sprite e, em seguida, ela pisca Você olha aqui e pode ver que ela pisca. Portanto, está abaixo do nosso inventário, à direita. Então, vamos colocar esse sprite na camada traseira. Então, quando clicar em Então, em aparência, temos isso de ir para a camada frontal e isso mudará para a camada traseira aqui Isso estará sob a chave agora, deveria estar. Vamos ver onde está a chave. Não, ainda não é. Talvez também precisemos, temos essa camada posterior aqui. Devemos mudar também para ir para a camada frontal. Isso foi um erro. Aqui temos a chave, mas ela não está na posição correta, então precisamos colocá-la de volta neste lugar embaixo da cama. Vamos movê-lo para lá. Algo parecido aqui. Isso parece bom. Go two x y deve ser a posição correta, e essa é a posição inicial da nossa chave. Vamos experimentá-lo. Vá até a chave e tente pegá-la. Esse é o problema aqui. Não está na camada certa aqui, é mostrado aqui. Isso é um problema, mas podemos resolver isso mais tarde. E também temos um problema aqui porque a porta está trancada, devo tê-la trancado enquanto estava sonâmbulo, que é a mesma cor da porta Então isso também é um problema. Bem, agora vamos clicar no Sprite, e isso pelo menos funciona Então essa chave é movida para esse local aqui no inventário. Ok, vamos corrigir esse problema de camada primeiro. Então, aqui, é claro, precisamos voltar para trás , porque temos que ter certeza de que a chave está por trás do nosso personagem principal aqui. Mas então, se o movermos para o inventário, precisamos ter certeza de que ele também vai da camada superior para a camada frontal. Então, sempre que o movemos para cá, podemos simplesmente ir para a camada frontal. Então, vamos tentar isso. Então, agora está atrás de Avery. Tudo. Há um problema de cor aqui, mas vamos clicar nele e o temos em nosso inventário. Vamos nos livrar desse problema de cores. Então, obviamente, a chave tem uma cor, que também é a cor da porta. Então, precisamos mudar a cor da porta ou a cor da chave. Então, vamos mudar essa cor aqui em nosso pano de fundo. Então, podemos ampliar um pouco aqui. Ou talvez seja mais fácil mudar a cor da chave, então vamos verificar isso. Sim, é uma cor aqui, tudo da mesma cor, então talvez possamos selecionar tudo aqui. Selecione tudo no comando A ou Controle A no Windows e no Mac é o comando A. Então, basta selecionar tudo e podemos escolher um preenchimento diferente aqui. Talvez seja uma chave verde, algo assim. Então, o brilho é um pouco mais escuro, talvez essa duração, um pouco menor e um pouco diferente na cor, não é muito bonito, mas espero que resolva o problema Agora não é muito bom aqui. O contraste não é muito bom. Então, vamos torná-lo ainda mais escuro. Agora está melhor. Temos uma chave verde aqui. Então, vamos tentar isso. Ainda há uma colisão. Oh, eu o selecionei aqui e movi acidentalmente com as teclas do cursor Então, devemos desfazer isso. Vamos mudar o código e depois reiniciar o jogo. Ok, então não entendemos essa cor ou essa mensagem sobre a porta, então está tudo bem. Então, vamos clicar na chave e aqui está. Ok, agora precisamos ir até a porta, e é claro que ela ainda está trancada porque não implementamos algo para abrir a porta. Vamos fazer isso no próximo vídeo. 35. 35 Como desbloquear a porta: Agora que temos a chave em nosso inventário ou que o jogador tem a chave no inventário, podemos abrir a porta, pelo menos teoricamente, o jogador poderia abrir a porta, e é isso que implementamos neste vídeo É bem fácil. Já temos a variável aqui, defina a chave selecionada como uma, então podemos apenas testar isso. E para isso, precisamos ir até o jogador. E aqui temos a parte colorida tocante, e caso o jogador toque na cor da porta, diz Avery, a porta está trancada Eu preciso e assim por diante. E aqui está o que precisamos mudar. Portanto, precisamos verificar ou inserir um cheque aqui. Então, vamos controlar. E então isso se, e temos que verificar a igualdade da variável, é claro. Ou é melhor considerar não se o n, mas se então else, if then else e essa verificação de igualdade. Se for zero, então precisamos da variável, se a chave pega for igual a zero, então podemos dizer que a porta está trancada Mas se a chave escolhida não for zero, mas uma, podemos deixar o jogador falar outra coisa. Diga olá por 2 segundos ou talvez seja 3 segundos, e nós a deixaremos dizer. Como tenho a chave agora, posso abrir a porta. Agora eu posso destrancar a porta e finalmente sair do meu quarto. OK. Os segundos devem ser suficientes. E agora colocamos isso de volta nessa cor, embora tocante, essa cor marrom da porta aqui. Vamos tentar isso. Primeiro pegamos a chave, ou vamos tentar primeiro não ter a chave e depois tocar na porta, com as portas trancadas. Tudo bem. Isso é bom. Agora temos que pegar a chave aqui. Aproxime-se um pouco mais. Agora podemos pegar a chave, e então devemos ser capazes de abrir a porta. Como tenho a chave agora, posso destrancá-la e finalmente sair da sala, ou posso destrancá-la. Isso é melhor. O que vimos é que Avery deveria parar de andar É por isso que precisamos trocar o traje Avery B e o traje de pé para duplicar, e então também fazemos isso antes de dizer esta frase aqui Vamos ver se isso funciona. Vamos pegar a chave. Agora ela ainda está andando. O problema é que isso aqui faz com que o programa fique preso ou o script aqui fique preso por 3 segundos. Então essa animação aqui ainda está progredindo, então é por isso que isso não funciona Mas o que podemos fazer é definir que podemos nos livrar disso aqui, e podemos definir a variável walking para zero, definir Here set walking 20, então essa animação aqui neste código aqui não deve progredir. Vamos tentar isso. Primeiro pegando a chave. Isso é quase o suficiente. Agora eu tenho a chave e Avery está parada e dizendo a frase Isso é bom. Mas é claro que também precisamos sair da sala agora e ir para a próxima sala, como faremos no próximo vídeo. 36. 36 O menu de ação: Antes de trocarmos os quartos e Avery sair da sala e ir para a próxima sala Vamos melhorar um pouco nosso inventário para que você possa clicar em qualquer item do inventário no momento, é apenas a chave e, em seguida, obter um menu com comandos que você pode ou com ações que você pode usar nesse item específico. Então, neste caso, é a nossa chave. Para isso, estamos criando um novo sprite aqui. Primeiro, renomeamos esse sprite aqui porque é apenas um Sprite frio, vamos chamá-lo de n tree assim Então, outra coisa, precisamos corrigir. Vamos começar um jogo novamente. Basta ir até a chave, e agora o que você vê aqui, se eu clicar na tecla, você vê um piscar aqui, e este é o balão de pensamento O problema é que o balão de pensamento é visível aqui quando a chave é movida para o inventário Precisamos esconder o balão de pensamento se movermos a chave. Vamos fazer isso se tocarmos no ponteiro do mouse. Pense que é uma chave e então não pense nada. Aqui, estamos exibindo o balão de pensamento; se o p, o ponteiro do mouse estiver tocando na tecla e, se o sprite for clicado, precisamos ocultar Apenas duplique isso, não pense em nada. Antes de nos mudarmos para este novo local, não pensamos em nada e, dessa forma, não deve mais brilhar. Vamos tentar isso. Pare aqui, clique na tecla e ela não piscará mais. Isso é agora, então vamos criar um novo sprite para nossa ação. Essa ação será a ação de uso para que possamos usar a chave. E então, se você clicar em usar, a porta deve se abrir e Avery destrancar e Avery poderá ir para a próxima sala Vamos desenhar um novo sprite aqui e precisamos de algum tipo de retângulo Acho que vamos colocar um retângulo aqui. O preenchimento deve ser branco, assim, e podemos deixar a borda aqui, preta. Tudo bem. Mas é muito grande, claro. Vamos primeiro escrever o texto aqui. O texto será usado e, claro, precisamos definir o preenchimento aqui como preto para que possamos ler o texto. Em seguida, movemos isso aqui e selecionamos o retângulo novamente, tornando-o um pouco menor aqui, ainda muito grande. Então, talvez algo assim, e o sprite, é claro, seja muito grande no momento Então, digamos que seja 60%. Isso parece estar certo. Então, vamos movê-la aqui para este lugar para que ela apareça aqui quando a tecla for clicada no inventário Vamos ao código. Eu acho que a aparência aqui é muito boa. Eventos, quando clicados, precisamos ocultá-los primeiro porque não devem ser exibidos no início Escolha ocultar e mova isso aqui. Vamos tentar isso, e acabou. Isso é bom. Quando ele deve ser exibido? Ele deve ser exibido quando a chave é clicada, mas não quando a chave é clicada aqui, mas se a chave estiver no Vamos até a chave. Aqui temos quando esse sprite clicou, e aqui precisamos dizer a esse novo sprite que se mostre E já usamos algo parecido, como mandar outro sprite fazer alguma coisa E isso podemos fazer com a transmissão de mensagens. Aqui temos a mensagem de transmissão um, e precisamos colocá-la aqui e não vamos chamá-la de mensagem um, mas vamos chamá-la de ações de exibição e dessa forma. Também pode ser usado por um segundo botão, um segundo sprite, que executará uma ação Neste caso, só temos um, e vamos renomeá-lo aqui para usar assim Essa chave precisa fazer com que o sprite aqui se mostre, então transmitimos a mensagem e vamos usar o sprite E aqui precisamos receber essa mensagem. Quando eu recebo ações de exibição, exibo Então, desta forma, com o clique na tecla, ela será exibida. Vamos tentar isso e está funcionando. Então, sempre que eu clico aqui na tecla, ela é exibida aqui. Claro, isso não está correto. Ela não deve ser exibida se a chave não estiver no inventário. Então é isso que precisamos implementar agora. E isso é um simples “se”. Então, vamos às variáveis aqui, chave escolhida. Essa é a variável que precisamos verificar, então vá para operadores. Se a chave captada for igual a um, e agora precisamos de um controle if se antes e aqui se k captado for igual a um, então podemos fazer Às vezes, não é tão fácil colocar o if around blocks aqui. Eu simplesmente faço assim, e então eu movo o segundo if aqui abaixo deste if. Certifique-se de tê-lo assim, não aninhado , pois ele também só seria executado ou verificado aqui se a chave escolhida fosse igual a um, e isso, obviamente, não está Você precisa colocá-lo abaixo deste primeiro se. Certifique-se de fazer isso assim. Portanto, se a tecla escolhida for igual a um, podemos transmitir e, em seguida, os comandos de uso podem ser exibidos E quando o usuário clica em usar, talvez possamos simplesmente ocultá-lo Então, vamos olhar, é claro, e nos esconder, e então precisamos de um evento que esse sprite clicou em ocultá-lo Vamos tentar isso. Vamos até a chave para que possamos pegá-la. Agora que o temos no inventário, clicamos na tecla, o comando de uso, o botão de ação de uso é exibido e eu clico no botão e ele desaparece, não é mais exibido. Isso funciona. Mas agora, é claro, precisamos implementar algo que você ou o jogador precisem clicar aqui no botão de uso, e só então a porta poderá ser destrancada, e somente se Avery estiver realmente perto da porta, o jogador poderá destrancar a porta com uma chave usando esse uso da chave de uso, e então a porta poderá ser destrancada, mas somente se Avery estiver Então, vamos implementar isso no próximo vídeo. 37. 37 Como desbloquear a porta com ação de uso: No momento, a porta é destrancada assim que a chave é pega e Avery bate na porta ou toca na porta, então a porta é destrancada, e queremos mudar isso A chave deve ser usada na porta. Então, vamos começar o jogo novamente. Vá até a chave e pegue-a. E nesse caso, você não faz nada, é claro, porque Avery não está tocando na porta E se ela estiver tocando na porta agora , ela será automaticamente destrancada, mas queremos que ela seja destrancada sempre que a tecla for pressionada quando Avery estiver Então, o que precisamos fazer para isso? Precisamos acessar nosso sprite de uso aqui. E sempre que esse sprite de uso é clicado, nós o escondemos. Tudo bem. Mas também estamos transmitindo uma nova mensagem. Então aqui, transmita, não, precisamos de uma nova mensagem aqui, e essa nova mensagem será usada clicada E isso precisa ser, é claro, recebido pela Avery. Vamos até Avery, e quando eu recebo, uso clicou, e é aí que precisamos verificar se Avery está tocando a verificar se Avery está tocando Então, vamos introduzir uma nova variável aqui, criar uma variável apenas para essa noiva, e a chamaremos de porta tocante, e a definiremos sempre que a porta for tocada Então, neste caso, estamos configurando-a para uma porta de toque 1, e nesse outro caso, se a porta não for tocada, estamos configurando-a, é claro, para zero Vamos verificar se isso funciona. Vamos até a porta. Tocar na porta é um, e se eu me afastar da porta, é zero. Então isso funciona. E agora precisamos verificar aqui se uso clicou quando eu recebo o uso clicado, isso significa que o usuário clicou ou o jogador clicou em usar no Upright, então precisamos verificar se estamos tocando Então, vamos fazer um “se então”. Não sei se precisamos do estojo, mas vamos fazer isso com isso. E depois verificamos a igualdade, e agora precisamos da nossa variável. Então, tocar na porta, se tocar na porta é igual a um, então estamos tocando na porta e estamos recebendo o uso clicado e estamos E nesse caso, podemos dizer que, como tenho a chave agora, posso desbloqueá-la. Então, vamos passar isso daqui para isso, se então, e isso deve dizer esta frase aqui. Mas o problema é que , para fins de avaliação, estamos dizendo nada aqui o tempo todo Então, vamos remover isso temporariamente e começar o jogo novamente para ter certeza. Clicar em usar agora não deve fazer nada. Então está tudo bem. Então, agora precisamos tocar na porta, tocar na porta é uma, e agora clicamos em usar, e isso deve aparecer Esta é a porta que está aberta agora. Isso parece funcionar, muito bom. Vamos reiniciar o jogo e ir até a porta. A porta está trancada é exibida, então são k dois. Vamos embora sem tocar, e agora essa mensagem, essa bolha aqui permanece Então isso é um problema. Então, podemos simplesmente colocá-lo de volta aqui, se não tocarmos no outro caso, estamos apenas apagando a bolha Vamos ver se isso funciona. Vamos começar de novo, pegando a chave e depois usando-a ao tocar na porta E isso está funcionando. E eu também posso me afastar da porta. E se reiniciarmos o jogo e depois formos até a porta, ela deverá aparecer. Essa porta está trancada, então está funcionando também. Tudo bem, do jeito que está. Mas é claro que precisamos pensar outros itens que entram no inventário. E isso pressupõe que a chave esteja selecionada aqui alguma forma para que a peguemos e, em seguida, clicemos na chave e depois clicamos em usar Mas se tivéssemos outro item aqui, digamos que talvez tenhamos algo como uma maçã, clicássemos na maçã e depois clicássemos em usar, isso não funcionaria porque tudo pressupõe que esse uso seja clicado na tecla Precisamos generalizar um pouco aqui. Se tivermos mais de um item aqui em nosso inventário, precisamos verificar qual item foi clicado e para qual item essa ação de uso se destina Eu, por exemplo, uma maçã é usada, todo mundo precisa comer a maçã e não destrancar a porta, é claro. Isso é o que não está funcionando nesta situação especial aqui, como a que temos. A lógica é um pouco específica demais aqui. Precisamos generalizar a lógica aqui. Mas primeiro, vamos para a próxima sala, e lá podemos ter um segundo item que podemos pegar, e isso pode ser talvez a cozinha, o quarto ao lado, e lá podemos encontrar uma maçã, pegá-la e usar a maçã. 38. 38 Bloco de fala personalizado: Então, falta mais uma coisa aqui nesta tela. Se começarmos um jogo novamente, então vamos para cá, a porta está trancada. Primeiro temos que pegar a chave. Tudo está bem. Mas o problema é que , se pegarmos a chave e a usarmos, e não tocarmos na porta, nada acontece É exatamente esse o caso aqui e, nesse caso, precisamos dizer outra coisa. Talvez digamos que dobramos isso, e então digamos algo como, eu não posso usar essa chave aqui, e isso pode ser por 2 segundos aqui. Vamos fazer isso, pegar a chave, tentar usá-la sem tocar na porta E isso não funciona. Por que isso não funciona. É porque aqui estamos dizendo isso, mas o problema está aqui em nosso ciclo eterno, neste caso, não estamos tocando em cores Portanto, não toque na porta e, no caso, estamos dizendo nada aqui É por isso que o balão de fala foi imediatamente apagado. Esse é o problema aqui. Para resolver isso, quero refatorar nosso código. Refatorar isso já é mudar o código, mas não mudar Nesse caso, é como se tivéssemos uma flecha, temos um bug, por assim dizer, mas não estamos resolvendo isso nessa estrutura aqui, mas primeiro fazemos uma refatoração e depois podemos resolver com essa refatoração, podemos Vamos fazer isso. A ideia é ter um bloco personalizado aqui. Já fizemos isso, criamos um blog e chamamos esse bloco de falar. Também podemos fazer assim, falar em letras minúsculas, e o que também podemos fazer é adicionar entradas aqui Assim, podemos adicionar um número ou entrada de texto. Podemos adicionar uma entrada de bleen ou adicionar um rótulo. Então, vamos nos concentrar neste primeiro, adicionar uma entrada. A primeira entrada será a mensagem real. Então, chamamos isso de mensagem, e precisamos de uma segunda entrada para esse bloco, que é chamada de duração, e essa é a duração do balão de fala que os balões de fala exibiram Portanto, temos dois parâmetros aqui. Então, a primeira é a mensagem que deve ser falada e a segunda é a duração. Então, vamos clicar em, e agora temos nosso bloco personalizado aqui. Então, temos essa definição. Então, vamos movê-la até aqui. Portanto, temos espaço suficiente para implementá-lo. Como implementamos isso? Podemos usar nossos parâmetros aqui. Temos mensagem e duração, e podemos usá-las como uma variável. Podemos arrastar isso aqui e colocá-lo em algum lugar onde também sejam permitidas variáveis. Vamos primeiro falar aqui. Também é assim que se chama, e vamos dar uma olhada e ouvir isso, diga olá aqui. Mas não queremos dizer olá aqui, mas queremos dizer uma mensagem. Tudo o que for fornecido aqui como primeiro parâmetro, e veremos como fazer isso, será definido aqui, será falado. Vamos chamar esse bloco aqui com esse parâmetro de mensagem. Então, aqui, dizemos que eu não posso usar esqui aqui por 2 segundos, e estamos tirando isso do ls e vamos até meus quarteirões, estendendo o alto-falante aqui para o outro. E agora podemos fornecer dois parâmetros. A primeira é, como eu disse, a mensagem, então copiamos isso para aqui, então essa será a mensagem, e agora podemos experimentá-la. Então, pegue a chave. E usamos a chave aqui. Então, talvez você tenha visto isso. Eu posso fazer isso de novo, e você vê o balão, o balão de fala, mas ele é imediatamente apagado Por que isso? É claro? Por causa disso, diga aqui. Nós podemos nos livrar do calor. Isso significa que nada excluirá ou apagará o balão de fala Então nos livramos disso e tentamos de novo, e, e agora isso permanece, é claro, vai ficar para sempre, por assim dizer, ou pelo menos até que haja outra mensagem para falar. Então ela está sempre falando isso agora. Não posso usar essa chave aqui. Mas é claro que podemos usar a chave aqui e agora ela está dizendo isso aqui. E agora ela não está dizendo nada. Aqui, dizemos que, como tenho a chave agora, posso desbloqueá-la e finalmente sair do meu quarto, e isso é dito por 3 segundos e após 3 segundos, esse balão de fala é excluído É por isso que está desaparecendo aqui. De qualquer forma, precisamos levar em consideração a duração aqui para que também possamos substituí-la pelo nosso novo bloco de fala. Vamos fazer isso. Para que isso funcione, temos que esperar Então, esperamos segundos, e esses segundos aqui são a duração. Então, vamos arrastar a duração aqui, o segundo parâmetro a ser aguardado. E depois de esperarmos o tempo fornecido aqui nos parâmetros, podemos dizer nada Parece digitar e, em seguida, excluir o texto aqui, para que fique vazio. Uma mensagem, aguarde a duração que recebemos do chamador aqui e depois não diga nada Aqui, podemos dizer que talvez 2 segundos, e para este, podemos arrastar isso aqui e primeiro copiamos essa mensagem para o primeiro parâmetro aqui. E então o segundo será de 3 segundos aqui. Então, agora podemos nos livrar desse e substituí-lo pelo nosso bloco personalizado. Vamos tentar isso. Vamos pegar a chave, e então podemos usá-la aqui, e deveríamos, eu não posso usar essa chave aqui, e então ela está desaparecendo Então é isso aqui. Mas agora vamos até a porta e aqui podemos usar a chave. Como tenho a chave agora, posso destrancá-la e finalmente sair do meu quarto. Tudo bem. Tudo bem. Vamos nos livrar dessa frase aqui e substituí-la também pelo nosso bloco. Nós arrastamos isso aqui, falamos. O primeiro parâmetro é, obviamente, nosso texto, e o segundo, talvez possamos dizer, vamos esperar 3 segundos porque é uma frase longa e precisamos de 3 segundos para lê-la. O jogador médio pode lê-lo em 3 segundos. Vamos tentar isso. Indo até aqui, se estivermos tocando na porta, a porta está trancada, e então Avery ainda está andando, como você pode ver, e eu não consigo mover Avery quando esta mensagem é exibida aqui Não consigo movê-la. Se eu entrar mais na porta, também terei problemas para sair da porta. Então, essa não é uma boa experiência para o usuário, eu acho. Qual é o problema aqui? Não está reagindo às minhas teclas de seta aqui. Por que isso? Porque estamos esperando aqui. Se ligarmos para falar, estamos esperando por essa duração, e se for 3 segundos aqui, então estamos esperando aqui, estamos bloqueados aqui, 3 segundos, e é por isso que todo esse loop eterno aqui não continua, e não podemos entrar no se a seta esquerda for pressionada, se a tecla, a seta direita pressionada. Isso não é possível porque está preso aqui e precisa aguardar a duração para continuar aqui. Isso não é legal, mas há uma maneira de contornar isso. Podemos fazer com que seja assíncrono. O que significa que não precisamos bloquear aqui, mas ainda assim, após a duração, podemos excluir o balão de fala aqui. Como fazemos isso? Estamos trabalhando com mensagens de transmissão. Vamos até os eventos e criar uma nova mensagem de transmissão. Se dissermos a mensagem, é claro que ela é exibida e, em seguida, temos que esperar em outro evento. Aqui, temos uma nova mensagem e eu a chamo de remover a fala, e isso fará a espera por nós. Isso fará isso aqui. Mas aqui podemos simplesmente transmitir. Então, podemos reagir a essa mensagem quando eu receber. Quando recebo essa nova mensagem de remoção de voz, podemos esperar pela duração e depois não dizer nada. Vamos tentar isso. Parece estar funcionando, mas não completamente, porque o balão de fala desaparece imediatamente Então, por que isso? É porque essa duração aqui não está levando em conta, mas aqui é sempre zero. Porque esse é um parâmetro aqui nesta função, nesse bloco personalizado, mas não é conhecido aqui quando eu recebo a fala de remoção. Precisamos de alguma forma transferir esse valor aqui, esse valor de duração para isso quando eu receber o manipulador aqui Como fazemos isso com uma variável, é claro. Vamos criar uma nova variável e chamá-la de remover tempo de fala ou, digamos, duração, ou vamos chamá-la de duração da fala. É mais curto, não para todos os sprites, porque não precisamos disso para os outros sprites apenas para esse sprite, e então temos essa nova E, claro, precisamos configurá-lo aqui. Então, quando entendemos a duração da fala, podemos simplesmente configurá-la aqui, definir a duração da fala em duas durações para o segundo parâmetro aqui. E agora podemos usá-lo também aqui. Portanto, nossa variável de duração da fala precisa estar aqui, e podemos nos livrar disso. E após esses segundos de duração da fala, estamos excluindo esse balão de fala aqui. Vamos tentar isso. Agora ele é excluído após os 3 segundos, mas não se estivermos tocando, se estivermos tocando, ele sempre será falado novamente, então é por isso que não está desaparecendo Mas eu acho que está tudo bem. Então, se não estivermos tocando na porta , ela desaparecerá após 3 segundos E o que é bom aqui é que ainda podemos controlar o personagem mesmo que o balão de fala seja exibido. Isso é muito. Nós sempre temos o controle aqui. E ainda podemos mover Avery, mesmo se exibirmos o balão de fala E temos o controle aqui da duração, por quanto tempo ela será exibida. Então, isso é muito bom, e temos esse bloco personalizado de fala aqui que podemos usar em todos esses lugares. E se quisermos mudar alguma coisa, a funcionalidade, se quisermos melhorar isso, podemos simplesmente alterar esse bloco personalizado aqui, e então isso será alterado para todos os chamadores Então, aqui estamos usando isso. Vamos ver se temos outra palavra a dizer aqui. Não, não temos, então tudo bem, então substituímos todas as ocorrências de digamos, por nosso novo bloco personalizado aqui. Isso é muito bom. Definimos um bloco personalizado com dois parâmetros aqui, mensagem e duração, e ambos os parâmetros são usados aqui. A primeira coisa que fazemos aqui é definir essa variável local para a duração fornecida aqui. Então estamos dizendo a mensagem que também foi fornecida aqui, e aqui estamos fazendo essa transmissão, e estamos fazendo essa transmissão porque aqui, isso não está mais bloqueando nossa função aqui, nosso bloqueio aqui. Portanto, isso é totalmente sem bloqueio aqui. É só fazer uma transmissão e também há outro comando aqui. Transmita e espere, e isso bloquearia. Então, podemos experimentá-lo aqui. Então, estamos movendo isso aqui e, em seguida, removemos a fala. Se fizermos assim, remova a fala e espere, você verá que agora ela ainda está bloqueando. Então essa não é a maneira correta de fazer isso. Mas aqui estamos bloqueando nosso loop eterno e não podemos lidar com todos os comandos principais aqui. É por isso que não é a solução certa aqui, então precisamos dessa transmissão sem esperar. Porque não está esperando aqui que esse receptor termine. apenas continuando esse ciclo eterno aqui, e ainda podemos controlar Avery Esse foi o nosso novo bloco personalizado com parâmetros, e essa é uma maneira muito boa de tornar o código mais fácil de manter e melhor estruturado, e você tem menos esforço para fazer alterações aqui Dessa forma, é uma boa prática de programação ter uma funcionalidade usada em vários lugares em uma função ou, nesse caso, é um blog personalizado. Você pode fornecer parâmetros a esse bloco personalizado aqui e, dessa forma, podemos fazer cada fala e, ao mesmo tempo, controlá-la. 39. 39 Mude a sala: Vamos mudar os quartos. E para isso, precisamos, é claro, um novo cenário, então vamos ao palco E aqui temos os cenários. Só temos um no momento, quarto dois. E agora estamos fazendo o upload de outro. Eu gerei uma imagem de cozinha ou cozinha com a ajuda da IA com o co-piloto, respectivamente D três. Aqui está, escolha um pano de fundo e, em seguida, faça o upload do pano de fundo Escolha aqui uma imagem do seu disco rígido. Eu fiz este com a ajuda da IA e podemos usá-lo neste jogo. Aqui está. Preciso redimensioná-lo um pouco. Não tem o tamanho correto. Controle A ou comando A, e então selecionamos a imagem, e então podemos esticá-la um pouco e também movê-la para cá, onde, por exemplo, a cadeira e a mesa não estão visíveis, não estão mais visíveis aqui, ou talvez apenas essa parte da cadeira, e então podemos esticá-la um pouco. Eu acho que isso é aceitável. Mas é claro que você pode gerar sua própria imagem ou pintar sua própria imagem de uma cozinha ou de onde quiser. Eu o criei com a ajuda da IA. Você também pode. Mas você também pode, como eu disse, pintá-lo sozinho ou baixá-lo de uma fonte diferente e carregá-lo aqui como aquele pano de fundo de upload e depois escolhê-lo no seletor de arquivos Este foi o localizador porque eu estou em um MC aqui no Windows, você tem o Windows Explorer Para que você possa fazer upload de imagens aqui. Pode ser um JPAC ou PNG ou também pode ser um SVG. Então, agora temos o pano de fundo aqui como um segundo. Então, o primeiro será esse. E, claro, no início do jogo, precisamos configurá-lo para o primeiro. Então, vamos entrar no código do estágio aqui. Assim, você pode mudar de cenários para código. E aqui também podemos ter esse evento quando clicar em Go, e aqui mudamos para o primeiro pano de fundo, trocamos o segundo plano de fundo Cozinha agora, quarto dois, então está correto, então sempre voltamos para nosso primeiro quarto aqui. E, claro, se resolvemos o quebra-cabeça da primeira sala, precisamos mudar os cenários aqui Então, vamos até Avery, e esse é o caso em que o quebra-cabeça está resolvido, já que eu tenho a chave agora, posso desbloqueá-la e finalmente sair do meu quarto E depois disso, Avery pode mudar de quarto e ir para a cozinha E isso é muito fácil. Mude o pano de fundo para a cozinha E dessa forma, temos a troca da sala. Então, vamos tentar isso. Primeiro resolva o quebra-cabeça. Clique na chave. Use-o. É muito cedo porque não estamos na porta ou não na frente da porta, e agora devemos usar a chave e depois ir para a segunda sala, que é a cozinha. Aqui podemos mover Avery como antes, e ela pode explorar a cozinha aqui Então isso não é problema. Mas é claro que precisamos de um objeto aqui, e precisamos de outro quebra-cabeça aqui, é claro, para ser resolvido. Para sair de casa, talvez ela devesse ir para a escola e sair de casa. Ela deve encontrar algo para comer, levar para a escola, talvez uma maçã, ou talvez queira levar sua mochila escolar com ela. Então é isso que precisamos criar aqui. Então, primeiro, precisávamos mudar o pano de fundo, e isso é feito com muita facilidade com esse bloco, mudar o pano de fundo para a cozinha Então, também podemos ir para o próximo cenário. Isso também é o que poderíamos fazer. Mas acho que aqui é mais fácil fazer assim. Então, para ir para um cenário específico porque você pode querer voltar para a outra sala, e então precisamos ir para uma sala específica Então, vamos nos livrar disso. E basta mudar o pano de fundo para a cozinha. Mas aqui talvez tenhamos que fazer outra coisa. E também, se quisermos sair desta sala, temos que fazer outra coisa. E é por isso que devemos definir um novo bloco aqui, que eu chamo de go to Room. E aqui podemos, por exemplo, ter um número ou uma entrada de texto, que será a sala para onde ir. Então, vamos fazer assim e definir ir para a sala aqui, trocar de pano de fundo Deveríamos fazer isso aqui. E aqui podemos escolher número ou texto. Troque o pano de fundo dois. Então, isso deve estar aqui neste caso, cozinha. Portanto, é melhor renomear isso. Então, clique com o botão direito em definir e adicione-o. Então, aqui chamamos a primeira sala de parâmetros. Isso é muito melhor. Então temos essa sala, que é um texto, o nome da sala, e precisamos chamá-la aqui, para a sala depois da palestra, e aqui a colocamos na cozinha. Então, vamos tentar se isso funciona. Então, voltamos ao início. Precisamos resolver o primeiro quebra-cabeça. Vamos até a porta, use a chave. Estamos aqui e funciona. Isso é bom, então também podemos fazer outra coisa aqui. Troque o segundo pano de fundo e, em seguida, o que é fornecido como parâmetro da sala aqui Por exemplo, poderíamos colocar alguns objetos aqui. Vamos criar um novo sprite, e desta vez será essa maçã aqui Vamos colocar a maçã. Nós o tornamos um pouco menor, 60%, talvez. Agora isso é muito grande, tipo 40, 40%. No código, precisamos configurá-lo como oculto se você clicar. Então, vamos esconder isso primeiro. E então podemos colocar a Apple em algum lugar. Vamos colocá-lo aqui e torná-lo um pouco menor, talvez 30%. Isso é melhor. Então, vamos reiniciar o jogo e a maçã desaparecerá. Muito bom. E agora, quando mudamos para a cozinha, a maçã deve ser mostrada. Como fazemos isso? Estamos transmitindo. Então, aqui devemos transmitir que mudamos a sala. Vamos aos eventos e depois transmitimos aqui. quarto foi alterado. Agora, é claro, precisamos saber qual sala é a sala atual. Estamos definindo uma nova variável e chamamos essa sala atual e essa é uma variável para todos os sprites, é claro Precisamos definir a sala atual aqui para este parâmetro fornecido, definir a sala atual com duas salas aqui. Agora podemos usar essa sala ou a sala atual para mostrar a maçã. Eventos, quando recebo uma mudança de quarto , verificamos com um controle se a variável de quarto atual está definida como duas cozinhas. O quarto atual é igual a cozinha. Então podemos mostrar a maçã. Vamos tentar isso. Comece o jogo. Pegue a chave, vá até a porta, e agora temos a maçã aqui. Muito bom. Trocamos os quartos com sucesso. Mostramos a maçã, e esse é o nosso código para vestiários por enquanto. Isso será expandido, é claro, mas, por enquanto, podemos mudar da sala inicial, do quarto para a cozinha. 40. 40 Como mudar objetos de jogo para clones: Agora que temos o segundo quarto e a maçã, vamos mudar algumas coisas aqui. No último vídeo, adicionei a maçã como sprite aqui e aqui neste vídeo Eu removi a Apple novamente. Por quê? todos os objetos do jogo com clones desse sprite Porque queremos implementar todos os objetos do jogo com clones desse sprite aqui. Qual é a razão por trás disso? O motivo é que podemos então lidar com todos os objetos da mesma maneira, e também podemos usar listas, e como fazemos isso, mostrarei neste vídeo. Primeiro, temos esse sprite aqui, a chave, e adicionaremos outra fantasia aqui E o segundo traje já está aqui. É a maçã. Então, se você ainda não tem, escolha uma fantasia e depois escolha a maçã aqui. Então temos duas roupas aqui. A primeira é a chave, a segunda a maçã. E a ideia é ter para cada objeto diferente, temos outro traje aqui. OK. Então esse é o primeiro passo para que tenhamos duas roupas diferentes aqui. E, claro, no início do jogo, precisamos escolher a roupa certa. Então, vamos fazer isso quando essa noiva é clicada, não é a função certa aqui Mas ao clicar, quando a bandeira é clicada, precisamos definir a roupa certa para nosso primeiro objeto Então, vamos mudar o traje para H, e então podemos começar um jogo, e ele será uma chave novamente, e não há diferença no jogo. Ainda podemos ir até a porta e usar a chave, e aqui a maçã, é claro, está faltando. Mas como exibimos a maçã aqui? É aí que os clones são úteis, então vamos controlar e criar um clone Esse é o bloco que precisamos, e precisamos criar, é claro, alguns objetos aqui, alguns clones. A ideia dos clones é que você faça uma cópia do sprite, neste caso do mesmo sprite meu, então essa será Mas também renomearemos o sprite aqui. Digamos que seja um objeto de jogo para que seja mais genérico do que apenas a chave. Ok, então podemos criar um clone dessa chave desse objeto do jogo aqui, e faremos isso, é claro, no início do jogo Então, poderíamos simplesmente criar, digamos, dois clones aqui, e fazer assim E, claro, também podemos fazer isso com um loop de repetição. Então repita dez vezes aqui. Então, talvez possamos repetir duas vezes. E então, apenas um clone de criação é suficiente porque estamos repetindo isso duas vezes, então temos dois Como reconhecemos os clones aqui? Então, quando eu começo, não vejo nenhuma diferença. A primeira coisa que precisamos fazer é esconder o sprite original. Então, vamos dar uma olhada aqui e depois nos esconder. Então, estamos escondendo a chave, neste caso, a primeira fantasia. Então, a chave sumiu. Estamos criando dois clones. O primeiro clone será a chave. O segundo clone será a maçã, é claro. O que precisamos agora é, claro, do evento em que eu começo como um clone Então, este. O que eu faço quando começo como um clone? Precisamos fazer o mesmo que quando a bandeira é clicada. Então, movemos esse bloco inteiro aqui para quando eu começar como um clone, e podemos nos livrar desse aqui Então, agora dois clones são criados, e para cada clone, quando o clone é iniciado, isso é isso é Vamos ver o que isso faz com o nosso jogo. Está exibindo a chave novamente. Isso é bom. Vamos tentar se podemos pegar a chave. Isso também está funcionando. Mas vemos que aqui, na verdade , a chave ainda está lá. Esse é o clone da chave e não a primeira chave em si. Obviamente, como o primeiro sprite, o sprite original aqui, está oculto e os sprites ocultos não podem ser clicados, então é claro que esse é Mas a segunda chave aqui é o segundo clone, claro, mas o segundo, o segundo objeto tem que ser o apo Como podemos diferenciar aqui entre o primeiro clone e o segundo clone . Isso é muito importante. O que usamos para isso, uma variável, é claro, vamos criar uma variável aqui, e não precisa ser para todos os sprites, mas apenas para esses sprites Como é apenas para esse sprite, também é para os clones Portanto, ele também está acessível para os clones, e vamos chamá-lo apenas de índice E estamos aumentando o índice aqui em nosso ciclo de repetição. As variáveis mudam. Então, vamos mudar o índice por um. Obviamente, também definimos o valor inicial aqui como zero. Então, o primeiro índice será um e, em seguida, o clone será criado, o primeiro clone e, novamente, índice será alterado por Então, serão dois e, em seguida, o segundo clone será criado E para verificar qual valor está disponível aqui em nosso clone, dizemos a variável aqui Então, vamos dizer olá e, em seguida, índice variável, e veremos qual índice é mostrado então. Então, vamos começar o jogo. Então, é claro, nada é mostrado porque fazemos o show depois do S, então vamos mudar isso. Primeiro temos que mostrá-lo, e então podemos dizer, caso contrário, o balão, o balão de fala, não será visível. Então, vamos fazer isso. E por que não está funcionando? Porque estamos pensando aqui. E se você não pensar nada , o balão de fala também não estará mais visível. Então, vamos primeiro, nos livrar disso aqui, e depois vamos ver. Então aqui temos dez, por que são dez? Porque definimos a variável errada aqui, então não é a sala atual, mas tem que ser um índice, é claro. Então, vamos tentar novamente. E agora temos dois, é claro. Não vemos o outro? O primeiro clone precisa dizer um, segundo clone precisa dizer dois, mas é claro que eles estão no mesmo local, então é por isso que isso não funciona Temos que colocá-los em locais diferentes para ver se isso realmente funciona. Vá para x e y e y tem que mudar dependendo do índice. O primeiro clone deve estar em um local específico, um local y específico, e o segundo deve estar em um local diferente Vamos fazer isso com os operadores aqui e multiplicar pelo índice Então, vamos pegar o índice aqui. Isso não é multiplicar Vamos multiplicar esse índice, e então podemos dizer 40, e então vamos para y 40 vezes o índice Então, primeiro, o sprite deve estar em 40, segundo deve estar em 80 Então, vamos ver como isso parece. Agora podemos ver que eles têm índices diferentes. O primeiro tem um, claro, o segundo tem dois. E a segunda deve ser uma maçã e não uma chave. Portanto, precisamos trocar de roupa dependendo do índice. Então, o primeiro objeto, é claro, tem que ser o traje principal. A segunda tem que ser a fantasia de maçã. Como fazemos isso? Isso é bem fácil. Só vamos ver os looks e depois a próxima fantasia aqui. Então, nesse ciclo de repetição, vamos mudar para o próximo traje aqui, e vamos ver como isso funciona. Não funciona porque trocamos de roupa aqui também. Então, vamos remover isso. Aqui, mudamos para a próxima roupa e agora ela funciona. Então, o Índice Um é o traje principal. Nas próximas duas está a fantasia de maçã. Dessa forma, podemos dizer qual clone é qual. A primeira é a chave, a segunda é a maçã, e a primeira está na primeira sala, a segunda deve estar na segunda sala, claro, e é isso que faremos no próximo vídeo. 41. 41 listas de apresentação: Então, como agora temos nossas duas roupas aqui no início, podemos fazer um pequeno ajuste aqui para garantir que a primeira seja sempre a roupa principal. Precisamos trocar de roupa no início. Portanto, troque a roupa não por maçã, mas por chave, e talvez devêssemos fazer isso depois de escondermos a chave ou o sprite aqui, o sprite original Então, vamos tentar isso, e isso deve ficar bem. O que precisamos fazer agora é garantir que os dois objetos diferentes estejam agora colocados no local correto na sala correta. Então, a primeira chave tem que ir aqui novamente, e a segunda precisa ir para o segundo pano de fundo Vamos mudar para isso em algum lugar por aqui. Então, primeiro, o primeiro clone deve estar visível na primeira sala O segundo deve estar visível na segunda sala desta cozinha aqui. Então é isso que precisamos alcançar primeiro. E como fazemos isso? Estamos introduzindo listas. Então, o que são listas de listas são como variáveis. É por isso que podemos encontrar listas aqui sobre as variáveis. Aqui criamos uma variável e, aqui, fazemos uma lista. Então, vamos fazer uma lista. E temos algo semelhante para criar uma variável. Talvez possamos nomear essa lista como salas de objetos. Então é aí que armazenamos nossas salas iniciais para os objetos. E como fazemos isso? Eu vou mostrar mais tarde. Ok, para todos os sprites, não, não precisamos disso para todos os Sprites Só precisamos dele para o sprite aqui. Portanto, Sala de objetos significa que, para cada objeto, precisamos armazenar em qual sala o objeto começará. Ok, aqui temos a lista, a exibição da lista. Você pode alternar isso com esta caixa de seleção aqui. Então, se você não quiser que a lista apareça no jogo, basta desmarcar essa caixa de seleção O que temos aqui? adicionar itens manualmente aqui a essa lista. Então, com essa vantagem aqui. Você pode simplesmente adicionar quantos itens quiser. E dentro de cada uma dessas linhas aqui, você pode simplesmente escrever algo como para uma variável, por exemplo. Então, como este texto aqui ou como um número. Ok, então temos uma lista de variáveis, por assim dizer, e essa lista está aqui, aqui, você pode usá-la com essas funções aqui, com esses blocos. Então, o que você pode fazer com uma lista? Você pode adicionar outra entrada à lista? Pode excluir uma entrada na lista. Você pode limpar a lista excluindo tudo e também pode inserir algo em um local específico dentro da lista, em um índice específico. Então, talvez você possa inseri-lo aqui no final ou em algum lugar no meio, e é isso que esse bloco faz aqui. Além disso, o que você pode fazer é substituir um item por uma entrada aqui na lista em um local específico em um índice. Além disso, você pode obter um item específico da lista em um local específico. Aqui está o índice, e com isso aqui, você obtém o item na posição um aqui neste exemplo, ou digamos dois, e podemos inserir algo aqui e verificar o valor. Aqui podemos escolher listas diferentes. No momento, temos apenas uma lista, então entre aqui na sala de objetos. Essa lista deve conter, para cada objeto em qual sala esse objeto deve ser colocado no início. Se você clicar aqui, poderá ver quais valores estão dentro da lista neste local no local dois no Índice dois. Clique neste bloco e você pode ver que na posição dois, há essa string aqui. Talvez você também possa fazer isso assim. Esse é o primeiro, esse é o segundo e esse terceiro. E aqui você pode ver, se você clicar nele, você tem o segundo. Se você escolher um para o índice, obterá o primeiro e, claro, se escolher três para o índice, obterá o terceiro e assim por diante. Então, o que podemos fazer com isso, podemos armazenar nessa lista em qual sala cada um dos objetos deve começar e em qual deve ser colocado. Vamos fazer isso e, para isso, precisamos receber a mensagem, a sala mudou. Então, vamos aos eventos quando eu receber uma mudança de quarto. Então, temos que definir a visibilidade do nosso sprite aqui para ser mais específico do clone É por isso que precisamos considerar, é claro, essa lista aqui. Portanto, precisamos primeiro alterar as entradas na lista. Então, o primeiro cômodo da chave será o quarto, o segundo será a cozinha e um terceiro objeto que não temos no momento. Então, podemos apagar essas entradas aqui. Ok, temos um quarto para a chave e cozinha para a maçã, e como obtemos ou como verificamos o quarto correto? Isso é, claro, um se estivesse aqui. Então, se não, e verificamos a igualdade, então isso aqui. E o primeiro operante será o item da sala de objetos, e aqui, é claro, precisamos pegar o índice Portanto, o índice será diferente para a chave e a maçã. Para a chave, será uma. Portanto, o item um da sala de objetos será o quarto e, para a Apple, será o item dois da sala de objetos, que será a cozinha. E aqui temos, é claro, que verificar a sala atual. E se mudarmos os quartos , o quarto atual mudará para a cozinha. Então é isso que temos que verificar aqui. Vamos abrir um pouco de espaço aqui para isso. Oh, eu não tenho o se então, mas somente o se então, então vamos ver isso aqui. Vamos trocar isso e isso que não precisamos mais. Portanto, se o item no índice da sala de objetos desta lista aqui for igual à sala atual. Então, para o segundo quarto, essa será a cozinha. E para o primeiro quarto, acho que não definimos o espaço atual para o primeiro quarto. Então, vamos verificar Avery. E no início de Avery, quando clicamos em go, agora, não definimos a sala atual Então, o que podemos fazer é ir para a sala atual. Então vamos para meus quarteirões, vamos para o quarto e, no início, vamos para o quarto. Então é aqui que começamos, então devemos ir lá, ir para o quarto, então o quarto atual, será o quarto no início. E dessa forma, temos como chave, temos a igualdade aqui. Então, no início, será o quarto, e depois o segundo quarto, será a cozinha. E se isso for igual, então precisamos nos mostrar aqui, mostrar o clone Caso contrário, escondemos o clone. Ok, vamos começar um jogo e experimentá-lo. E aqui ainda temos dois objetos. Por que isso? Vamos clicar neste objeto de jogo do sprite aqui, e vemos que este é o original e também está visível E aqui está a chave, o primeiro clone. Esse é o segundo clone. Então eu não trabalhei. Quando recebo uma troca de quarto , essa verificação é feita. índice do item da sala de objetos é igual à sala atual, e mostramos, caso contrário, ocultamos Por que não está funcionando? Porque aqui mostramos cada vez que criamos o clone, vamos nos livrar do programa aqui Vamos tentar novamente. Agora temos essa chave aqui, e esse é o sprite original E temos a maçã aqui, o que também está errado. Então, vamos verificar novamente se o item indexa a sala de objetos, e aqui também podemos nos livrar desse índice de 40 vezes. Não precisamos mais disso. Ambos os objetos estão no mesmo lugar aqui. Mas tudo bem, porque o primeiro deve estar na primeira sala, o segundo na segunda sala, então está tudo bem. Então, vamos resolver o primeiro problema de que o sprite original ainda está visível aqui, o que não é bom Não deveria estar visível porque a escondemos aqui. Mas o problema é que ele também recebe essa troca de quarto e depois se mostra. Isso é o que precisamos evitar aqui Vamos às variáveis e criar uma nova variável, e eu a chamo de original, e é só para esse sprite, e isso é para que o sprite original seja capaz de se identificar Vamos configurá-lo aqui no início. O original está definido como um aqui. E aqui, quando eu começo como clone, estamos configurando para zero Portanto, cada clone terá o valor zero, I é original e o original terá o valor um E agora podemos fazer um se aqui. Então, se, e agora novamente, verificarmos a qualidade, consideramos que é original. E nós só verificamos os clones aqui, então é por isso que definimos isso como zero Então, se o original é zero, que é sempre o caso, se for um clone, então podemos fazer isso Caso contrário, não faremos isso. Vamos verificar novamente e a chave sumiu. Então está tudo bem agora, mas no momento, nada é exibido aqui. Eu começo como um clone. Então, vamos duplicar isso por enquanto. E coloque aqui. Então, se essa verificação da sala for positiva é verdadeira, mostramos o clone, caso contrário, ocultamos o clone Vamos tentar isso e funcionará. Então aqui temos o clone, o clone da chave, o original está escondido, porque o escondemos Nesse caso, não será mostrado aqui porque temos essa verificação do original. E também, quando eu comecei um clone, nós também fazíamos isso aqui Então, aqui temos uma duplicação, é claro É melhor se livrar dessa duplicação criando um Aqui, vamos fazer isso. nome do bloco será a visibilidade definida, e isso definirá a visibilidade, é claro, dependendo dessa condição aqui. Então, só temos que mover isso aqui para este bloco personalizado de visibilidade definida aqui. E então chamamos de definir visibilidade aqui. Nesse caso, se não for o original, definimos a visibilidade aqui na mudança de sala e também aqui no início, fazendo o mesmo chamando esse bloco. Então, aqui está a visibilidade definida e agora tentamos novamente. E está funcionando. Vamos primeiro nos livrar dessa lista aqui. É um pouco grande demais aqui, então vamos esconder isso. Vamos também esconder isso aqui. E pegamos a chave primeiro. Vamos ver se isso funciona, funciona. Nós vamos até a porta. Use a chave, e aqui também temos a maçã, para que funcione conforme o esperado agora. Portanto, agora podemos alterar a visibilidade dependendo dessa lista aqui. Então, vamos mostrar novamente a lista da sala de objetos e torná-la um pouco menor aqui. Portanto, temos quarto para o primeiro clone e cozinha para o segundo clone E essa verificação dinâmica, se quando a sala mudou , estamos definindo a visibilidade dos objetos do jogo aqui usando esta lista aqui e isso funciona conforme o esperado. 42. 42 Como colocar os objetos: Agora que temos a visibilidade dos objetos correta , a maçã ficará visível na segunda sala e a chave estará visível na primeira sala. Aqui, aqui está a chave. Eu posso pegá-lo e depois usá-lo na porta. Aqui temos a maçã. Está tudo bem. Mas, como você pode ver, a maçã não está no local certo aqui, x e y da maçã não estão corretos. Como podemos corrigir isso? Como podemos corrigir isso com mais listas? Vamos escolher nosso sprite de objetos do jogo aqui e criaremos mais listas locais Local significa somente para o sprite, então escolha isso, e o primeiro será o objeto x. Então, um mapeamento do objeto do índice para a coordenada x e, é claro, uma segunda lista para a coordenada y. Então, objete y para essa barra e agora temos duas listas aqui. Podemos torná-los um pouco menores. Em cada lista, precisamos, é claro, de duas entradas porque temos dois objetos. A primeira entrada será aqui a coordenada x da nossa chave. Vamos verificar onde isso está. Essa deve ser essa coordenada aqui, 102 e y é -28 Aqui temos que inserir -28. Para a maçã, temos que verificar. Aqui podemos ir para a segunda cozinha de fundo. E podemos aqui mover nossa chave. Talvez primeiro mudemos para maçã aqui para termos a maçã. I. E coloque-o em algum lugar aqui. Então aqui podemos ver que y é 11 e X é 127, isso que inserimos aqui, 127, e aqui o y para a maçã é 11. Então, agora que temos nossas listas aqui, podemos voltar ao código. Tentamos começar de novo e ver se está no estado inicial correto ou se você esqueceu alguma coisa, não, está tudo bem. Aqui temos a coordenada e temos que usar as coordenadas aqui em nosso conjunto definido de visibilidade aqui Se o objeto deve ser mostrado, por exemplo, uma chave ou a maçã deve ser mostrada, precisamos ir para X e Y. Movimento, ir para x y. Precisamos obter essas coordenadas aqui x e y das listas que acabamos de fazer Vá para variáveis , e aqui temos item da sala de objetos que será x aqui, Objeto x, e não é o item um, mas o índice do item. O índice do item do objeto x é a coordenada x. A coordenada y é de co o índice do item, do objeto até y. Novamente, estamos pegando as coordenadas aqui de nossas duas listas e, claro, o número da entrada é sempre o mesmo índice da sala, e temos as duas listas para x e y. Vamos verificar se isso funciona Começando no jogo. E então pegando a chave, indo até a porta E está funcionando bem. A Apple está no local certo aqui, tudo funciona. Agora que temos isso, também podemos esconder essas duas listas aqui e também essa lista aqui. Se precisarmos das listas, sempre podemos mostrá-las novamente e também podemos ocultar isso. Então, se você quiser mostrar uma lista, basta fazer a verificação aqui na lista e, se quiser adicionar outro objeto aqui, talvez seja necessário fazer uma nova entrada em todas essas listas aqui. No momento, queremos poder pegar a Apple, eu acho. Então esse é o nosso novo desafio. 43. 43 Lista de inventário: Para pegar a Apple, precisamos fazer outra lista, e essa lista estará disponível para todos os Sprites Vamos fazer uma lista aqui para Sprites, e essa será a lista de objetos Y para A Sprites porque então o objeto Sprite pode adicionar algo à lista, e também o Sprite do inventário pode acessar essa Agora temos a lista de objetos e ela está aqui. O que essa lista conterá? Ele conterá todos os índices dos objetos que estão no inventário Para pegar um item, no início, é a chave, precisamos adicionar uma entrada à lista de objetos aqui. Vamos renomear a lista aqui para lista de inventário. É claro que essa lista é para os objetos no inventário. Ok. O primeiro item que precisa ser retirado é a chave. Podemos ir até o código que está pegando a chave, e isso é aqui Se a chave escolhida for igual a um, então ela já foi pega, então temos que ir aqui então temos que ir Se a distância até Avery estiver abaixo de 50, então ajustamos a tecla escolhida para um Podemos deixar o código como está, mas também precisamos inserir uma nova entrada nessa lista ou adicionar uma nova entrada a essa lista aqui. Este bloco aqui na lista de inventário T two é exatamente para esse propósito. Adicionar coisa à lista de inventário, adicionará uma nova entrada. Você já pode testar isso. Se você clicar aqui, verá que essa coisa foi realmente adicionada à lista de inventário, mas não queremos fazer isso. Queremos adicionar o índice desse objeto aqui. Adicione o índice à lista de inventário e podemos testá-lo aqui. E vemos que essa coisa também está aqui na lista. Então, o que precisamos fazer é, obviamente, excluir ou apagar a lista no início, no início E isso você pode fazer excluindo toda a lista de inventário. Vamos começar de novo. E você vê que a lista está vazia agora. E se pegarmos a chave, você verá que o índice aqui está em nossa lista de empreendimentos. Agora podemos ir para a segunda sala, e aqui também podemos pegar a maçã. Mas você vê que não funciona. E por que isso? Porque a distância aqui é um pouco aqui. Então, precisamos aumentar isso. Digamos que 80, e vamos tentar isso. Agora podemos pegá-lo. Então, aqui, a maçã também está na lista, mas você vê que a chave não está na lista. E é por isso que precisamos modificar o código aqui um pouco. Então, aqui temos a visibilidade definida e, é claro, na segunda sala, a chave não está visível, mas a chave ainda deve estar visível se estiver no inventário. Isso é o que precisamos verificar. Isso é fácil. Vamos para o controle e precisamos escondê-lo somente se ele não estiver no inventário. Se antes e agora precisarmos verificar se a lista de inventário contém alguma coisa, nesse caso, é claro que, novamente, é o índice. Se a lista de inventário contiver o índice e, em seguida, ocultar, isso não está correto. Precisamos testar o oposto. Se não estiver na lista de inventário, podemos ocultá-lo. O que precisamos é de um não, e este é esse aqui. Arraste isso aqui, não, e isso precisa ir para cá. Caso contrário, se não for o caso de a lista de inventário conter índice, oculte. Vamos experimentá-lo. Comece o jogo novamente. Pegue a chave. E vá até a porta, use a chave, e agora ainda temos a chave aqui visível no inventário e a Apple também está visível aqui. Mas a Apple está no mesmo local da chave e isso é um problema, e isso será corrigido no próximo vídeo. 44. 44 Como colocar objetos no inventário: Precisamos colocar nossos objetos no inventário aqui embaixo , nas posições corretas. No momento, eles estão no mesmo local aqui, e é por isso que não podemos ver a chave aqui ou apenas partes da chave. Então, eles precisam estar na fila aqui, e nós fazemos isso no inventário. Então, vamos lá. E o que precisamos fazer aqui é que sempre que algo é captado, isso precisa ser atualizado, então a colocação e o posicionamento dos objetos precisam ser atualizados aqui, e fazemos isso Sempre que eu recebo um novo evento, e ele será atualizado para o inventário, o que estamos fazendo então? Repetimos e repetimos, está sob controle. Portanto, repita o número dez vezes, mas estamos examinando essa lista de inventário da lista, então precisamos saber o tamanho da lista. Para isso, temos um bloco aqui, tamanho da lista de inventário aqui. Isso já está correto. E também precisamos contar as iterações aqui dentro. Então, precisamos de uma nova variável, mas essa variável pode ser local, então crie uma variável somente para o local e a chamaremos de índice de inventário. E estamos configurando 120 e, no início do loop, estamos alterando em um. Então, no inext, agora podemos contar as iterações aqui desse loop O que mais precisamos fazer aqui dentro? Precisamos enviar uma mensagem, uma transmissão para os objetos para que os objetos possam se colocar aqui no topo do sprite do inventário aqui, porque só os objetos em si podem fazer isso Você não pode colocar um objeto de fora do sprite. Então, eles precisam receber uma mensagem e depois colocá-la aqui. Ok, então vamos criar uma nova mensagem, transmitir, exibir ações, nova mensagem, e chamamos isso de go to x porque apenas o x é importante aqui. O y é o mesmo para sprite aqui para cada clone. Então, apenas o x deve ser diferente, e podemos fazer isso depois de alterarmos o índice aqui. E então, na chave, podemos receber isso. Então, sempre que eu recebo, vá para x. Sim, precisamos nos colocar aqui nesta posição. E qual é essa posição? Com esta mensagem, você não pode fornecer, fornecer nenhum parâmetro. Então, o que devemos fazer aqui é criar outra variável para todos os sprites e chamar talvez o x atual para o inventário, x atual para o inventário Aqui, é claro, antes de enviarmos uma mensagem, precisamos aumentar isso. Também no início do loop, precisamos configurá-lo, é claro. Primeiro, definimos dois. Podemos começar do zero e depois ver o que precisamos mudar aqui, ou podemos começar talvez em -80, algo assim Começando em -80 deve estar em algum lugar aqui, e então aumentaremos a cada iteração a coordenada x. Inventário x atual e , digamos, 40 por 40, use esse x atual no objeto do jogo. Então, aqui. E, claro, quando pegamos alguma coisa , precisamos enviar essa atualização If Então, aqui nós apenas inserimos a transmissão. Atualize o IP. Vamos primeiro ver se isso está correto. Vamos começar o jogo novamente. Pegue a chave e a chave está aqui. Vamos abrir a porta, usar a chave que funciona e depois pegamos a maçã. Agora não estamos perto o suficiente. Agora podemos pegar a maçã, mas não está funcionando. A corrente x não é aumentada corretamente, eu acho, porque a corrente x é zero. Ainda assim, vamos verificar aqui, alterar o x atual em zero está bem, eu acho, porque o valor atual precisa ser zero porque temos dois itens e -80 mais 40 mais 40 é zero, então o zero está bem Mas o problema é que os dois objetos aqui estão recebendo isso e ambos estão se ajustando a esse x aqui no final. Então esse é o problema aqui, então não podemos fazer isso todas as vezes. O que precisamos para que isso seja resolvido? Precisamos de outra variável. Então, crie outra variável para todos os sprites, e desta vez, é a corrente no objeto, é o índice da corrente no objeto, objeto inventário, e precisamos defini-la aqui como uma variável global Portanto, defina objeto Current inf para o índice Então, como obtemos o índice? Nós o obtemos da lista de inventário, é claro, mas não no item um da lista de inventário, mas no índice. Então, estamos contando esse índice inf e definindo esse objeto in atual para o valor neste local aqui, e esse é o índice do objeto do jogo E aqui precisamos verificar se precisamos ir até lá ou não. Portanto, precisamos de controle se e aqui verificarmos a igualdade. Se a corrente no objeto for índice, então vamos e, caso contrário, não. Vamos tentar isso. Então isso parece melhor. Aqui temos a chave aqui, a maçã. Não está na posição correta, é claro. Então eu acho que -80 não estava correto. Acho que precisamos mudar para -120, talvez. Sim. Parece melhor, mas o y não está correto. Portanto, precisamos verificar o y correto aqui. Um pouco mais à esquerda seria bom. Então isso não é necessário. Vá até aqui, mas o y está correto. Podemos usar esse -160 aqui e colocá-lo aqui. E aqui precisamos corrigir isso talvez até dez. Vamos verificar isso. Então, pegando a chave, clicando na chave primeira vez, clicando na tecla, não recebemos nenhuma alteração. E na segunda vez , não está correto. Então, há algo errado aqui. Vamos verificar nossas variáveis aqui, nossa lista. A lista de inventário indica dois itens. Está tudo correto. Então, vamos passar por esse ciclo novamente. Isso parece ser um problema. Estamos definindo esse x atual como -130, tudo bem, então estamos repetindo isso enquanto a lista continuar Na primeira vez, esse é apenas um item na lista Em seguida, estamos definindo o item atual do objeto dois no índice da lista de inventário. índice I está no início zero, e isso não está correto porque item zero da lista de inventário não existe, então acho que estaria vazio aqui A corrente no objeto está vazia. Isso não funciona, e então trocamos próximo por um, e aqui está o problema. O pedido está errado aqui, então precisamos primeiro alterá-lo. Assim, podemos definir a corrente no objeto, e então mudamos o x por 40 aqui, e então fazemos a transmissão. Vamos tentar isso. Agora funciona e a posição também está bem. Eu diria que esta é quase a mesma posição de antes de apresentarmos esse loop aqui. Vamos ver como isso funciona com a Apple. Use, e agora podemos pegar a maçã e aqui ela não funciona. É a mesma posição. Vamos ver qual pode ser o problema aqui. Percorremos o circuito novamente. Estamos definindo o x atual para essa posição inicial de -130. Em seguida, repetimos isso e alteramos o índice em um, tudo bem agora, e a corrente no objeto deve estar boa agora, e então mudamos a corrente x em 40. E então fazemos a transmissão. Então, na segunda vez que pegarmos a Apple, esse evento será novamente enviado e recebido aqui. Em seguida, definimos novamente a corrente x inf dois -130 E aqui está o problema. Não estamos definindo o índice como zero novamente. Então isso aqui não está correto. Vamos arrastar isso aqui e colocá-lo aqui. Então, cada vez que recebemos a mensagem, temos que redefinir esse índice de informações para zero, e aqui ele será alterado para um, e então ele Então, vamos tentar isso de novo. Agora, Apple, e desta vez funcionou muito bem. Primeiro está a chave e em segundo lugar, a Apple e a uma distância muito boa. Tudo bem. E aqui também podemos coletar mais itens. Se tivéssemos um terceiro item aqui, ele será exibido aqui. Isso é muito, e podemos adicionar objetos arbitrários ao jogo, eles podem ser coletados e exibidos nesta lista de inventário 45. 45 Como corrigir descrições de objetos: Agora que temos um mecanismo universal para pegar objetos, também precisamos de um mecanismo universal para as descrições dos objetos Quando começamos o jogo, temos essa descrição da chave. É uma chave, e se eu pegá-la , posso usá-la aqui na porta desse jeito. Mas para a Apple, não temos essa descrição aqui. Se passarmos o mouse, colocarmos o ponteiro do mouse aqui sobre a maçã, não veremos nenhuma descrição Para a descrição, nós, é claro, ou para ambas as descrições, precisamos agora de outra lista. Vamos às variáveis e fazer uma lista. Aqui fazemos uma lista, para todos os sprites, não, somente para esse espírito Porque as descrições só são necessárias nos objetos em si. Então, chamamos isso apenas de descrições porque essa é uma descrição localista, não precisamos colocar mais nada aqui Então, a descrição é suficiente, a descrição do sprite, é claro De qualquer forma, isso é apenas para o sprite. E se olharmos aqui, temos a descrição do cólon do objeto do jogo, então tudo bem Nós adicionamos duas entradas aqui. A primeira é que é uma chave e a segunda, é uma maçã. Claro, você pode colocar outra coisa aqui, um texto mais descritivo, mas eu quero ser breve aqui Primeiro, é uma chave para a chave, é claro, e a segunda é para a maçã, e diferenciamos essas duas pelo índice aqui Um é um índice, um é sempre a chave e o índice dois é sempre a maçã. Ok, então não precisamos exibir isso. Podemos ocultar isso e também a lista de inventário, não precisamos exibir isso e também os outros e também os outros que podemos esconder para que possamos ver a tela completa aqui. O que fazemos com a lista deve ficar claro. Em vez disso, é uma chave, simplesmente retiramos a descrição da lista da nova descrição da lista. Então, aqui temos esse item um de descrição e, no nosso caso, não é o item um, mas o índice de descrição do item. E acabamos de substituir esse texto fixo aqui, é uma chave por este. Vamos verificar se isso funciona no jogo. É uma chave, ainda está bem. Mas, para ter certeza, precisamos verificar se está funcionando também para a maçã. E não é. Por que não? Porque temos essa condição aqui de que a distância até Avery deve ser pelo menos 50 ou deve estar abaixo de 50 Então, podemos aumentar isso aqui e ver se isso funciona e agora funciona. 50 é muito próximo A centra-se talvez aqui em algum lugar e 50 é menor do que isso, é difícil alcançar essa distância. Definimos como 80 da mesma forma que aqui e, dessa forma, podemos mostrar que é uma maçã aqui, mas também podemos ver que, assim que a colocamos no inventário, não podemos mais ver as descrições. Isso é o que precisamos corrigir também para que , depois de colocá-lo no inventário, você ainda possa ver a descrição que ficará boa e é isso que faremos no próximo vídeo. 46. 46 Mostrando a descrição no inventário: Ainda temos o problema de que a descrição do objeto não é visível se passarmos o mouse sobre o objeto no inventário Quando pego a chave aqui, passo o mouse sobre a chave no inventário Não há nada exibido e isso deve ser possível. Vamos consertar isso. É bem fácil. Só precisamos reorganizar essa parte do for evepe aqui no objeto-chave ou no objeto do jogo Para que isso funcione, temos que considerar também se a chave ou o objeto, nesse caso, foi pego ou não. temos que pensar nada apenas no caso de estarmos longe do objeto e de o objeto não estar no inventário. Como fazemos isso? Vamos separar isso aqui. E vamos inserir outro desse, se for o caso, assim. Temos dois blocos, se assim for, aninhados aqui. O primeiro, o externo, conterá apenas um ponteiro de mouse tocante Portanto, tudo dentro só será executado se o ponteiro do mouse estiver tocando, e isso também é, obviamente, o pré-requisito para a exibição da descrição Se o ponteiro do mouse não estiver tocando , não pensamos em A segunda condição deve ser um pouco diferente da anterior, tínhamos esse fim aqui e agora precisamos de outra operação lógica. Este é o bloco ou aqui. Uma dessas duas condições precisa ser satisfeita. Uma é, obviamente, a distância até Avery, precisa estar abaixo de 80 Ou o objeto deve estar no inventário. Se o objeto estiver no inventário, a chave foi retirada, que não é o melhor nome porque não é apenas a chave, deve ser algo mais geral porque a maçã também pode estar no inventário, mas podemos cuidar disso mais tarde. Primeiro, precisamos verificar se a chave escolhida é igual a um, e é por isso que podemos duplicar isso e colocar isso aqui Se considerarmos essa condição aqui, ou a chave escolhida é igual a uma, então o objeto está no inventário ou a distância até então o objeto está no inventário ou a Avery está Isso podemos verificar depois de termos certeza de que o ponteiro do mouse está tocando o objeto Se o ponteiro do mouse estiver tocando o objeto, e essa condição aqui também for verdadeira, podemos pensar que a descrição, ou seja, a tecla escolhida é uma ou a distância até Avery está Dessa forma, deve funcionar. Vamos verificar isso. Aqui está funcionando e agora o temos no inventário. Vamos passar o mouse aqui. É uma chave. Também está funcionando aqui no inventário. Então, vamos verificar se ele também está funcionando com a Apple. Não deveria haver diferença. É uma maçã. Tudo bem. E se passarmos o mouse aqui no inventário, também é uma maçã. Muito bom. E isso é o que queríamos alcançar para que em todos os lugares obtivéssemos essa descrição, exceto se o objeto não for pego e Avery estiver muito longe dele Dessa forma, não fica tão fácil, e Avery precisa se mover para examinar o ambiente aqui para que o jogador realmente ande por aí para ver todos os objetos disponíveis aqui nesta tela 47. 47 Como corrigir a lógica do jogo: S. Agora temos que ajustar nossa lógica de jogo à lista de inventário. No momento, o problema é que podemos resolver o primeiro ou o jogador pode resolver o primeiro problema clicando em usar aqui quando o sprite é clicado, o botão de uso é clicado, o botão de uso é clicado, então transmitimos Ue click, e isso é recebido no sprite Avery Em seguida, é verificado se a porta está tocando, e aqui é decidido se o jogador pode ir para a próxima sala, cozinha neste caso, ou responder com esta frase aqui Eu não posso usar essa chave aqui. Isso é muito específico para a chave e o primeiro quebra-cabeça, e temos que ajustar isso à lista de inventário porque não temos apenas a chave, mas também temos a maçã na segunda sala, e a maçã, é claro, é um pouco diferente. Podemos usar a maçã, mas temos que definir o que isso significa usar a maçã, e não podemos usar a chave para resolver a segunda sala aqui. Dessa forma, temos que ajustar a lógica no Avery para que saibamos qual item foi clicado aqui e qual item deve ser usado, por exemplo Mas primeiro, precisamos corrigir uma seta aqui, e isso pode ser encontrado aqui no objeto do jogo. Quando esse sprite clicou. Se estiver no inventário, se a chave retirada for igual A primeira coisa que talvez precisemos mudar é que essa chave escolhida não é o nome certo para essa variável porque não é apenas a chave, mas também pode ser a Apple, é claro, ou outro objeto que adicionaremos posteriormente. Essa variável precisa mudar. Além disso, esse é outro problema. Essa é uma variável global aqui. Passamos para as variáveis e verificamos isso aqui, podemos ver que não é uma variável local. É uma variável global e, dessa forma, não podemos usá-la dessa forma. Como o pickup precisa ser uma variável local para cada objeto do jogo, ele precisa ser um valor separado. Do jeito que é usado aqui, isso não é verdade. Na verdade, precisamos mudar isso aqui um pouco também porque isso é um se então e também isso é um se então. Isso significa que se a chave estiver no inventário, transmitimos ações de exibição, tudo bem. Mas se Avery também tiver uma distância menor que 82 a chave, por exemplo, no inventário , isso também será executado, e isso está errado Eu te mostro o que quero dizer. Começamos o jogo e ajustamos isso para, digamos, 120, para que a distância possa ser maior aqui, e eu estou pegando a chave primeiro. Agora, se eu for com Avery até a tecla logo acima da tecla aqui e clicar na tecla, vemos que há outra entrada na lista de inventário adicionada Então esse código aqui é executado, e isso está errado porque não podemos executar esse código se a chave ou o objeto aqui já estiver no inventário. Então isso significa que precisamos mudar isso aqui. Para e se for o caso. Vamos arrastar isso até aqui. Se eu pegar igual a um , transmita as ações de exibição, que podemos deixar como estão, mas precisamos substituir o controle aqui por um se não Podemos simplesmente arrastar isso daqui para aqui. Este vem para o caso de então e isso podemos colocar aqui. Podemos nos livrar de Mas agora perdemos esse evento, mas isso não é problema. Posso adicionar isso novamente aqui quando este lado clicar. Se a chave variável selecionada for igual a um, exibiremos a ação, tudo Caso contrário, se o objeto não estiver na lista de inventário, podemos fazer disso a verificação de distância e, se a verificação de distância for cumprida, podemos adicioná-lo à lista de inventário. Vamos tentar isso. Se isso resolver isso, então pegamos a chave aqui. Podemos fazer isso sem que isso seja adicionado outra vez ao eventualista Portanto, isso não é executado aqui. Sempre só isso é executado e não esses dois. Então, antes o problema era que isso e aquilo fossem executados. Agora, só um desses. Ok. Corrigimos isso, e podemos recuar essa distância aqui para algo menor, então 80, eu acho que estava tudo bem, e 120 foi só para mostrar aqui que isso era uma flecha aqui. Isso está corrigido. Agora, o que precisamos fazer é apenas nossa lógica de jogo, como eu já disse, isso precisa mudar. Isso precisa ser uma variável local. Caso contrário, os diferentes objetos do jogo serão todos recolhidos se um deles for pego. No momento, essa é uma variável global e precisamos substituí-la por uma variável local. Então, vamos arrastar isso até aqui e substituí-lo por uma variável diferente. Nós fazemos um novo. Desta vez, dizemos que apenas para esta noiva, isso é importante para que seja uma variável local e para cada clone, para cada objeto do jogo, esse será um valor separado aqui Vamos chamá-la de retirada, não chave retirada, mas retirada, e isso significa que ela está realmente no inventário. A chave foi retirada, podemos nos livrar e podemos colocar aqui. Aqui você também tem um objeto de jogo. Essa é uma variável local obtida igual a zero no momento Agora, precisamos substituir todas as ocorrências da chave coletada por essa retirada. Aqui, aqui temos um. Agora, aqui não podemos configurá-lo assim. Precisamos escolher entre esse menu suspenso selecionado. Em qualquer outro lugar aqui, além disso, isso funciona ou deveria funcionar, pelo menos, então nenhuma chave foi detectada aqui neste sprite, mas como era uma variável global, ela também é verificada aqui no Avery Aqui, a chave foi retirada. Obviamente, essa não pode ser a variável local selecionada porque você não pode acessá-la de fora do objeto do jogo aqui. Isso é algo que precisamos substituir por outra coisa. E aqui podemos pegar esse bloco. A lista de inventário contém coisas. Essa coisa deve ser, obviamente, a ID da chave do objeto do jogo, e essa é uma. Se o inventorist contém um, o índice do objeto chave do jogo, então não precisamos dessa igualdade aqui Só precisamos disso aqui. Se o eventualis contiver a chave , podemos falar que a porta está trancada Eu devo ter trancado. Não, é diferente. Não está aqui. Se não contiver uma , a porta está trancada. Precisamos de um não aqui. Isso está aqui, esse bloco, e arrastamos isso aqui para o não, e então arrastamos esse não de volta para o se. Caso contrário, o inventoralis contém um, um é o índice, por assim dizer, o ID do objeto-chave, então essa frase deve ser dita por 3 segundos Caso contrário, a caminhada será definida como zero, apenas uma ocorrência em que a chave foi pega. Não tenho certeza se há algum outro. Acho que deve haver. Vamos verificar o uso. Não, esse não é o caso, e aqui também não é usado. Então, acho que realmente substituímos todas as ocorrências dessa variável. Então, podemos tentar apagar essa variável. Então, clique com o botão direito aqui. Quando a chave foi retirada, exclua e não há nenhum aviso, que significa que provavelmente excluímos todas as ocorrências da chave retirada Vamos tentar resolver o primeiro quebra-cabeça novamente. Deveria funcionar. Pegar a chave funciona, usá-la. Não consigo usar essa chave aqui está correta. Então vamos até a porta. Use a chave na porta, isso também funciona. Agora que temos a maçã, podemos pegar a maçã. Vamos tentar usar a Apple, e então Avery diz, eu não posso usar a chave aqui Isso é algo que precisamos ajustar, é claro. Na primeira etapa, substituímos essa variável selecionada pela chave por essa variável local aqui. Isso foi necessário para que não usássemos a variável global porque precisamos de valores separados para cada um dos objetos do jogo aqui para cada um desses clones. Oh, aqui, podemos nos livrar disso. Essa foi a primeira refatoração ou a primeira correção da lógica do jogo Mas é claro que precisamos fazer mais porque se você usar a chave, o resultado deve ser diferente do que se você usar a maçã aqui. Obviamente, precisamos definir qual é o quebra-cabeça aqui. O que o jogador precisa fazer aqui ou ter aqui para ir para a próxima sala? Além disso, há um pequeno problema aqui, se começarmos o jogo novamente, deixaremos esta sala aqui. E entramos na próxima sala aqui pelo mesmo lado, o que não faz nenhum sentido. Então, devemos entrar na sala aqui, então precisamos mover Avery daqui para aqui para que ela entre na cozinha pelo lado esquerdo E isso será feito no próximo vídeo. 48. 48 Como colocar Avery no lado correto: Vamos fazer com que Avery entre no lado correto da sala ao lado No momento, está do lado errado. Porque se pegarmos aqui a chave e sairmos da sala pela porta, acabamos no lado direito, ou pelo menos Avery não está se movendo Então é por isso que ela fica aqui do lado direito, mas ela precisa ir para o lado esquerdo. Como podemos mudar isso? Isso é bem fácil. Aqui temos nossa definição de ir para a sala, então nosso bloco personalizado vai para a sala, e isso precisa de outro parâmetro. Clique com o botão direito do mouse nessa definição aqui, escolha e aqui podemos adicionar uma entrada. Vamos adicionar uma entrada e chamá-la de lado. E isso será um número ou um texto, e podemos dizer, digamos que é um texto, então podemos clicar em, e agora temos outro parâmetro. O segundo é o lado aqui, e isso podemos usar aqui em nossa função em nosso bloco. Então, para verificar o lado, temos a esquerda ou a direita, sem outras possibilidades. Vamos controlar se não, e temos que verificar se o lado é o texto à esquerda ou à direita. Precisamente, precisamos apenas verificar se o lado está à esquerda e, caso contrário, está à direita. Então, verificamos o lado. Você pode arrastar esse parâmetro aqui, lado a lado se eu estiver do lado, e então verificamos o texto deixado aqui, caso contrário, está à direita ou algo diferente da esquerda, e então vamos para um local diferente aqui. Se o local estiver à esquerda, então vamos em movimento e escolhemos definir x dois, e aqui precisamos verificar a coordenada certa aqui, o valor certo para x, e no outro caso, temos que escolher um diferente para que, no lado esquerdo, cada um esteja em algum lugar em menos, eu diria que talvez realmente menos isso, e no outro caso, então vamos em movimento e escolhemos definir x dois, e aqui precisamos verificar a coordenada certa aqui, o valor certo para x, e no outro caso, temos que escolher um diferente para que, no lado esquerdo, cada um esteja em algum lugar em menos, eu diria que talvez realmente menos isso, e no outro caso, na direita caso lateral, podemos deixar assim. Isso precisa ir para algum lugar aqui, acho que estaria tudo bem antes da transmissão aqui. Se o lado for esquerdo, coloque Avery à esquerda em -197 e, se não, coloque-a no lado direito em x igual a Agora precisamos chamá-lo com o parâmetro certo aqui com o segundo parâmetro direito, e isso é aqui, vá para a cozinha da sala, e aqui precisamos entrar à esquerda. Para que possamos, no segundo quarto aqui, a cozinha tem que ser deixada no lado direito. Podemos então ir para a sala, qualquer que seja a sala, e então no lado direito está a saída, e então também no lado esquerdo deve estar a próxima sala, talvez. Mas vamos ver. Aqui neste bloco, nessa chamada desse bloco, podemos escolher de que lado Avery deve entrar na sala Vamos tentar se isso funciona. Comece o jogo, pegue a chave. Nós já sabemos disso. Se eu usar a chave agora, Avery deve ir para a esquerda, e isso está correto Tudo está funcionando. Também podemos tentar colocar aqui apenas para testar o outro caso. Então, deve ser o mesmo de antes, e Avery, portanto, deve permanecer mais ou menos na mesma posição x. Sim. Isso também está funcionando. Então, Avery estaria desse lado, mas, neste caso, ela não está voltada para a direita ela não está voltada para a direita e para o lado esquerdo, mas acho que está tudo bem Não precisamos mudar isso. Vamos colocar a esquerda aqui novamente, para que os dois lados estejam funcionando e Avery esteja no lado direito, que é o lado esquerdo aqui Ok, vamos continuar no próximo vídeo. 49. 49 Como adicionar a mochila: Para avançar a lógica do jogo aqui e também para completar nosso segundo quebra-cabeça. Precisamos adicionar outro objeto, outro objeto do jogo, que será usado para resolver o segundo quebra-cabeça. Para Avery sair de casa para ir à escola, ela precisa da maçã, é claro, para comer alguma coisa na escola, e também precisa de sua mochila para Precisamos adicionar a mochila e, para isso, precisamos adicionar uma nova roupa aqui Vamos ao objeto do jogo, às fantasias. Temos a chave como primeira, a maçã como segunda e a próxima será a sacola, mas isso nós mesmos temos que pintar Então, vamos fazer isso. Eu quero manter as coisas bem simples aqui. Vamos escolher retângulos aqui, e talvez como preenchimento, possamos definir algo como marrom, talvez assim, e um pouco mais escuro, algo assim E fazemos nosso primeiro retângulo aqui, algo assim, e então fazemos um segundo retângulo aqui, e então escolhemos a ferramenta de seleção aqui para ajustá-la um pouco Isso não foi muito bom. OK. Portanto, o contorno ou a borda são um pouco grossos demais. Vamos fazer com que sejam dois pixels aqui. Algo parecido com isso. Sim, isso parece bom. E então talvez algo para fechar a mochila aqui. Novamente, dois retângulos, este e este. Precisamos mandar isso para a parte de trás aqui. Vamos desfazer isso Precisamos enviar isso para a frente. Vamos primeiro selecionar esse. Envie para a frente. Agora está tudo bem, e o preenchimento deve ser algo como cinza. Então, digamos que a saturação seja zero, e isso é um pouco leve demais. Então, vamos torná-lo mais escuro, algo assim. Também para o outro, vamos escolher cinza. Além disso, ou vamos usar o seletor de cores aqui. Então, o conta-gotas aqui, escolha a mesma cor. Agora podemos ajustá-lo um pouco. Coloque-o em algum lugar no centro e também em algum lugar no centro. OK. Acho que deve ficar tudo bem. Claro, você sempre pode torná-lo mais bonito, mas para mim, tudo bem, então todo mundo deveria ver uma maleta ou sacola aqui, pelo menos Isso é o que deveria ser. Vamos mudar para o código agora. E o que temos que adicionar aqui para adicionar nosso novo objeto de jogo, a bolsa Precisamos tornar nossas listas visíveis. Então, descrição, precisamos de uma nova descrição para a bolsa Também precisamos da lista da sala de objetos porque queremos dizer que na segunda sala, a sala da cozinha, a bolsa estará e deverá estar visível Então, vamos nos livrar dessa tela captada aqui. E também precisamos do objeto x e do objeto y. Ok, vamos primeiro fazer uma nova entrada, adicionar uma nova entrada aqui na sala de objetos do jogo. Então, a terceira é a mochila, que também deve estar na cozinha Então, temos que entrar na cozinha aqui. E o índice do terceiro objeto de jogo da bolsa será Também aqui, na descrição do objeto do jogo nesta lista, precisamos adicionar outra entrada e dizemos que é sua mochila, e isso é Também aqui, precisamos colocá-lo em algum lugar da cozinha. Então, vamos adicionar outra entrada aqui e também aqui. E agora precisamos verificar a posição correta aqui para a bolsa Ok, então o que podemos fazer é tornar esse objeto do jogo aqui, visível à direita. Então, basta clicar aqui em mostrar este I, e agora o temos visível, e podemos movê-lo para o local certo. Então, podemos mover isso para cá. Também podemos colocar Avery um pouco de lado aqui. E vemos que é um pouco pequeno demais aqui. Então, precisamos voltar ao traje e reajustá-lo. Mas vamos pegar as coordenadas aqui. Então temos 219 para x. Então insira isso aqui E para y, temos -70 e inserimos isso aqui no objeto de jogo y. Eu criei erroneamente uma quarta entrada Não tem problema, exclua isso. Está bem? Então, agora ampliamos todas as listas com nosso Satchel, sala de objetos do jogo, descrição do objeto do jogo, objeto x e objeto y. Ok, agora precisamos verificar se já estamos criando clones suficientes aqui, e aqui podemos repetir aqui É claro que podemos colocar três aqui, e tudo bem, mas para sermos mais flexíveis. Então, da próxima vez que adicionarmos um objeto, não precisaremos mudar nada aqui. Também podemos usar o comprimento de e, em seguida, uma lista, e eu diria o comprimento do espaço do objeto, porque isso é algo que precisamos adicionar, é claro, aqui. Sempre precisamos adicionar a entrada aqui na sala de objetos para fazer com o objeto apareça sempre que o objeto, sempre que a sala for inserida, então estamos calculando o tamanho disso. Aqui escolhemos a sala de objetos. E isso será automaticamente agora três. Portanto, cada lista já tem três entradas. Portanto, também é possível usar a descrição do objeto do jogo ou uma dessas, mas vamos pegar essa lista aqui e o tamanho dessa lista para criar os clones. Ok, agora três clones devem ser criados, e podemos desmarcar todas essas listas aqui para que possamos ver nossa tela de jogo aqui novamente e começar o jogo E aqui não podemos ver a sacola, é claro. Precisamos ir para a próxima sala. Então, vamos pegar a chave e usá-la, e aqui podemos ver que a maçã está lá, e também a bolsa é um pouco pequena demais, como eu disse, então precisamos ampliá-la um Esta é uma bolsa muito pequena, então eu não acho que seja adequada, então vamos redimensioná-la um Mas vamos ver se podemos pegá-lo, e está funcionando, e aqui você também pode ver que o pedido é dinâmico, então podemos pegar a maçã e a maçã estará ao lado da sacola Se fizermos o contrário, podemos reiniciar o jogo. E faça isso de novo rapidamente. E aqui também podemos pegar primeiro a Apple e depois a mochila Então, aqui você tem a ordem correta em que pegou os objetos, e isso será dinâmico. Ok, vamos fazer a mochila um pouco maior. Então vamos às fantasias. O traje da mochila diminui um pouco e depois selecionamos tudo Então, basta arrastar esse retângulo aqui e você selecionou todas, todas essas subformas E então podemos ampliá-lo um pouco assim e colocá-lo novamente no centro, talvez um pouco mais. Assim. Vamos testá-lo. Sim, tudo bem. Acho que é grande o suficiente. Talvez um pouco maior fosse bom. Mas acho que está tudo bem, porque se o tornarmos maior aqui, teremos que fazer isso aqui também, então será do mesmo tamanho. Caso contrário, teremos que redimensioná-lo quando for retirado, e acho que não vale a pena o esforço aqui Então, deixe como está. Então esse é o tamanho e a maçã também tem o tamanho correto. Agora temos o terceiro objeto e, em teoria, o jogador pode resolver esse quebra-cabeça. Ele ou ela só precisa pegar a maçã e a bolsa, e então Avery pode sair da sala do lado direito aqui Obviamente, precisamos verificar no inventário se a sacola e a maçã no inventário, e então ela pode sair E se não, ela não pode sair desta cozinha. 50. 50 Como colocar o button corretamente: Neste vídeo, trata-se de selecionar objetos de itens na lista de inventário nesta área aqui para que depois possamos usar esses objetos com a ajuda desse sprite aqui, com a ajuda do sprite use Como é no momento, se nos livrarmos de todas essas listas aqui, escondemos todas elas e pegamos a chave. Na próxima sala, temos todos os objetos. Agora primeiro a chave, depois a maçã, depois a bolsa aqui, e tudo está funcionando com a descrição, mas se clicarmos aqui na chave, por exemplo, ou se você clicar na maçã, ou se clicar na bolsa, não há diferença E se eu agora clicar no Satchel, por exemplo, e depois usar, então Avery está dizendo, eu não posso usar a É claro que isso está errado, porque não sabemos qual objeto aqui é clicado antes de clicar no uso Além disso, você notou que, se eu clicar na maçã ou na bolsa, essa noiva usada aqui não é movida para este local aqui, mas deveria estar em algum lugar aqui para pegar a bolsa, ou se eu clicar na maçã, deveria estar em algum lugar aqui acima da maçã, mas está sempre neste E é isso que queremos corrigir primeiro. Então, esse botão de ação aqui, esse brite tem que se mover para o objeto que foi clicado antes ou que foi selecionado aqui no inventário. Então, vamos fazer isso. Então vamos ao objeto do jogo e quando essa noiva é clicada, e se ela já estiver selecionada aqui, fazemos uma transmissão das ações de exibição. E essa transmissão é recebida aqui Então, quando eu recebo ações de exibição, esse botão aqui, esse botão de uso, esse botão de ação acaba de ser exibido. E também precisamos que algo mais aconteça aqui. Precisamos mover isso ou pelo menos alterar a coordenada x aqui para que esse botão fique logo acima do item de inventário que foi selecionado anteriormente Ok, então como fazemos isso? Precisamos de outra variável para isso. E essa variável contém o índice do objeto que foi clicado Então, para todos os sprites, isso é necessário aqui. E podemos chamá-lo de selecionado no objeto, ou seja, objeto de inventário selecionado. E cada vez que um objeto é clicado na lista de inventário, nós o configuramos para esse índice Então, vamos até o local em que esse objeto do jogo é clicado e está na lista de inventário É aqui, onde fazemos a transmissão. E aqui também precisamos definir nossa nova variável. Então, defina o objeto If selecionado aqui, e isso precisa ser definido para o índice. Índice é, lembre-se, Índice é o ID desse objeto do jogo. Então, para a chave, será uma, para a Apple, serão duas e, para a destiladora, serão três Então, agora que definimos essa variável, podemos usá-la aqui para definir a coordenada x. Definir a coordenada x é esse bloco, defina x dois, e fazemos isso antes de mostrá-la Caso contrário, poderemos ver um movimento e não queremos isso. Antes de mostrá-lo, definimos a posição x correta. No momento, isso é -75, e o que precisamos fazer é adicionar espaço adicional ou adicionar mais espaço x a essa coordenada aqui para que o botão de ação se mova com um item selecionado preciso haver um deslocamento e , em seguida, algo é adicionado a isso Vamos até os operadores e, em seguida, precisamos adicionar algo. Vamos primeiro de -75. Talvez tenhamos que corrigir isso mais tarde. Coloque isso aqui, defina x dois -75 mais, e então, é claro, precisamos de alguma forma considerar o objeto selecionado Mas não diretamente, precisamos disso aqui. Número do item na lista de inventário. Então, vamos colocar isso aqui. número do item significa o índice do número, que pertence à coisa na lista de inventário, e a coisa é, obviamente, índice aqui. E como não temos o índice do objeto do jogo selecionado, temos que pegar o objeto selecionado aqui. E para a chave, essa será uma, como eu disse, para a Apple duas e uma velha três, mas isso dependerá da ordem em que o jogador pegou os objetos E isso é importante. Portanto, se a Apple, por exemplo, estiver no terceiro lugar na lista de inventário e a Apple for o objeto inf selecionado, o objeto inf selecionado será dois, já que a Apple tem dois como índice como ID, e o item número dois será três quando a maçã estiver no final Então, vamos verificar isso. Então, estamos pegando o primeiro item aqui. E precisamos usá-lo, é claro, e está tudo bem aqui porque -75 é a posição correta para este ano, mais essa será uma, já que inf selecionado será o único objeto na lista de inventário Então esse número será um, então é -75 mais um, -74 Já podemos ver que aqui selecionado no objeto é um, então está correto, e vamos aqui pegando, vamos primeiro pegar a bolsa aqui e depois pegar Então, a lista de inventário será assim. A primeira entrada é uma, segunda entrada é três e a terceira é duas. Então, vamos verificar isso. Lista de inventário, podemos exibir um, três, dois. Então, isso está correto porque a chave tem o ID, o índice um, a bolsa tem o índice três ou o ID três e a Apple tem o ID Até agora, tudo bem. Mas é claro que isso não está correto aqui porque isso é apenas um, dois, três. Isso não é suficiente para colocar o botão de ação de uso em outro lugar. Podemos tentar, talvez, vejamos a diferença. Sim, podemos ver a diferença. É apenas um pixel, mas você pode notar que aqui está um pixel à esquerda, depois um pixel à direita e outro pixel à direita se eu pegar a maçã. Você pode vê-lo se movendo levemente. Tudo bem, mas precisamos multiplicar isso aqui por 40 porque 40 é a distância entre os objetos na lista de inventário Vamos ver os operadores e o operador de multiplicação aqui. Agora precisamos multiplicar isso aqui por 40. E depois coloque de volta aqui. É -75 mais 40 vezes e depois uma, duas ou três, dependendo da posição aqui Vamos tentar isso. Acho que já veremos a diferença. Sim, está aqui. Ok. Vamos ver o que acontece se clicarmos na Apple, a Apple é a última, e está aqui. E o estado está aqui, a chave está aqui. Parece funcionar, mas esse deslocamento aqui não está correto. E isso ocorre porque sempre multiplicamos com pelo menos um e nunca com zero, então sempre há -75 mais 40 pelo menos É por isso que precisamos alterar esse deslocamento aqui, dois -115, que é -75 -40. Isso deve funcionar melhor. Devemos ver a diferença aqui com a chave. Então isso funciona muito bem. Use-o. E agora podemos ir até a maçã e a bolsa e ver que ela está sempre no centro, de alguma forma centrada sobre o objeto que foi Aqui está, logo acima da bolsa, sobre a maçã e sobre a chave, aqui mesmo Isso funciona, você pode encontrar um pouco de sintonia para que talvez não esteja aqui, mas um pouco para a esquerda aqui para que esteja sempre centralizada aqui, pode movê-la um pouco, talvez assim E vemos agora que está centrado aqui também sobre a maçã e a bolsa também Acho que isso é bom o suficiente, e o jogador agora pode ver para que serve esse uso. Nesse caso, é claro para a chave porque está logo acima da chave, aqui está para a maçã e aqui para a bolsa. Isso deve ficar bem. Mas o problema é que, se eu usar a bolsa, Avery ainda diz, eu não posso usar a Isso é o que precisamos abordar no próximo vídeo. 51. 51 Como exibir mensagens diferentes para cada uso de objeto: Vimos que essa lógica aqui também se aplica a outras salas. Se eu clicar em usar na Apple ou clicar em usar na bolsa, isso também será falado Não posso usar essa chave aqui. O que fazemos sobre isso? Precisamos de outro cheque aqui. O quebra-cabeça da primeira sala está resolvido aqui, então devemos verificar a sala antes de fazer isso. Vamos controlar se for o caso e colocar isso por aqui. Assim, você vê isso em cinza, como será, e é assim. Vamos até os operadores e precisamos verificar o quarto. Igualdade aqui. Agora precisamos da sala de contagem. Se a contagem de quartos for igual a quarto, que é o primeiro quarto , podemos fazer essas Caso contrário, não faremos nada aqui. Vamos tentar isso e nos livrar da lista de inventário aqui. Esconder. Pegar a chave ainda deve funcionar. U e então estamos na sala ao lado. Agora pegamos a maçã e a sacola. E aqui, se usarmos a mochila, nada será exibido. Se usarmos a maçã, nada será exibido, e o mesmo acontece com a chave. Então, a chave não faz nada. Se eu usá-lo na segunda sala. Se eu usar na primeira sala, isso funciona, e se eu usar na segunda sala, nada é feito aqui. Então está tudo bem. Mas é claro que precisamos fazer alguma coisa quando estamos em uma segunda sala, os jogadores na segunda sala e a bolsa e a maçã são usadas Então, pelo menos devemos mostrar alguma coisa ou vamos falar alguma coisa. Ok, então isso é fácil porque acabamos de verificar a sala atual. Caso contrário, vamos primeiro arrastar isso aqui, e podemos clonar essa condição aqui, então basta clicar com o botão direito do mouse em Duplicar E coloque aqui. Se a sala atual é cozinha, estamos em uma segunda sala agora, e agora podemos dizer alguma coisa, então duplique isso, por exemplo Obviamente, agora podemos verificar qual objeto está sendo usado no momento. Mas, por enquanto, só falamos, não posso usar esse objeto aqui. Não posso usar esse objeto aqui, e depois colocamos isso aqui embaixo do outro. Se a sala atual for igual a um quarto, assim, mova-a um pouco. OK. Então, se o quarto atual é o quarto, então temos a velha lógica para o primeiro quarto, e se o quarto atual é a cozinha, então nós apenas dizemos, eu não posso usar esse objeto aqui. Podemos ser mais específicos mais tarde, mas por enquanto, vamos tentar. Isso não deve mudar nada aqui. Mas aqui, depois de pegarmos os dois objetos, agora podemos usar e Avery está dizendo essa frase aqui É a mesma frase para esses dois objetos, é claro, ou mesmo para a chave, é a mesma. Obviamente, agora podemos verificar o objeto selecionado. Então, isso é viável selecionado no objeto. Isso é isso aqui. Podemos fazer outra se estiver aqui. E verifique a igualdade. Eu selecionei o objeto é e , em seguida, a ideia do objeto. Talvez se for uma, seja a chave, e podemos dizer algo como eu já usei a chave pronta, por exemplo, coloque isso aqui e possamos duplicá-la. Guarde isso. Se for dois, então é a maçã. Podemos dizer algo sobre a maçã. Mova isso um pouco. Eu estou melhor. Digamos que é melhor não comê-lo aqui, mas levá-lo comigo para nós, algo assim. Novamente, boca direita. Então, para a mochila, esse será o caso em que o objeto de informação selecionado for três Tenho que levar isso para a escola, sem mais nem menos. No final das contas, isso significa que você não pode usar nenhum dos objetos na segunda sala. Então, para resolver o quebra-cabeça aqui, facilitamos muito. Você só precisa pegá-los e depois sair para a direita aqui. E, claro, você pode pensar um quebra-cabeça diferente aqui, onde você tem que usar a maçã, por exemplo, na sacola, e então você pode deixar algo assim Podemos estender isso, talvez não. Mas vamos primeiro tentar isso aqui. Portanto, para cada objeto, há uma mensagem diferente aqui , dependendo do objeto selecionado. OK. Então, primeiro, a chave, é claro, use-a. Tudo bem. A maçã e a bolsa. Primeiro, use a chave. Eu já usei a chave e aqui, Apple, é melhor não comê-la aqui, mas levá-la para a escola. Não é longo o suficiente. Você não pode ler isso, então vamos fazer 3 segundos aqui. Use isso. É melhor não comer aqui, mas levar comigo. Tudo bem. E use o Sach Eu tenho que levar isso para a escola. É isso mesmo. Agora temos que cuidar da Avery saindo desta sala aqui. No momento, isso não é possível se ela tentar sair da sala do lado direito. Não é possível. Então, temos que implementar isso, e temos que verificar se a mochila e a maçã estão no inventário, e então Avery pode sair da sala e sair de casa para ir à escola 52. 52 Verificar as condições de saída: Precisamos ajustar as condições de saída dos dois quartos que temos. Para o primeiro quarto, já temos um cheque. Isso está aqui, se tocar na cor, então assumimos que Avery está tocando a porta, e então verificamos se ela tem a chave, se ela não tem a chave, então dizemos que a porta Devo tê-lo trancado enquanto estava sonâmbula e então ela pegou a chave e a usou enquanto estava na porta, então ela pode sair do quarto Então, a primeira coisa que precisamos fazer é refatorar um pouco porque esse é um bloco bem longo aqui, então precisamos extrair isso se estiver aqui Então, vamos arrastar isso para fora, se tocar na cor, arrastamos isso aqui e colocamos em um bloco personalizado Então, fazemos um bloco e chamamos de verificar a saída do quarto, sem nenhum parâmetro aqui. Então colocamos isso aqui. E então precisamos de um “se e verificamos a sala atual. Então, se a sala atual é igual a quarto, então precisamos da variável da sala atual aqui E aqui colocamos o quarto. Então podemos ligar para nosso quarteirão para verificar a saída do quarto. OK. E isso nós colocamos aqui no loop F ever novamente. Portanto, isso não deve mudar nada porque acabamos refatorar aqui essa verificação neste bloco personalizado Ok, então vamos verificar se isso realmente não está mudando nada. E parece que funciona. Além disso, isso não fará nada aqui se Avery tentar sair daqui Nada está sendo dito aqui. Isso é o que precisamos verificar, é claro, se Avery tentar sair daqui Precisamos verificar as condições para sair desta sala aqui. Como fazemos isso? Acabamos de verificar a posição aqui de Avery. Em movimento, temos essa posição x aqui. Vamos arrastar isso para dentro e definir outro bloco. Verifique a saída da cozinha. E aqui também podemos ter se, então, verificarmos se a posição é maior do que a exposição maior do que, digamos 200 talvez e então podemos falar alguma coisa Vamos primeiro dizer ou falar. Usamos nosso bloco personalizado para falar aqui, pois dessa forma ele não bloqueará nada. Basta duplicar isso, colocar aqui, e eu não posso sair sem minha mochila e algo para comer, e os segundos Vamos primeiro verificar isso. Precisamos ir para a segunda sala, é claro, e agora direto para a saída. Claro, não está funcionando. Por que não? Porque não ligamos para ele. Então, vamos duplicar isso aqui. Coloque-o logo abaixo do outro, se for o quarto atual. E então a sala atual é igual a cozinha. Então chamamos nosso novo bloco aqui. Então verifique a saída da cozinha. Oh, vejo agora que é uma ordem diferente aqui, verifique a saída do quarto e verifique a saída da cozinha. Mas de qualquer forma, vamos deixar as coisas assim. Portanto, se a sala atual for a cozinha, verificamos a condição de saída da cozinha, que é definida aqui. E, no momento, simplesmente não é possível sair da sala aqui. Vamos tentar novamente. Desde o início, ok, quem pode ir e agora eu não posso sair sem minha mochila e algo para comer Sim. Então, isso está correto agora. Mas é claro que aqui temos que verificar a bolsa e a maçã Se ambos estiverem no inventário, Avery poderá sair da cozinha Podemos sair de casa e depois ir para a escola. Isso é simples. Vamos fazer isso, abrir um pouco de espaço aqui. Dentro disso, se a exposição for maior que 200, podemos colocar outro if, mas agora é if else, então temos que verificar as variáveis Se a lista de inventário contiver, precisamos verificar duas coisas, é por isso que precisamos do bloco final aqui. Primeiro, a lista de inventário contém e, em seguida, temos dois, que são o índice ou o ID da Apple, e aqui precisamos novamente que a lista de inventário contenha três, que é a bolsa Se ambos estiverem no inventário, então podemos dizer alguma coisa e, caso contrário, dizemos que não posso sair como antes. Vamos duplicar isso também e aqui. Por enquanto, podemos dizer que está tudo bem, acho que posso ir para a escola agora, e vamos tentar que isso funcione. Vamos começar de novo. Usando a chave. Vamos colher a maçã. Pegue a mochila e agora podemos sair. Eu posso ir agora para a escola. No momento, agora Avery poderia sair da sala. Poderíamos trocar de quarto aqui, mas acho que está tudo bem por enquanto. Ela diz, eu posso sair agora, e se vocês não pegaram aqui, a maçã e a sacola, então ela diz, eu não posso sair sem minha bolsa e Acho ótimo porque essa é a solução para nossa segunda sala e, dessa forma, o jogador pode resolver o segundo quebra-cabeça, que é bem fácil. Só tem que pegar dois objetos e depois sair. Mas é claro que você sempre pode complicar ainda mais o fato de o jogador combinar talvez dois itens, talvez criar outro item a partir dele, ou colocar a maçã talvez na sacola, algo assim, ou talvez você tenha que usar a maçã em uma faca para cortar e fatiar a maçã, e então você pode levá-la Talvez essa seja a solução, mas aqui você tem o padrão de como fazer isso. 53. 53 Novo jogo Jump 'n Run: Tudo bem, estamos aqui para começar nosso próximo jogo, e esse próximo jogo será um jogo de corrida de saltos Então, temos esse gato aqui e ficamos com um gato. Esse gato vai pular. Ele será lançado em plataformas. Ele coletará geleias, estrelas, qualquer coisa, e esta é a oportunidade de obter nosso controle de salto e corrida aqui do zero Até agora, acabamos de tornar nossa nave espacial controlável E também Avery era controlável à esquerda, à direita. Mas isso é sobre pular, sobre animação, sobre gravidade Então, vamos começar. Primeiro, o que precisamos é de um piso, um chão. Então, vamos pintar algo aqui. Vamos para o palco e depois recuamos, e aqui podemos pegar esse retângulo aqui para formar o chão Então, basta fazer um retângulo, algo assim. Talvez mudemos a cor. Então, algo assim e a cor será marrom, talvez, ou vamos torná-la verde, um pouco mais escura, para que possa ser algum tipo de grama Então está tudo bem. Agora temos o fundamento, e também temos um esboço aqui ou você pode decidir se livrar do esboço selecionando este Então, podemos fazer isso, e então você não tem o esboço Mas, por enquanto, acho que usamos o preto como contorno. Agora, eu tenho que torná-lo um pouco maior, talvez assim e um pouco mais largo, algo assim Aqui temos o chão e aqui temos o gato. O gato é um pouco grande demais. Diria que, então, vamos selecionar o gato, e então podemos alterar o tamanho para 50 ou 50%, o que parece bom. Então, vamos deixar as coisas assim. E aqui podemos dar uma olhada nas roupas. O primeiro traje é o gato nesta posição aqui. O segundo é uma espécie de gato saltador, então é isso que podemos usar na fase de salto Falando em pular, definiremos nossa primeira posição inicial aqui do gato, então vamos arrastar o gato talvez para algum lugar aqui e, a partir daí, o gato cairá no chão, cairá no chão aqui, sempre que clicarmos, sempre que o jogo Então, vamos aos eventos e, ao iniciar, clique em. O que fazemos aqui? Claro, precisamos de um loop de jogo, então uma eternidade. Isso podemos arrastar aqui, e precisamos definir a posição inicial do gato para que cada vez que reiniciarmos o jogo, o gato fique nessa posição, então arraste para x e y aqui, e as coordenadas devem ser as coordenadas atuais. Então, podemos começar, mas nada acontecerá porque acabamos de definir essa posição aqui, podemos arrastar o gato para longe e depois começar, e ele se reposicionará e ele se reposicionará aqui na posição inicial Então, como fazemos o gato cair de lá para o chão? Isso é bem fácil. Temos que mudar y do gato, e não até dez, mas por algo como talvez cinco, mas dessa forma ele vai subir, então é menos cinco, e o gato vai descer Então, ao mudar aqui, ele cai automaticamente, mas é claro que cai abaixo do solo aqui. Então é isso que precisamos evitar, é claro. Mas, por enquanto, o gato está caindo aqui. Mas não há nenhum sinal de gravidade ou aceleração aqui. O gato tem uma velocidade constante, o que, obviamente, não é bom, mas primeiro vamos fazer nossa detecção de colisão funcionar com o solo Então, como podemos verificar a colisão do gato com o chão aqui? Isso é bem fácil. Precisamos sentir, e aqui temos essa cor tocante, e essa cor precisa ser, é claro, esse verde que temos Então clique neste conta-gotas aqui e selecione o verde do chão Então, agora temos a cor correta. E precisamos de um controle aqui, se for o caso. Então, se tocarmos em cores, o que fazemos? No momento, podemos simplesmente parar o script aqui. Então, isso está interrompendo o jogo completo do jeito que está. Stop all encerrará imediatamente todos os scripts e não fará mais nada. Então, tudo é interrompido e nenhum script está mais em execução. Além disso, esse velop não funcionará mais. Então, isso impedirá completamente que o gato caia. Espero que. Então, vamos ver se isso funciona. Então, se o gato estiver tocando nessa cor, pare o script aqui, pare o código Vamos ver se isso funciona, e funciona. E vamos dar uma olhada mais de perto aqui. Podemos ver que o pé do gato aqui está dentro da área verde, e é claro que não é isso que queremos, então temos que consertar isso mais tarde. Mas, por enquanto, temos o gato caindo. E então ele para sempre que atinge o chão aqui. Mas é claro que é um pouco tarde demais, então o pé precisa estar acima do solo, é claro, então temos que pensar em uma solução para isso. Mas, no momento, a próxima coisa que implementaremos será a gravidade. 54. 54 Simular a gravidade: Então, o gato já está caindo, como podemos ver aqui, mas não é realista porque não temos nada parecido com a gravidade, que aceleraria a velocidade aqui. Portanto, essa é apenas uma velocidade uniforme, o que, obviamente, não é fisicamente correto. Ok. Mas como simulamos a gravidade? Muito fácil. Nós mudamos y por, neste caso, menos cinco aqui, e isso é uma mudança constante, e precisamos que essa mudança constante seja alterada, dinâmica, e isso deve ser ajustado no for evolut Eu mostro o que quero dizer, mas antes de fazermos isso, vamos introduzir uma variável que chamamos de velocidade ou melhor chamá-la de velocidade y porque também queremos uma velocidade para a direção x. Então, chamamos isso de velocidade y, e somente para esse orgulho, é claro, porque essa noiva está fazendo o movimento Ok. Agora temos a velocidade y. Agora a configuramos no início do jogo para um determinado valor. Então, vamos configurá-la para uma, não minha variável, mas para a velocidade y aqui, e podemos apagar ou excluir essa minha variável aqui Nós não precisamos disso. E, a propósito, devemos nomear nosso jogo de pular e correr. Então, chamamos isso de jump around, não é muito criativo, mas é claro que você pode nomeá-lo de forma diferente, mas vou chamá-lo assim aqui. Ok. Então, agora, se definimos a velocidade y como um, precisamos usá-la, é claro, e a usamos aqui para evolut em vez dessa constante menos cinco Então, vamos arrastar a velocidade y até a mudança y y, e temos a mudança y y velocidade y. Então, podemos configurá-la para menos cinco e tentar novamente Então, nos livramos disso aqui também, ocultamos a exibição da velocidade y para que possamos ver o gato caindo. Agora o gato cai novamente. Sem mudanças, mas agora temos a possibilidade de introduzir uma estimulação gravitacional. Como fazemos isso? Nós mudamos a velocidade y, em uma certa quantidade em cada iteração aqui nos quatro evolutivos Então, no final, podemos alterar a velocidade y por menos, digamos 0,5 Vamos começar com isso e ver como isso funciona. Essa é uma gravidade muito forte aqui. Então, o gato está realmente caindo rápido. Mas eu acho que está tudo bem. Também podemos alterar isso para, por exemplo, menos um e depois testá-lo Então, está começando devagar e depois ficando mais rápido muito rapidamente. Você pode experimentar um pouco com as configurações aqui, então mude isso e altere a velocidade inicial aqui. Mas você pode ver que isso é mais realista do que ter uma velocidade uniforme aqui o tempo todo. Uma velocidade constante não é natural. Então isso é uma espécie de simulação para a aceleração aqui, para a gravidade da Terra. E eu acho que isso é um pouco lento demais. Então, talvez vamos começar com menos dois. Sim, acho que está tudo bem. Talvez devêssemos começar um pouco mais rápido assim e depois fazer isso um pouco menos. Vamos tentar isso. Agora, isso é muito lento. Vamos aumentá-lo um pouco mais alto. Isso é muito rápido. Você pode ver que o gato está preso no chão aqui. Então, talvez estivesse tudo bem aqui. Sempre podemos ajustá-la mais tarde porque temos essa variável aqui, então você pode ajustar esses dois valores aqui. Ou podemos, é claro, também colocar uma variável para esse valor aqui, que possamos criar uma nova variável e chamá-la de gravidade. E talvez devesse ser para todos os sprites, porque a gravidade deve ser a mesma para todos os sprites, não apenas para esse Então, digamos que para todos os sprites aqui, podemos definir a gravidade aqui -0,5 e, em seguida, colocar gravidade aqui nessa velocidade de mudança y pela gravidade. Vamos tentar. Não deveria ser a diferença. Então, aqui você pode ver explicitamente de uma forma muito bonita que o gato está afundando no chão porque a velocidade é muito maior agora, e a detecção de colisão é lenta, por assim dizer, o gato está caindo no chão Então, isso é o que abordamos como o próximo problema, mas não é muito difícil fazer isso, mas podemos usar outro recurso de blocos personalizados ao fazer isso. Então, o próximo vídeo será sobre puxar o gato do chão novamente até a superfície e, para isso, precisamos de um novo recurso para blocos 55. 55 Como cavar o gato: Então o gato está caindo. Tudo bem, mas está preso no chão. Então, o que podemos fazer sobre isso? A resposta é que podemos desenterrá-lo novamente. E como fazemos isso com uma repetição? Ou, nesse caso, repita até que então arraste essa repetição até repetir aqui. E agora precisamos de uma condição aqui. E para essa condição, usaremos novamente a cor tocante Cor tão tocante. Se esse sprite estiver tocando na cor, ele deve ser da mesma cor do Então escolha a cor do chão. Deve ser dessa cor. Caso contrário, não funcionará. E repetimos até tocar na cor Não, repetimos até não tocar na cor. Isso não está aqui sob operadores, esse verde não, precisamos usá-lo sem tocar em cores Arraste isso para o não aqui e isso não precisa ir aqui. Isso, precisamos repetir até não tocar mais na cor para que o gatinho fique realmente fora do chão Algo parecido, talvez. E então podemos pará-lo para que esse loop não continue aqui. O que fazemos até que o gato saia do chão? Precisamos movê-lo, é claro, para fora do solo. E isso é mudando o y, é claro. Precisamos mudar y por um porque um está para cima, então precisamos mudar y nesse loop. Contanto que ele toque na cor, então, quando não estiver mais tocando na cor, esse loop sairá e o gato estará na superfície Então essa é a teoria, e agora precisamos colocá-la em algum lugar aqui. E, claro, precisamos fazer isso aqui, se tocando em cores Se tocar na cor, então o gato já está dentro do chão dentro dessa área verde aqui, e precisamos subir mudando y por Passo a passo, estamos subindo novamente. De descer, cair no chão, subimos novamente até que o gato não toque mais nessa cor Depois disso, depois que o laço sair, paramos tudo e o gato deve estar na superfície, sem tocar mais na cor Vamos tentar e você verá que está funcionando. Então, enfatizo, está lentamente saindo do solo novamente e depois parando na superfície. Então, dessa forma, isso é bom porque você pode ver o procedimento aqui, o que ele está fazendo. Então, o gato está um pixel por um pixel indo para cima até chegar ao ponto em que não está tocando na cor verde Não mais. Então, isso está funcionando, mas não é muito bom para o jogador porque está visível. Essa ascensão do gato é visível na superfície. Então, precisamos fazer algo sobre isso. E isso é possível com a ajuda de um bloco personalizado. Então, fazemos um bloco. E nós a chamamos de correção Y. Isso serve para fixar a corneta Y, que é um pouco baixa demais para estar na superfície da cor desse retângulo Mas não clique em K agora porque precisamos marcar esta caixa aqui, executar sem tela, atualizar O que isso significa? Nós podemos ver isso agora. Então marque esta caixa, clique em OK, e então vamos colocar isso aqui, essa repetição até dentro do nosso bloco de definição aqui. Então defina fix y. Então, vamos reparar a posição y aqui para o gato, e chamamos isso, é claro, sempre que o gato estiver tocando o chão ou tocando a cor Vamos tentar isso. E vemos que não vemos mais esse surgimento do gato. Portanto, isso corrige nosso problema. Mas por quê? Como você pode ver ao clicar novamente em Editar. Essa é a caixa de seleção que marcamos executar sem atualização de tela, e é exatamente isso que ela deveria significar Portanto, você não pode ver nada do que é feito aqui dentro desse bloco personalizado. Portanto, tudo o que é feito aqui não é atualizar a tela Então isso significa que esse aumento aqui não é visível. E isso é exatamente o que precisamos para esse procedimento aqui. Além disso, há outra vantagem nisso, e a vantagem é que é muito mais rápido sem a atualização da tela Então, esse bloco aqui ou esse código aqui dentro é executado muito mais rápido do que todo o código que está aqui nesse loop eterno, por exemplo, porque não há necessidade atualizar a tela para desenhar a tela E no zero, há uma taxa de quadros, uma taxa de quadros fixa de 30 quadros por segundo, uma atualização de tela é feita 30 vezes por segundo, e tudo o que você faz aqui acionará uma atualização de tela, e é por isso que você não pode atingir uma certa velocidade Portanto, é limitado a esses quadros por segundo, 30. Mas se você usar um bloco personalizado aqui com essa caixa de seleção aqui, você não está mais limitado. Ainda há um limite aqui porque você não pode bloquear toda a CPU do seu computador aqui enquanto faz isso aqui dentro do loop, mas é muito mais rápido do que com a atualização da tela Então, podemos ver aqui que o gato está completamente sólido na superfície do solo, então não há como afundar e subir novamente. E isso é muito bom porque dessa forma, um lado, é mais rápido e, por outro lado, você não consegue ver nada na tela que é feito aqui dentro desse bloco. Muito importante. Então, se você tem algo que precisa ser feito muito rapidamente e com desempenho mais rápido do que, por exemplo, a atualização normal da tela, então você pode fazer isso aqui dentro um bloco personalizado com esta caixa de seleção aqui, execute sem a atualização da tela Como eu disse, ainda há um limite para o que pode ser feito em termos de desempenho, mas aqui, isso é muito mais rápido e você não pode ver os efeitos até que esse bloco termine. Então, depois, é claro, esse bloco tenha terminado, você poderá ver os efeitos na tela. Mas aqui dentro, por exemplo, se y for alterado por um, essa alteração aqui não será renderizada na tela, mas continuará aqui nesse loop até que esse bloco seja encerrado Ok, agora temos a queda do gato, e sim, e o gato está parado em terra firme sem afundar na lama ou Então, isso é bom, e agora podemos realmente implementar os controles para mover o gato para a esquerda e para a direita, e também, é claro, para pular 56. 56 O gato salta: Antes de fazermos os controles aqui para a parte de pular, precisamos trocar de roupa Então, se o gato cair, precisamos colocar esse traje, que já está lá, o primeiro traje inicial, mas precisamos torná-lo explícito Então, quando clicar em go, a roupa certa deve ser escolhida, então é a fantasia, que é esse tipo de gato pulando E se o gato estiver realmente caindo no chão, devemos mudar para uma roupa diferente aqui Se tocar na cor, então conserte y, e antes disso, podemos mudar o traje aqui para o primeiro E vamos tentar se isso funciona. E vemos que funciona assim que o gato cai no chão, ele muda para essa outra fantasia para a primeira fantasia Ok, então isso está funcionando, e agora precisamos adicionar controles para o salto, e isso é com a barra de espaço, eu sugeriria, então temos que colocar um se aqui, se, e então precisamos verificar se a tecla de espaço está sendo pressionada Então, isso está aqui sob detecção, e temos essa tecla de espaço pressionada Já é espaço aqui, mas você também pode pular com uma tecla diferente, se quiser, então talvez seta para cima, algo parecido, mas estou usando a tecla de espaço aqui. Então, vamos colocar isso aqui no formulário evelop. Então, talvez aqui, e precisemos prolongar isso. Portanto, certifique-se de que todo o código que já está lá não esteja posicionado aqui dentro disso se precisarmos colocar outra coisa aqui Então, se a tecla de espaço for pressionada, fazemos algo diferente , ou depois disso, fazemos o resto aqui que já fizemos antes. Ok, o que faremos se o espaço continuar pressionado? Isso é surpreendentemente fácil. Precisamos que uma velocidade seja mais rápida do que é agora. No momento , esse é um valor desconhecido aqui, então podemos exibi-la assim. Então, vamos nos livrar da gravidade. Nós precisamos disso. É uma constante, então não precisamos mostrar isso. E aqui temos o -16,5. Esse é o valor no momento. Então, se o gato cair, ele atinge essa velocidade e não muda mais. Mas acho que ainda há um problema. primeiro problema é que agora o jogo parou, então não podemos mais interagir com o gato ou com o código aqui. Então, precisamos remover toda essa parada aqui. Então guarde isso. O outro problema é que não estamos definindo a velocidade y para zero. É isso que devemos fazer. Se você for aqui para corrigir y, podemos fazer isso aqui atrás após a repetição até mudarmos a velocidade y para zero. Então deve ser zero aqui. Mas ainda está flutuando. E isso é porque estamos sempre mudando a velocidade aqui. Então mude a velocidade y pela gravidade. Mas não vamos falar sobre isso no momento. Portanto, há algo que precisamos fazer aqui se a tecla de espaço for pressionada. Então é isso que precisamos implementar aqui. Este é um método muito fácil de saltar. Precisamos apenas definir a velocidade variável aqui, velocidade y, para um determinado valor. Digamos oito, por exemplo. E o que isso faz é redefinir a velocidade y para oito. Então, oito é para cima. E isso faz com que y do gato aumente para essa altura, e então a gravidade a altere, então, recue passo a passo, dois diminua novamente. Então, vamos ver como isso funciona. Então o gato está caindo e se preparando para o espaço, e o gato está pulando Então isso já funciona, e isso é apenas definindo a velocidade y, dois, oito aqui neste caso. E com esse oito, você pode dizer o quão alto ele está pulando, então vamos talvez configurá-lo para 16 E então podemos ver que este é um salto muito alto aqui. É muito alto, então acho que oito é razoável. Agora, isso é um bom salto. Você sempre pode ajustá-lo mais tarde, claro, e oito é um bom valor, acho que por enquanto. Então, o que fizemos aqui? Na verdade, acabamos de introduzir aqui, a troca de roupas, é claro, o que não é tão importante para a parte de pular, mas essa é a parte importante aqui Se o espaço da tecla for pressionado, defina a velocidade y para oito e pronto. E, claro, a gravidade cuidará do resto. A velocidade oito aqui está fazendo com que a captura aumente. Mas, novamente, aqui, a gravidade é sempre subtraída da velocidade y. Então, a velocidade será negativa ou zero, e zero, estará no pico do salto Aqui em algum lugar aqui. Neste ponto, será zero, e então a velocidade será novamente negativa, e então o gato cairá novamente. Sempre que a velocidade y é positiva , o gato está subindo, e se a velocidade for zero, ele não está fazendo nada, e se a velocidade for negativa, ele desce. Então, isso não é mais nada a fazer para pular ou talvez apenas mais uma coisa que precisamos fazer Precisamos trocar de roupa novamente para a segunda. Então olha e depois troca de roupa. E se o espaço da tecla for pressionado, podemos mudar para o segundo traje aqui. Então, vamos tentar isso. E cada vez que pulamos, o gato vai para a próxima roupa ou essa fantasia de pular ou caminhar E isso está funcionando bem. Ok, agora que fizemos isso, precisamos, é claro, controlar o gato no espaço horizontal, indo para a esquerda e para a direita. Além disso, se estivermos pulando, também precisamos controlar o gato no ar Então é isso que faremos no próximo vídeo. 57. 57 Mover o gato para a esquerda: Tudo bem, então vamos mover o gato para a esquerda e para a direita. Isso é o que falta agora para o controle de gatos. Vamos fazer isso. O que nós precisamos? Precisamos disso se estivermos aqui. Vamos copiar isso, duplicar isso. E você verá que o dobro coloca o bloco inteiro aqui, o resto do bloco, então vamos nos livrar dessa parte inferior, e agora não precisamos da tecla de espaço, mas da tecla de seta direita. Claro, estamos fazendo outra coisa aqui, não trocar de roupa e não definir a velocidade y. Falando em velocidade y, precisamos de outra coisa aqui. Criamos uma nova velocidade variável x. Isso é o que precisamos para o movimento x na direção horizontal aqui. Para todos os sprites, é claro, apenas para o sprite do gato, e podemos usar Primeiro, precisamos inicializar isso. velocidade x está no início zero porque o gato não deve se mover no início, e então podemos configurá-la para outra coisa se a tecla for pressionada para o movimento para a esquerda ou para a direita. Para a tecla de seta direita, precisamos mudar, precisamos definir a velocidade x para algo como cinco, talvez, e cinco é a direção certa. Dubica isso e eu pressiono a seta para a esquerda, depois é menos cinco Menos cinco seria então para a esquerda, e precisamos, é claro, mudar x também, não apenas y. Então, vamos para o movimento, altere x. Não por dez, mas temos essa nova variável aqui, velocidade x, e precisamos configurá-la para velocidade x aqui Mude x pela velocidade x, mude y pela velocidade y. Parece lógico e é, e agora precisamos inserir isso aqui no espaço certo no lugar certo aqui. Então, isso deve estar logo abaixo do espaço da tecla if pressionado, e isso fica um pouco longo, então talvez tenhamos que refatorar isso mais tarde Mas, por enquanto, tentamos isso. Se a tecla de espaço for pressionada, saltaremos, e isso significa que a velocidade y está definida, e se a tecla de seta direita for pressionada, a velocidade x será definida como cinco, tecla de seta esquerda será pressionada, então ajustamos a velocidade x para menos cinco e, em seguida, alteramos x pela velocidade x, assim como fizemos para a direção y. É isso mesmo. Vamos experimentar e podemos ver que podemos controlar o gato com a tecla do cursor. Agora estou pressionando para a direita, agora estou pressionando para a esquerda. Mas você já vê um problema porque o gato não está parando. Agora não estou pressionando nenhuma tecla e o gato ainda está se movendo. Agora ele não está se movendo porque está na borda direita, mas vamos verificar por que esse é o caso. Estamos definindo a velocidade x para cinco ou menos cinco e, no início, configurando-a para zero Mas se, para everop, definirmos para um valor diferente de zero, ele não será redefinido para zero. Isso é o que temos que fazer. Definimos a velocidade x como zero no final do loop eterno. Dessa forma, ele percorre o loop e define a velocidade x25 ou menos cinco, se alguma tecla for pressionada, para a esquerda ou para a direita, alterando x pela velocidade x e, em seguida, configurando-a para zero novamente Se na próxima iteração nenhuma tecla for pressionada, ela permanecerá zero e o gato parará Vamos tentar isso. Funciona, então também podemos parar o gato. Na verdade, é isso. Nada mais do que isso. Podemos mover o gato para a esquerda, tudo bem, com as teclas de seta esquerda e direita. Mas o problema aqui é que o gato está sempre voltado para a direita, o que obviamente não é correto. Se pressionar para a esquerda, ele deve ficar voltado para a esquerda, ou seja, isso também podemos corrigir, mas faremos isso no próximo vídeo. 58. 58 Como enfrentar a direção certa e corrigir o salto duplo: Neste vídeo, vamos corrigir duas coisas. O primeiro, eu já sugeri no último vídeo. O gato não está voltado para a direção certa. Se eu levar o gato para a direita, tudo bem, mas se eu andar com ele para a esquerda. Ele deve estar voltado para o lado esquerdo. Mas isso é fácil porque já tivemos isso com Avery. Avery também precisou virar à esquerda e à direita. Vamos fazer isso. Nós já sabemos como fazer isso. A primeira coisa que precisamos fazer é definir o estilo de rotação para a esquerda e para a direita. Este é esse bloco aqui em movimento. Então, quando você clica. Defina o estilo de rotação para a esquerda. Essa é a primeira coisa. Então, precisamos de dois, dependendo da direção, é claro, dependendo da seta para a esquerda ou para a direita. Precisamos apontar na direção certa aqui. Vamos colocar o ponto na direção de 90 graus aqui. Agora esse é o lugar errado. Não é espaço, mas seta para a direita e, em seguida, aponte na direção da seta para a esquerda. Precisamos girar isso em torno de -90 graus e, dessa forma, ficaremos bem Vamos testar isso, e está funcionando como já funcionou na aventura de Avery Isso não é nenhuma surpresa aqui. Então esse é o primeiro desafio e o primeiro problema que resolvemos agora. Então, o segundo problema que temos que resolver é o problema do salto, porque o jogador também pode pular quantas vezes quiser no ar quiser Então isso não é bom. Como corrigir isso é muito fácil. Precisamos lembrar que já estamos pulando. Se já estamos no ar ou o gato já está no ar, não pulamos novamente. Então, precisamos de outra variável aqui, uma variável local somente para esse direito, e a chamamos de salto e precisamos defini-la , é claro, como zero no início do salto, e então precisamos configurá-la para outra coisa quando pulamos Pressione o espaço da tecla e salte para um. E se atingirmos o chão aqui, colocamos em zero novamente. Aqui, se tocar na cor verde , nós a configuramos para zero novamente. Vamos tentar isso primeiro. Aqui temos o salto. Está começando com zero, e esse é um. Se atingirmos o chão, é zero, então isso funciona. Para evitar que o jogador possa pular duas vezes, precisamos disso se houver igualdade de operadores. E agora verificamos nossa variável de salto recém-criada aqui. Se já é um, não devemos fazer nada. Se for zero, então podemos pular. Então aqui está. Precisamos colocar isso aqui, arrastar isso até aqui então. E então arrastamos isso novamente para a tecla if pressionada aqui para a tecla de espaço. Então, se a tecla de espaço for pressionada, verificamos se há salto, então o salto deve ser zero, e então podemos definir o salto para um, podemos trocar de roupa e podemos definir a velocidade Y para Então o gato vai pular, caso contrário, o gato não vai pular. Vamos testar isso, e eu só posso pular uma vez até cair no chão, depois posso pular novamente. Então isso é bom. O gato pode pular, mas só tão alto e não mais alto. OK. Agora temos um bom controle do nosso gato. Mas, no momento, temos apenas esse avião aqui, no chão, e isso não é muito empolgante aqui, e não há nenhum desafio. precisemos pular em uma nova plataforma, Talvez precisemos pular em uma nova plataforma, ou precisamos ser capazes de cair de uma plataforma para o chão. Portanto, isso não é muito envolvente. Então, precisamos consertar. 59. 59 Como corrigir a detecção de colisão: Tudo bem, então podemos mover o gato, o gato está caindo, e temos detecção de colisão, como você pode ver aqui, o gato não está preso no chão Mas há um problema e, para mostrar esse problema, precisamos mudar um pouco o cenário aqui para introduzir outro obstáculo, outra plataforma A primeira coisa que quero fazer é me livrar do contorno, porque acho que é melhor ver tudo e raciocinar sobre a detecção de colisão, por exemplo, se não tivermos um esboço aqui Então clique em Esboço e selecione este ano, e o esboço desaparecerá E agora fazemos outro retângulo em algum lugar aqui, talvez seja um pouco alto demais. O gato deve ser capaz de pular na plataforma. Então, algo assim, e para garantir que o gato seja realmente capaz de pular na plataforma, aumentaremos um pouco a força de salto aqui. Aqui, definimos a velocidade y para oito, e eu gostaria de aumentá-la para, digamos, dez, então vamos tentar se isso é realmente alto. Sim, está tudo bem, mas não é alto o suficiente para a plataforma. Então, vamos fazer com que seja 12. E dessa forma, deve ser fácil para o gato subir na plataforma. E você pode ver que a detecção de colisão também está funcionando aqui, então o gato não está caindo da plataforma ou através da plataforma Mas se eu sair da borda aqui, então ela está caindo. Ok, até agora tudo bem. Mas agora vamos ver o problema. Se eu passar por baixo da plataforma aqui com um gato e depois pular, vemos que o gato é realmente teletransportado pela plataforma E para explicar isso, isso é bem fácil porque aqui fazemos essa correção y, estamos sempre fixando o y em uma direção, e isso é para cima. Então, sempre que o gato os toca, a cor de fundo está aqui , corrigimos y subindo E, claro, aqui neste caso, isso está errado. Precisamos ir até aqui. Se o gato estiver pulando de baixo contra a plataforma, isso está errado. Então, o que precisamos fazer é corrigir isso aqui. O que poderíamos fazer é decidir se precisamos aumentar ou diminuir a correção dessa correção aqui, verificando a velocidade y, se a velocidade y estiver abaixo de zero, então poderíamos fazer a correção para cima e, no outro caso, se for maior que zero, poderíamos fazer a correção na outra direção Mas isso leva a mais alguns problemas se considerarmos também o movimento horizontal. Então, por exemplo, o gato agora pode simplesmente subir as escadas aqui desse jeito Se você pode ver isso, eu só preciso ir até a borda direita ou a borda esquerda aqui. Então, a borda direita do gato está atingindo a borda esquerda desta plataforma aqui, e está subindo automaticamente as escadas, por assim dizer Então, isso também está errado. Precisamos considerar também o movimento X aqui, o movimento na direção horizontal. Ok, precisamos mudar um pouco a estratégia aqui. Então, essa estratégia é que corrigiremos y assim que percebermos que o gato está tocando a cor, e vou mudar a estratégia agora que vou dar passos na direção certa, na direção larga da velocidade, é claro E então, para cada pixel, verificamos se o gato toca na cor e, se ele toca na cor , voltamos um passo Então, isso é um pouco diferente. Aqui estamos nos afastando do gato preso no chão ou na plataforma Então, neste caso, vamos subir até que o gato não toque mais na cor, mas eu quero mudá-la para que possamos dizer que o gato deve se mover, digamos cinco passos ou três passos E para cada passo, procuramos o toque e, se for tocante, não estamos dando o passo, estamos recuando um passo na outra direção Então, vamos ver como fazer isso. Primeiro, precisamos mudar isso aqui, repetir até precisar ser repetido. Então, vamos arrastar isso para cá. E agora estamos sob controle. Nós prolongamos este ano , repetimos até. E agora precisamos dizer quantas vezes isso deve ser repetido e esse é o número de etapas que queremos dar nesta rodada. Precisamos parar o script aqui. Caso contrário, ele está fazendo esse loop infinito aqui e não fazendo nada no loop. Isso não é muito bom. Portanto, se você estiver com gagueira e tudo estiver lento, talvez queira parar o jogo Com esse código aqui, você pode ter um desempenho lento de todo o navegador aqui, então, certifique-se de parar o jogo. Ok. Quantas vezes devemos repetir isso? O número de vezes depende da velocidade y. Precisamos cobrir essa distância, velocidade y. Por exemplo, menos três aqui Claro, você não pode fazer isso menos três aqui, mas precisamos de um valor absoluto aqui, e há um bloco para isso Aqui podemos pegar o valor absoluto da Velocidade y. Ah, esse foi o bloco errado aqui. Precisamos repetir isso, repetir dez, e então precisamos definir isso aqui. O que é absoluto? Você também pode escolher funções diferentes aqui: funções matemáticas. Se a velocidade y for menos, digamos menos três, isso será três, e se a velocidade for três, então isso também será É eliminar esse sinal negativo, se houver , porque não podemos repetir esse loop, claro, menos três vezes, mas precisamos repetir três Então, o que precisamos fazer nesse loop? Então, vamos passo a passo na direção da velocidade y, e precisamos verificar aqui se a velocidade y está acima de zero ou abaixo de zero. Então, vamos ver isso se então e o operador for maior que. E então dobramos a velocidade aqui. Se a velocidade y for maior que zero, então fazemos alguma coisa, ou se vamos fazer outra se for aqui, duplique esta, e depois abaixo se a velocidade y estiver abaixo de zero, então essa é essa Ok. Então, se a velocidade y está abaixo de zero, então fazemos outra coisa. E o que fazemos? Nós mudamos y por um. Então, se estiver acima de zero, alteramos por um, se estiver abaixo de zero, alteramos por menos um E se for zero, então não mudamos y. Ok. Então, isso está indo na direção correta e no número correto de etapas aqui. Então, isso deve funcionar. Nós nos livramos deste ano, então não está funcionando. Então, o gato está caindo no momento. Não é um problema. Isso ocorre porque não estamos corrigindo isso aqui. Então, estamos apenas nos movendo na direção aqui. Mas também precisamos nos livrar desse ano, então troque y pela velocidade y. Então isso é o dobro. Devemos substituir isso pela correção y. Então, isso não é só no caso de toque Então, precisamos nos livrar disso precisamos fazer isso em vez dessa mudança y pela velocidade x. Então, podemos deletar isso. Vamos remover isso. , o nome desse bloco não está Obviamente, o nome desse bloco não está mais correto, então podemos alterá-lo. Adicione-o e, em seguida, mova. Podemos chamar isso de movimento, talvez. Acho que está tudo bem e certifique-se de marcar essa caixa de seleção, execute sem atualizar a tela Agora, isso é movimento e, no momento, está se movendo apenas na direção ampla, mas tudo bem, e não se moverá para a cor de fundo aqui. Esse é o objetivo. Precisamos verificar, é claro, se o gato está tocando na cor e depois recuar Ok. Então, agora no velop F estamos apenas nos movendo com a velocidade y aqui, e estamos verificando se isso está acima de zero ou abaixo de zero, e estamos fazendo isso passo a passo aqui para que, em cada etapa, possamos verificar se o sprite está tocando Ok, o que faremos se essa cor for tocante? Este gato está tocando a cor. Precisamos de outro, se estiver aqui. Coloque isso abaixo e , se tocarmos na cor, então fomos longe demais, é claro, e precisamos fazer backup, então precisamos ir para o local y anterior. Então é aqui que introduzimos outra variável, outra variável local. Então, vamos criar uma variável somente para isso, e a chamaremos de valor de pus antigo. Portanto, esse será o valor antigo de pus antes da mudança. Então, antes de mudarmos aqui y, precisamos lembrar o y atual. Então, vamos fazer esse conjunto Não a gravidade, mas o valor da pose antiga, nossa variável recém-criada aqui, e a configuramos como, vamos para o movimento , e aqui embaixo, temos essa posição y. Então coloque isso aqui. Defina o valor da pose antiga para a posição y. Então, queremos lembrar essa posição y antes de alterá-la. Então, podemos alterá-lo por um ou por menos um. E então, se sentirmos que o gato está tocando a cor, já é tarde demais. Está tocando a cor Não queremos isso, então voltamos à antiga posição aqui. Então, vamos definir y definir y para a posição antiga neste caso. R Então, esse é o recuo. Então percebemos que estamos tocando na cor e, em seguida, redefinimos isso para o valor antigo que definimos aqui no início do loop de repetição Está bem? E há outras coisas que precisamos fazer. Precisamos começar a pular e precisamos trocar de roupa aqui Então, coloque o salto em zero porque não estamos mais pulando porque batemos em alguma coisa, atingimos a plataforma ou o chão e trocamos a roupa para o gato em pé Então, vamos tentar se isso funciona, se isso realmente funciona, e vamos nos livrar de todas essas variáveis aqui. Então esconda tudo aqui, e vamos ver se isso funciona. Ok, até agora funciona, parece funcionar. E o movimento na direção horizontal ainda funciona, é claro, porque não o alteramos. E agora vamos verificar se podemos pular contra essa plataforma. Oh, estamos presos. Portanto, não está funcionando completamente. O gato está preso aqui. Por que isso? Porque não definimos a velocidade y como zero. Então, isso é o que já temos aqui. Então, vamos colocar isso aqui, se tocarmos na cor , precisamos definir a velocidade y como zero Então o gato não está mais se movendo e simplesmente cairá. Vamos tentar isso. Isso é melhor e parece funcionar muito bem. O gato pode pular muito alto agora, mas acho que está tudo bem. Sempre podemos ajustar isso aqui com a velocidade definida y para 12, e talvez possamos configurá-la para 11. Vamos verificar isso. Tudo bem, também. Mas ainda há um problema. Então, vamos ver se podemos pular aqui. Então, o gato pode ficar preso aqui. Você pode ver porque isso é causado pelo movimento horizontal. Portanto, precisamos também cuidar do movimento horizontal aqui. Precisamos substituir essa mudança x pela velocidade x com a mesma lógica ou similar à deste ano. Então, precisamos fazer tudo também para x para velocidade x e direção x. 60. 60 correção de movimento horizontal: Agora estamos lidando com o movimento x aqui, então o movimento Y já está funcionando. Vamos copiar esse loop de repetição aqui com o botão direito do mouse em Fazer isso, e vamos colocá-lo aqui logo abaixo do primeiro O que fazemos agora é substituir tudo o que tem a ver com y aqui por x. velocidade y precisa ser a velocidade x. Vamos fazer isso aqui é a velocidade x, e mudamos todas as ocorrências aqui. Excluímos essa velocidade y aqui. Velocidade x, velocidade x, e aqui também a velocidade x, e aqui precisamos definir a velocidade x em vez da velocidade y. Ok, aqui precisamos definir x. Vá para o movimento defina X duas posições antigas. Podemos excluir, clique com o botão direito do mouse neste bloco aqui e exclua o bloco. Só vamos deletar este único bloco aqui, apenas definir y. Então, isso desapareceu agora. Defina a velocidade x20. Nós fizemos isso. Mude y, mude y, precisamos mudar isso também, então mude x e mude x. Primeiro, altere x por menos um é o segundo e aqui por um, e agora podemos excluir isso aqui Mas isso e também isso. Claro, isso aqui precisa ser a posição x. Então, isso é aqui embaixo. Defina o valor antigo da pausa Podemos reutilizar essa variável aqui, então não há problema em usar a mesma aqui porque sempre a configuramos aqui no início do loop Defina o valor antigo da pausa dois, posição x, velocidade x maior que zero, altere x por um, velocidade x, menor que zero, altere x por menos Isso deve ficar bem. Ok. Vamos tentar isso. Parece funcionar. Mas mais um problema: é um pouco rápido, porque saímos deste ano, trocamos x pela velocidade x. Precisamos deletar isso. Então exclua aqui e vamos tentar agora. Ok, então isso parece funcionar, e vamos tentar acessar a plataforma aqui de lado. Então é assim que vemos um problema aqui. Então, estamos presos aqui com nosso gato com bigodes. Então, isso é algo que precisamos resolver, mas não agora. No momento, podemos ver que não podemos entrar na plataforma. Mas podemos ficar presos aqui no limite. Mas, felizmente, podemos contornar isso pulando então, e pular nos livrará de ficarmos presos Você também pode ver que nosso gato não é simétrico. A cauda está um pouco mais para o lado. Se virarmos o gato, teremos uma colisão aqui, depois teremos um toque, e isso é um problema, e é isso que precisamos consertar, e vamos consertar isso com Mas, no momento, o movimento está funcionando. Está melhorado. Portanto, não podemos atingir a plataforma baixo e também não diretamente, pelo menos aqui pela lateral. Mas ainda podemos ficar presos aqui, e esse é um problema que precisamos resolver, e isso faremos no próximo vídeo. 61. 61 Bata na caixa, não no gato: Então, eu já sugeri no último vídeo o que podemos fazer sobre nossa detecção de colisão para melhorá-la E eu quero te mostrar novamente o problema que temos. Então, se eu pular aqui na plataforma, você pode ver que podemos ficar presos aqui com nossas cabeças, por exemplo, com a cabeça de um gato. Então, isso é um problema aqui. Ainda podemos ficar presos, e também com um rabo aqui porque a fantasia está virada ou o gato está virado E depois do lançamento, a cauda está dentro dessa plataforma aqui Portanto, ele está tocando nessa cor específica, e você não pode mover o gato para fora, exceto pelo que funciona como pular aqui nesta posição Isso funciona novamente, mas podemos resolver esse problema com bastante facilidade E fazemos isso com a ajuda de caixas de colisão ou caixas de impacto Vamos chamá-la de caixa de acerto, e o que é caixa de acerto. No nosso caso, uma caixa de sucesso é outra fantasia, então precisamos criar outra fantasia aqui. Vamos divulgar o primeiro. E agora temos uma fantasia que será a caixa de sucesso. Então, vamos chamá-lo de hit box aqui. Ok. Então, agora não temos a caixa. Então, fazemos uma caixa com essa ferramenta aqui, com uma ferramenta retangular, arrastamos uma caixa aqui, em algum lugar aqui, talvez, e depois a colocamos na parte de trás Então pressione aqui para trás, e agora o gato está acima da caixa. Ok, qual é o propósito dessa caixa de sucesso? Primeiro, vamos nos livrar do esboço, então clique aqui, e não temos o esboço Ok, isso não é tão importante, mas eu prefiro que seja assim. Então, qual é o propósito da caixa de sucesso? A caixa de acerto deve ser usada para fazer o teste de acerto? Nós, no nosso caso, é essa cor tocante Esta caixa será usada para testar as cores tocantes, a cor do pano de fundo do solo e os obstáculos aqui e as plataformas Essa será a caixa em que será testada a colisão ou a cor em que o toque será testado Isso significa que temos que livrar do gato aqui, é claro. Mas primeiro, vamos ajustar um pouco a caixa aqui. Primeiro, ele deve estar centralizado. Arraste-o para o centro aqui e ele deve se encaixar nessa cruz aqui com o círculo Se você o tiver centralizado, basta ajustar aqui o tamanho Então coloque isso logo abaixo da última linha, talvez dos pés do gato. E aqui, também precisamos colocá-lo em algum lugar aqui. Portanto, em todos os lugares onde o gato está tocando o chão, a caixa de sucesso também deve estar E aqui precisamos pegá-lo, talvez até chegar aos ouvidos aqui, então algo assim. Então eu acho que podemos viver com isso. Podemos testá-lo um pouco mais tarde ou ajustá-lo um pouco mais tarde. Mas agora vamos nos livrar do gato aqui. Então, selecione todas as partes do gato e exclua-as. Não precisamos deles aqui. Então esta é a nossa caixa de sucesso, e vamos mover essa fantasia para cá, talvez até o fim. Não é tão importante, mas eu prefiro ter os dois quadros de animação aqui primeiro e depois a caixa de sucesso. Ok, agora temos uma caixa de sucesso para nosso gato e agora precisamos usá-la. Qual é a ideia para isso? Portanto, esse teste de cores tocantes aqui é importante. Para determinar se o gato está tocando a cor, o fundo, o chão, a plataforma Então, precisamos mudar para essa fantasia de hit box antes de fazer o teste, e isso será no início desse movimento definido. Então, vamos mudar para nossa fantasia de caixa de sucesso, trocar de roupa para caixa de sucesso. E então, é claro, no final, precisamos voltar atrás. Então, vamos voltar para, digamos, fantasiar um. Ok, então não temos mais essa armação de pular aqui, essa roupa de pular, mas vamos consertar isso mais mas vamos consertar isso Ok, então o que temos agora é que antes de fazermos o teste de acerto, o teste de colisão, esse teste de cores tocantes, estamos mudando para nossa caixa de acerto E então estamos fazendo esse teste de acerto, esse teste de colisão ou toque com essa caixa de acerto, e não com um sprite felino Não com uma fantasia de gato, pelo menos. E então, no final dessa função desse bloco personalizado, voltaremos à fantasia normal de gato aqui. O que isso significa? Isso significa que o jogador não verá nenhuma caixa de sucesso aqui porque tudo isso é feito sem uma atualização na tela, então o jogador não verá essa fantasia de caixa de sucesso, que é bom porque não queremos que o jogador veja a caixa de sucesso porque é feia e não é um gato Então, vamos tentar se isso já muda alguma coisa. Aqui temos nosso gato. Vamos pular um pouco e podemos ver imediatamente que não estamos mais presos. Além disso, a cauda não fica presa e tudo parece funcionar bem aqui. Além disso, se formos até a borda dessa plataforma, vemos que caímos imediatamente assim que essa perna aqui sai da plataforma. Então, mais um, e então ele cai. Então, vamos dar uma olhada um pouco em tela maior aqui. Vamos ver isso de novo. Então, assim que essa perna sai da plataforma, o gato cai, que é muito bom. E isso é claro, porque temos nossa caixa de sucesso para o teste e não mais a fantasia de gato. Portanto, ele não é testado para essa cauda, por exemplo, ou para tudo que está fora da nossa caixa de sucesso. Portanto, ainda há um problema aqui. Temos que nos livrar dessa fantasia de troca por fantasia porque então não teremos nossa fantasia de caixa de sucesso, e precisamos da fantasia de caixa de sucesso dentro desse bloco de fantasias aqui, e somente no final, podemos voltar para a fantasia original para a fantasia de gato. Portanto, precisamos substituir este ano e este ano por outra coisa. Então, primeiro, vamos lembrar qual roupa tínhamos no início. Então, para isso, precisamos de uma variável, torne variável para o sprite apenas um traje antigo E nós o configuramos no início do nosso bloco personalizado aqui. Coloque um traje antigo, e como obtemos o traje atual? Entendemos daqui que o número da fantasia não é o que queremos. Queremos o nome do traje. Então, o traje antigo é definido com o nome do traje atual. E então, no final, precisamos devolvê-lo ao nome desse traje. Então arraste isso aqui, coloque de fantasia em fantasia. O não é a escolha certa aqui, mas um traje antigo. Então, aqui estamos configurando para hit box e, no final, voltando ao traje antigo. E agora, para esses dois lugares aqui, precisamos mudar isso para um conjunto de roupas antigas, duas, e depois uma fantasia, uma. Então, isso fará o mesmo que trocar o traje pelo traje um, mas no final, aqui estará o traje um e não mais o traje antigo. Então, podemos duplicar isso e também fazer isso aqui, em vez dessa fantasia de troca Ok. Agora lembramos qual fantasia o gato tinha no início e, em seguida, a redefinimos aqui no final Mas esses dois lugares também podem mudar o traje antigo ou o traje para o qual ele foi redefinido. Então, vamos testá-lo aqui. Se ainda estiver funcionando, não deve ser uma grande diferença. Mas agora, o teste de acerto deve funcionar sempre com a caixa de sucesso e não mais com uma fantasia de gato. Então você pode ver que está funcionando bem e o gato cai, e a cauda, por exemplo, passa pela plataforma, o que é muito bom Então, podemos mudar um pouco a caixa de acerto para que possamos ver como isso funciona. Então vá até a caixa de acerto e torne-a muito menor. Então, algo assim, talvez. E então começamos um jogo e vemos que o gato está afundando no chão Ainda podemos movê-lo, mas ele está no chão. Pelo menos a fantasia, a fantasia de gato está no chão, mas a caixa de sucesso aqui não está. E, claro, não é uma boa ideia fazer assim porque precisamos que o gato fique de pé e não no chão, então vamos reajustar isso e desfazer as mudanças Vamos tentar de novo. E agora o gato está realmente tocando a superfície Ok, então esse é o truque da caixa de sucesso. Eu diria que esse é um truque muito importante porque dessa forma podemos fazer o teste de impacto, a detecção de colisão muito melhor do que com a fantasia de gato aqui E o truque é trocar a roupa pela caixa de sucesso, nossa caixa de sucesso, e depois trocá-la novamente no final. E tudo dentro desse bloco personalizado, obviamente, não é renderizado na tela Portanto, você não verá a caixa de acerto, mas verá o resultado. E o resultado é que o teste de acerto agora está muito melhor e o gato não deve ficar preso aqui. 62. 62 quebra-cabeça e 2ª sala: Agora que temos o controle do player trabalhando aqui, vamos verificá-los novamente. Assim, podemos pular, verificar se há colisões, e o gato, pelo menos no momento, não fica preso aqui Então, tudo isso é muito bom. Acho que isso também é algo com o qual podemos começar. Adicione um quebra-cabeça para sair desta sala aqui e ir para a próxima sala, e também para tornar essa sala um pouco mais desafiadora. Então, precisamos adicionar algumas paredes aqui, talvez outra plataforma ou talvez duas plataformas aqui e uma pequena joia que o gato precisa coletar. E então, se a captura atingir a gema, por exemplo , uma estrela, a saída se revelará e o gato poderá ir para a próxima sala. Então, vamos começar com um pano de fundo. Então, fazemos paredes aqui. Vamos copiar esta. Selecione aqui a seta e, em seguida, esta plataforma aqui, faça uma cópia dela e nós fazemos uma parede a partir dela. Algo assim, talvez, e depois copiamos isso novamente e colocamos do outro lado. Agora temos duas paredes e os gatos não podem escapar. E temos essa única plataforma, fazemos uma cópia novamente. Faça-o talvez um pouco menor aqui, coloque-o aqui, e então faremos uma cópia novamente onde a estrela estará. Então, agora, acho que temos. Então, temos que verificar, é claro, se o gato consegue alcançar todas as plataformas aqui, então acho que isso deveria ser possível. E aqui vemos o problema de que o gato não consegue pular mais alto do que isso. Então, talvez devêssemos colocar isso um pouco mais abaixo aqui, abaixo e fazer disso talvez um salto distante aqui. Agora, agora o gato está caindo na plataforma aqui. Isso não é bom, então torne-o um pouco menor. E agora o gato está caindo ao lado. E vamos verificar se isso é razoável. Sim, acho que é muito fácil, mas está tudo bem. Nós podemos viver com isso. E, claro, precisamos agora da estrela, a joia que o gato precisa coletar. Então, fazemos outro sprite aqui. Procure por uma estrela. Clique nele e agora temos a estrela. É um pouco grande demais, então faça cerca de 40%, e esse é o tamanho certo, eu acho. Então, vamos posicioná-lo em algum lugar aqui, e vamos ver como o gato pode lidar com isso. Então isso é fácil. Isso é fácil, então isso. E agora poderíamos coletá-lo. OK. Então, agora precisamos verificar se o gato toca essa estrela aqui E a ideia é que se ele realmente coletar a estrela aqui, então aqui a porta se abrirá ou aparecerá para que o gato possa sair Então, vamos pintar outro sprite. Então, podemos fazer o retângulo aqui. Algo assim muito grande, é claro. Então, vamos torná-lo menor, como 20. Sim, isso deve estar bem. Mas não podemos torná-la dessa cor porque tem que ser uma cor de passagem para que a arma do gato possa passar pela porta para a próxima sala. Então, vamos fazer uma cor acastanhada. Algo parecido. Eu acho que está tudo bem. E agora vamos posicioná-lo. Então, vamos mover isso aqui. Sim, acho que está tudo bem. Vamos dar uma olhada em uma tela grande. Não. Não está bem porque temos a cor verde aqui. Ainda assim, precisamos movê-lo um pouco para a esquerda. Então, vamos verificar novamente, não, ainda assim. Então, talvez algo parecido. Sim. Vamos torná-lo um pouco menor também. Vamos verificar novamente. Sim, acho que isso deve funcionar. OK. Então, vamos ver se o gato consegue andar pela loja. Sim, eu trabalho. Bem, acho que acidentalmente mudei essa porta para cá Vamos colocá-lo de volta. OK. Vamos verificar novamente. Se o gato conseguir passar pela porta. Sim. Está tudo bem. Agora, é claro, a porta precisa estar escondida quando o jogo começa. Então, vamos colocar isso aqui quando o lag é clicado e depois ocultar. Então, quando começamos um jogo, a porta não está lá. Portanto, isso precisa ser revelado coletando essa estrela aqui. Ok, então como verificamos a colisão do gato com a estrela aqui? Isso é fácil. Nós já temos isso para sempre. Nosso loop de jogo, e aqui podemos verificar a colisão. Então, vamos pegar um “se” aqui. E temos que sentir o toque, não tocando no ponteiro do mouse, mas tocando em outro sprite, e esse será Sr Então, se o gato tocar a estrela, o que acontecerá? Então precisamos revelar esse sprite aqui. Podemos renomeá-la como porta e precisamos revelar a porta. E como podemos fazer isso? Podemos nos comunicar com outros sprites enviando mensagens, é claro Então, vamos aos eventos. E então, quando eu recebo e precisamos definir uma mensagem, é claro. Mas quando eu recebo essa nova mensagem , a porta pode aparecer sozinha. E aqui, é claro, precisamos enviar a mensagem. Então, transmita, vamos chamá-la de nova mensagem aqui. Vamos chamá-lo de show exit. Para que aqui possamos receber essa saída do show e mostrar a porta. Ok, então isso precisa entrar aqui para acelerar. Então, se tocar na estrela, então transmita a saída do programa, e então a porta se mostre. Vamos verificar isso. Estou subindo até a estrela, e está funcionando. Agora, o gato teoricamente poderia ir para a próxima sala. Mas a estrela aqui tem que desaparecer, é claro, porque senão o gato não a coletará. Então, precisamos enviar outra mensagem aqui para a estrela. Ou talvez possamos usar a mesma mensagem por enquanto. Eu acho que isso também está bem. Então, se essa saída do show for recebida aqui, primeiro, vamos mostrar a estrela no início para redefinir tudo para o início. E então podemos receber esta mensagem mostrar saída. E então podemos esconder a estrela. Ok, então teste-o. Certifique-se de sempre testar sua lógica. Então, assim que tivermos algo novo, uma nova mensagem ou uma nova reação à sua mensagem, algo parecido, você precisará testá-la. Então isso funciona. Essa estrela desapareceu e os gatos podem entrar pela porta. Ok, bom. Portanto, a próxima sala deve ser outro pano de fundo. É por isso que precisamos desenhar um, e podemos dobrar o primeiro e mudar um pouco aqui Então, primeiro, precisamos dessa porta, novamente. Então, vamos até lá, escolha a seta aqui, copie-a e depois vá para os cenários Novamente, o segundo pano de fundo e, em seguida, cole isso. Você pode usar este botão aqui para colá-lo ou controlar ou comandar V. E, claro, temos que redimensioná-lo É muito grande aqui. Vamos torná-lo menor, menor, menor. Ainda é muito grande, talvez algo assim. OK. Então, vamos colocar isso aqui. Essa será a entrada. Acho que está tudo bem, e aqui o gato entrará. E para ir para a próxima sala, precisamos trocar os cenários, é claro, aqui vamos para o código novamente do gato, e isso podemos fazer aqui se a porta for tocada, talvez outra se estiver aqui, se então sentir, tocar na porta, então podemos mudar os cenários, então Troque o pano de fundo e, em seguida, o segundo pano de fundo. E podemos colocar isso, podemos colocar aqui, e então, pelo menos, o pano de fundo deve mudar aqui Vamos tentar isso de novo, e vemos que temos que redefinir o cenário aqui, é claro Então suba ao palco aqui e, quando clicar em Preto, podemos trocar o pano de fundo aqui dois, o pano de fundo OK. Então, agora estamos de volta ao primeiro plano Vamos até a estrela e depois podemos sair da sala. E estamos na segunda sala. Claro, precisamos esconder a porta aqui. Novamente, então vamos até a porta quando eu receber o próximo quarto. Não recebemos essa mensagem até agora, então precisamos criá-la. Então, transmita aqui. Mudamos o pano de fundo, mas antes que possamos criar uma nova mensagem e enviar essa mensagem aqui na próxima sala, para que a porta saiba que pode se esconder na próxima sala e depois se esconder e a porta deve sumir Vamos testá-lo novamente. E a porta sumiu, e somente essa porta está lá, mas isso faz parte do pano de fundo, então não podemos esconder isso e não precisamos Há mais uma coisa por enquanto. Precisamos colocar o gato aqui nessa posição. Então, vamos colocá-lo talvez em algum lugar aqui. Então, a posição x é 208 -208, vamos reinicializar o t Vamos para o conjunto de movimentos dois, agora vamos testá-lo. Ei, aí está a porta que passa, e então começamos aqui, o que é correto. Não podemos voltar atrás, é claro, e não precisamos. E aqui, esses são os mesmos obstáculos que estão aqui e na mesma plataforma. Precisamos mudar isso, é claro, para torná-lo um quebra-cabeça diferente aqui. Mas, por enquanto, isso funcionou. Então, temos dois quartos agora. O primeiro tem esse quebra-cabeça muito fácil. O gato só precisa pegar a estrela e depois sair da sala pela porta. É isso mesmo. E a segunda sala pode ser mais difícil de resolver. Talvez isso dependa de você. O que você faz aqui. Acho que você tem a capacidade resolver quebra-cabeças mais difíceis aqui Então, já sabemos como lidar com colisões com sprites e, dessa forma, você pode fazer muita coisa Talvez aqui você tenha que coletar duas estrelas antes que a porta apareça para sair da sala, ou talvez você precise pular em um interruptor ou algo parecido para revelar a próxima porta, algo assim. Mas acho que temos uma plataforma agradável, simples, mas agradável, que você pode estender. E isso é algo sobre o qual você pode desenvolver e criar seus próprios jogos com ele. Claro, isso não é perfeito. Então, por exemplo, a animação do gato não é muito boa. E não tem uma animação aqui se você estiver andando ou correndo, então está apenas mudando de direção, mas nada mais. Então, é claro, isso é algo que você pode adicionar aqui. Não temos uma animação real com animação quadro a quadro. Estamos apenas mudando de um quadro para outro. Então, uma fantasia para a fantasia de pular. É isso mesmo. Mas você já viu como fazer isso com o jogo Avis Adventure, então você pode fazer o mesmo aqui. E como estamos usando essa caixa de sucesso aqui, lembre-se mudar para essa caixa de sucesso e fazer o teste de acerto, não há problema com as roupas de animação. Essa caixa de sucesso sempre será testada, e não importa qual roupa você tem aqui e qual animação você usa aqui. Ok, então é isso para este simples jogo de pular e correr, esta plataforma ou jogo, e espero que você se divirta estendendo-o e criando talvez mais níveis aqui, mais quebra-cabeças, e talvez você tenha alguns inimigos, e os inimigos estejam impedindo o gato de coletar todas as estrelas, ou talvez você também possa usar power-ups para fazer o gato usar uma força de salto maior, Tudo isso está ao seu alcance. Acho que você tem as ferramentas para fazer isso e espero que se divirta fazendo isso.