Aprenda a fazer jogos fazendo asteróides com o Godot | Michael Mcguire | Skillshare

Velocidade de reprodução


1.0x


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

Aprenda a fazer jogos fazendo asteróides com o Godot

teacher avatar Michael Mcguire, Author | Programmer

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.

      Introdução à Skillshare

      0:55

    • 2.

      O que são asteróides

      1:24

    • 3.

      Configuração do projeto

      1:13

    • 4.

      Criando o jogador

      9:49

    • 5.

      Como criar o projétil

      7:26

    • 6.

      Como criar os asteróides

      2:49

    • 7.

      Geração de asteroides

      6:09

    • 8.

      Destruição de asteroides

      11:24

    • 9.

      Temporizador de Spawn e vazamentos de memória

      7:14

    • 10.

      Atualizar pontuação

      9:11

    • 11.

      Atualize vidas

      16:26

    • 12.

      Reprise do jogo e reinício

      7:19

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

33

Estudantes

--

Sobre este curso

Reviva a história de arcade enquanto desenvolve habilidades de desenvolvimento de jogos reais, um asteróide de cada vez.

Neste curso prático, você vai recriar o icônico jogo de arcade de 1979, Asteroids, usando o Godot Engine moderno e fácil para iniciantes. Quer você esteja apenas começando ou procurando aprimorar suas habilidades, este curso baseado em projetos vai lhe guiar passo a passo através da criação, programação e aprimoramento de um jogo de atirador espacial completo em estilo retrô — sem necessidade de experiência anterior.

Ao final deste curso, você terá:

Conheça seu professor

Teacher Profile Image

Michael Mcguire

Author | Programmer

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. Introdução à Skillshare: Certo, ao longo deste curso, vamos seguir em frente e vamos aprender a facilitar criando um jogo clássico de 1979, asteróides Agora, com asteróides, você tem essa pequena nave aqui que pode disparar pequenos projéteis e voar pela tela E o que acontece é que você atira nesses asteróides que estão flutuando ao redor e que aparecem aleatoriamente. Os grandes geram os médios, você destrói os médios, eles geram os menores, os menores se movem mais rápido do que os maiores E cada um que você destrói ganha alguns pontos em relação à sua pontuação total. Tudo bem. Este é um jogo simples, mas importante tanto para a história dos jogos quanto um pequeno projeto para iniciantes, onde você pode refazer um jogo real com o qual você pode se divertir e sempre adicionar e criar o seu Tudo bem, vamos começar. 2. O que são asteróides: Tudo bem Hoje vamos continuar criando o clássico jogo asteroids, como você pode ver aqui na tela neste vídeo do YouTube O que podemos ver disso é que os asteróides, além de serem um jogo muito antigo e clássico Deve ser bem simples para nós, mas mais um passo à frente, porque agora temos a movimentação dos jogadores em andamento, como você pode ver com nosso pequeno jogador aqui no meio. Ele está girando, ele está se movendo, ele está atirando. Temos esses asteróides flutuando, e toda vez que são baleados, eles se quebram em pedaços extras E podemos ver que temos essa pequena mancha alienígena que aparece de vez em E quanto à interface do usuário, temos pontos e saúde aqui no topo. E, efetivamente, esse jogo continua até você, bem, eu não diria até você também. Isso continua até que você perca todas as suas vidas. E qualquer que seja a pontuação que você tenha, essa é a sua pontuação mais alta. E como você pode ver lá, o asteróide saiu da tela e depois apareceu de volta do outro lado e continuou indo na mesma direção em que estava se movendo Mas, em resumo, são asteróides. É isso que vamos criar aqui. Então, na próxima seção, prosseguiremos e começaremos a montar um projeto, que não deve ser demais para nós 3. Configuração do projeto: Vamos seguir em frente e montar nosso projeto. Nós podemos descer. Se você estiver criando isso separadamente em seu próprio projeto, é claro, vá em frente e crie um novo projeto, chame-o de asteróides Se você estiver criando dentro de um projeto existente, basta entrar no seu sistema de arquivos, clicar com o botão direito, criar uma nova, criar uma pasta e chamá-la de asteróides, e podemos seguir em frente e fazer uma cena de Toti Vou renomear o meu para dizer Main. Vamos adicionar uma camada de tela para nosso Guy, que eu, é claro, renomearei para Guy E o que precisaremos é uma etiqueta para o canto superior direito aqui, e essa será nossa representação da nossa pontuação. Vou renomear isso para dizer rótulo de pontuação. Tudo bem. E eu vou salvar isso na minha pasta de asteróides e salvar E, na verdade, isso é tudo o que realmente precisamos para montar nosso projeto. A maior parte do trabalho será dentro do jogador e dos asteróides. 4. Criando o jogador: Então, vamos criar nosso jogador e configurar o movimento. Então você vai entrar na parte superior, clicar em uma nova guia para criar uma nova cena e clicar em outro nó. Procure um corpo de personagem em dois D e selecione-o. Agora, eu já tenho essa configuração aqui. Isso é apenas o corpo de um personagem 2 D. Vou renomeá-lo como jogador, apertar Control S e salvá-lo dentro da minha pasta de asteróides Agora, a partir daqui, como eu não tenho nenhum sprite para te dar por isso, o que vamos fazer é criar nosso sprite de jogador já que é muito simples para nós, e vamos criá-lo com uma linha dois D, já que é basicamente apenas um triângulo com um pequeno entalhe retirado dele um pequeno entalhe retirado Tudo bem. Então, números que vou usar para isso. Agora, se você quiser acessar a Internet e dar uma olhada, tenho certeza de que encontrará os sprites, se quiser fazer isso dessa maneira Eu vou para a Linha dois D e propriedades. Vou marcar a opção Fechar, ligar isso. E vou abrir os pontos clicando na matriz do vetor dois compactados. E vou adicionar até que tenhamos um tamanho de cinco. Meu primeiro ponto será em dez e zero. Meu segundo ponto será em menos cinco e menos seis. índice dois será zero no O índice dois será zero no X, menos dois para o Y. O três será zero no X e dois positivos no Y. E nosso quarto índice aqui será menos cinco no X e seis no Y. Agora, isso não se parece com o sprite que Isso porque a largura é muito grande. Agora, como estou usando o tamanho padrão que estou usando, novamente, vou abri-lo e mostrar aqui. Ah, onde está isso? Janela de exibição de 335 por 255. Agora, se você quiser usar um tamanho autêntico para isso, acredito que 640 por 800 é o tamanho autêntico para isso Nesse caso, você conseguirá tornar seu navio um pouco maior, certo? Então, por exemplo, você poderia puxar o XL talvez para 20 em vez de dez E, novamente, você pode simplesmente aumentar a solidez do. Então, em vez de menos cinco, você pode fazer menos dez. Assim, você pode brincar com eles e lidar com uma linha mais ampla. Mas como estou usando essa tela menor, vou mudar a largura da minha linha para uma, e podemos ver isso aqui. Agora, você pode se perguntar, que tal dois? Bem, poderíamos fazer dois, mas teremos um espaço vazio menor no meio. E talvez seja algo que você goste. Vá em frente e jogue isso. Nós realmente não podemos ver isso aqui no momento. Vou prosseguir e simplesmente arrastá-lo para visualização e reproduzi-lo e você poderá vê-lo lá, como fica na tela. Então você pode gostar desse jeito. Mas vou seguir em frente e mudar minha largura para uma. Eu prefiro mais assim. um pouco mais autêntico para mim, mas isso depende de você. E, novamente, você sempre pode mudar esses pontos. Se você quiser aumentá-lo , pode ter uma largura de linha maior , pode ter uma largura ou pode sempre acessar a Internet e pesquisar no Google, e tenho certeza de que encontrará os sprites em algum lugar para Tudo bem. Agora você pode notar que estamos recebendo um pequeno aviso aqui, porque precisamos de uma forma de colisão para nós mesmos que ela está solicitando Então, podemos seguir em frente e fazer uma forma de colisão. Podemos entrar, podemos escolher uma forma. Nós podemos fazer um círculo. Nós podemos fazer um retângulo. fazer uma das formas poligonais. Realmente, isso não importa muito. E se você quiser ser ainda mais exato, que provavelmente seria um pouco menos autêntico é um polígono de colisão E então é a mesma configuração aqui em que você pode simplesmente definir os pontos. Então você simplesmente os configuraria da mesma forma que fez com os jogadores, por exemplo, dez, aqui, menos cinco, menos seis, e você pode ver que começa a se alinhar. Com nossa configuração. Então, eu só preciso adicionar mais alguns aqui. E seria zero, menos dois, e um é zero mais dois, depois menos cinco e seis. E então teríamos nossa forma pronta para nós. Tudo bem, então se você quiser seguir esse caminho, você pode, e você sempre pode entrar e jogar com seus pontos aqui Não é possível criar, mas se você quiser clicar, clique em Editar pontos e, em seguida basta clicar nele e arrastá-lo. Então, se você quiser editá-lo dessa forma. Além disso, se você não quiser digitar os pontos, clique no botão de adição ou no botão Adicionar pontos aqui na parte superior. E você pode simplesmente entrar e criar pontos como esses. Então, você tem opções. Acabei de entrar no inspetor porque acho que é mais fácil porque você pode simplesmente traduzir seus pontos diretamente E, novamente, se você quiser seguir esse caminho, certamente pode. É um pouco mais, um pouco mais exato. No entanto, menos vou arrastar para baixo, um pouco menos provavelmente menos preciso do que é real no grande esquema. Tudo bem Então, de qualquer forma que você queira fazer isso, cabe a você decidir se deseja usar um polígono ou uma Vamos ver o movimento real do nosso jogador. Então, vamos em frente. Clique no player, clique em AdScript, adicione-o e certifique-se de adicioná-lo à nossa pasta de asteróides E vamos criar um processo de física. E vamos ter algumas variáveis para nós aqui. Teremos uma variável de velocidade para a velocidade com que estamos nos movendo. Teremos uma velocidade de rotação para a velocidade com que giramos e, em seguida, nossa direção de rotação E antes de entrarmos na próxima peça, certifique-se de acessar as configurações do projeto, inserir o mapa e configurar seus controles. Eu só vou usar o que usei no ano passado. Vou usar o up-down para a esquerda e para a direita, pois já tenho essa configuração para o WASD. Esses são os que eu vou usar. Tudo bem, então vamos em frente e vamos dizer que direção de rotação é igual ao eixo G do ponto de entrada Agora, temos que colocar a ação negativa e depois a ação positiva. Eles estarão na forma dos nomes das strings. Então, isso vai ficar. E então à direita. Porque a esquerda nos dará nossa direção negativa e a direita, ela nos dará nossa direção positiva para rotação. E então vamos alterar a velocidade para ser igual a transformar ponto X vezes, então exatamente o que acabamos de fazer aqui, ponto de entrada, eixo e a mesma coisa Vamos colocar nossos pontos negativos e positivos, então vai cair, seguido por subir. E então multiplicaremos isso pela nossa velocidade. Agora, estamos quase prontos aqui. Precisamos fazer rotação. Plus é igual à direção de rotação velocidade de rotação vezes Delta. Tudo bem E neste momento, você deve estar acostumado com a ideia. Temos que usar a colisão móvel ou a lâmina móvel. Vou usar mover e deslizar neste caso. E se prosseguirmos e executarmos isso, agora poderemos mover nosso jogador. Então, se eu segurar W, ele vai avançar. Se eu segurar S, ele vai voltar para trás. Se eu segurar A, ele vai girar para a esquerda. Eu seguro D, ele vai girar para a direita e agora temos algo muito parecido, muito mais parecido com o que vimos dentro dos asteróides Agora, você pode ir em frente e ajustar esses números. Assim, você pode ajustar a velocidade se quiser que sua nave se mova mais rápido ou mais devagar do que Estou usando 100 por padrão. A velocidade de rotação está usando 1,5. Você pode aumentá-lo para girar mais rápido ou diminuí-lo para girar Isso vai depender totalmente de você. Mas, independentemente do que você escolha fazer, essa é apenas uma das pequenas coisas que você decidirá para tornar seu jogo um pouco mais personalizado para você. Certo? E para um jogador, isso é realmente tudo o que precisamos para nos preparar até começarmos a atirar. Tudo bem. Então, nos vemos na próxima parte. 5. Criando o projétil: Tudo bem, então vamos criar nosso projétil para nosso jogador Então, na minha cena de jogador aqui, adicionei um marcador dois D, e isso é só para que tenhamos um local específico em que vamos gerar nosso projétil que estará um pouco à frente de nossa nave E a única coisa que o Marker two D faz é nos dar uma posição em algum lugar do mundo Esse é todo o seu propósito. Tudo bem, então você pode ir em frente, criar uma nova cena, atingir outro nó e selecionar a área dois D. E clicar em Criar, esse será o nosso projétil E aqui, eu criei uma forma de colisão, que é apenas um retângulo e um sprite dois D. Para a textura, eu fui em frente e, do menu suspenso, uso a nova textura gradiente dois D. E quando você fizer isso, você abrirá a Você verá essa grande seção. Você encontrará um gradiente no inspetor, abra-o e terá dois pontos como este Um ponto será preto por padrão. Então, vai ficar mais ou menos assim. Basta clicar com o botão direito do mouse no ponto preto para se livrar dele, e agora está tudo branco. Certo. Então isso é tudo que você precisa fazer, e então você terá um projétil. Eu vou configurar. Vá em frente e salve essa cena como sua para que possamos usá-la. E vá em frente e dê à área dois D. Eu chamei meu projétil de script E aqui vamos ter duas funções e uma variável. Tudo bem A primeira variável que vamos ter aqui é que vamos criar uma velocidade para isso É um vetor dois e, claro, será definido como vetor 20 por padrão. Vamos criar uma função para isso chamada velocidade definida Vai ter um argumento de um vetor dois. Não retorna nada, então evite. E tudo o que vamos fazer é definir a velocidade igual a V, certo? O argumento que apresentamos. E por último, precisamos que o movimento real aconteça com nosso projétil Então, em nosso processo de física, vamos seguir em frente e fazer a posição mais igual à nossa velocidade E nosso projétil em si está pronto. Agora temos que ir até o jogador. E se você ainda não tem uma configuração de mapeamento de entrada, acesse nosso mapa de entrada de configurações do projeto e crie um botão para você fotografar. Eu mesmo, eu tenho minha barra de espaço configurada. E antes de continuarmos, a primeira coisa que vou fazer é criar uma nova variável chamada projétil Então, será uma cena lotada que podemos trazer. E dessa forma, podemos carregá-lo quando precisarmos ou criar uma instância dele quando precisarmos, devo dizer. E isso será igual a carregar e apenas encontrar a cena e arrastá-la para dentro. Lá vamos nós. Então, vamos carregar essa cena. Ela será carregada como uma cena de pacote e armazenada na variável chamada projétil Tudo bem Então, vamos criar a função de entrada. Para o nosso jogador. Isso é apenas uma entrada de sublinhado de funk. Isso tem um argumento chamado evento. É um tipo de evento de entrada. Não retorna nada tão vazio. E vamos verificar se a entrada é ação, basta pressionar, para que não possamos segurar o botão agora. Temos que pressioná-lo sempre que quisermos. E a ação que estamos procurando é filmar. Então, sempre que apertarmos o botão de atirar, o que vamos fazer? Bem, vamos criar uma instância do nosso projétil Então PI para instância de projétil, é uma área dois D. Isso é igual à instância de ponto de projétil Agora precisamos usar esse marcador dois D para nós aqui. Portanto, a posição global PI é igual ao símbolo de dólar Marcador dois D. Então, estamos apenas obtendo aquele marcador dois D não que adicionamos à nossa posição global de pontos de jogador Então, estamos configurando isso. E se dermos uma olhada nisso do jeito que está, se dermos uma volta e atirarmos. Agora, podemos não ser realmente capazes de ver isso, mas se nos virarmos e nos afastarmos, bem, podemos ver que não estamos realmente recebendo nada. Por que isso? Porque ainda não o adicionamos à cena. No entanto, ele existe, e vamos verificar isso em apenas um segundo. O que vou fazer é definir a rotação. Eu defino a rotação agora com base em nossa nave. Portanto, a rotação do ponto PI é igual à rotação. E vou usar a API Get parent Ad child. Então, estou usando Get parent. Dessa forma, o projétil não gruda em nós porque se usarmos o AdCild, ele grudará em nós, e se continuarmos girando nossa nave , ela continuará girando Isso seria útil para algo como um feixe de laser, mas não para um projétil Então, estamos usando get parent para que possamos aplicá-lo ao jogo e não ao próprio jogador. Certo? Então, se entrarmos e atirarmos, você pode ver que agora ela está gerada no jogo, mas não está se movendo para lugar nenhum E isso acontecerá toda vez que apertarmos nosso botão de atirar. Então, se você fez isso acontecer, então parabéns. Seu projétil está funcionando. Só precisamos fazer com que ele realmente esteja se movendo para nós agora. Tudo bem Então, verifique se está ou para movê-lo, vamos fazer uma rápida verificação I aqui. Vamos dizer que I PI tem métodos de velocidade definida, e podemos assumir isso com segurança Mas vamos garantir que ele tenha essa função apenas por segurança. E vamos salvar nossa direção. Mas estamos criando uma nova direção aqui. É igual ao vetor dois pontos à direita, ponto girado e passado na rotação Então, isso nos dará a direção certa, que seria no X positivo com base em quanto ele girou de forma eficaz, certo? Dessa forma, sempre temos uma direção específica em que ele está se movendo. Opa. Opa, grita, grita. Lá vamos nós. Vamos dar a ele uma velocidade de var igual a 200. Você sempre pode ajustar isso mais tarde, se quiser. E agora temos que chamar essa função que verificamos aqui. Então, pi dot define a velocidade, a direção vezes a velocidade. E com isso, nosso projétil agora se move em qualquer direção em que estamos atirando Simplesmente assim? Mesmo que paremos de nos mover completamente. Ótimo. Agora temos nosso projétil trabalhando com nossa nave. Agora só precisamos de alguns asteróides para atirar e alguns pontos para coletar Tudo bem. Te vejo na próxima. 6. Como criar os asteróides: Então, vamos criar nossos três asteróides. Vamos criar um grande, um médio e um pequeno. Todos eles serão criados da mesma maneira. A única diferença será o tamanho da forma da colisão e os números reais dos pontos, porque, obviamente, eles começarão grandes e ficarão cada vez menores Agora, tudo isso é criado por meio de um corpo de personagem dois D, uma linha dois D e uma forma de colisão Então eu vou te dar os pontos para a linha dois D. Então vá em frente e faça uma pausa e quando você tiver essa configuração, então podemos avançar Vou começar agora lendo os pontos da linha dois D no grande asteróide, lembre-se de salvar suas cenas Fechado, devemos começar. E a largura que estou usando nesses é dois. Todos eles têm oito pontos. E eles vão começar com o grande asteróide aqui, 40, zero, 30, menos 25, dez menos 35, menos 15, menos 30, menos 35, menos dez, menos 30, 20, menos dez, 35, 25 e 30 Passando para a mastoide da mídia. Novamente, tenho oito pontos na lista, 25, zero, 20, menos 15, cinco menos 22, menos dez, menos 18, menos 20, menos cinco, menos 18, 12, menos cinco, 22, 15, 18. Passando para os pontos do pequeno asteróide, 15, zero, 12, menos oito, três, menos 13, menos sete, menos dez, menos 13, menos dois, menos 12, sete, menos três, 13 e 1010 Esses são os pontos que estamos usando para tudo isso. E depois de configurar todas as três, certifique-se de salvar as três cenas e você terá seus asteróides configurados e prontos para uso E a única coisa que lhes faltará é a rotação. Obviamente, eles precisam ser gerados e gerados no e gerados asteróide menor quando Portanto, os grandes gerarão os médios e os médios gerarão os pequenos 7. Geração de asteróides: Então, vamos seguir em frente e permitir que nossos asteróides apareçam fora da tela e apareçam Eles poderão ter velocidades diferentes e usaremos o mesmo script em todos os três tamanhos. Então vá em frente e crie um script, e você pode anexá-lo a todos os seus três asteróides, os grandes, médios e pequenos, e abrir esse script E a primeira coisa que vamos fazer é criar uma velocidade de rotação e eu vou criar uma velocidade X quatro. Vou em frente e guardarei isso agora. Então, se eu clicar no meu pequeno asteróide, você verá que temos velocidade aqui no inspetor, vou deixar isso em 100 para Para médio, vou diminuir para 50, e para grande, vou fazer 20. Agora, você sempre pode voltar e ajustar esses números mais tarde, certo? Isso sempre é possível. Vou seguir em frente e definir isso por enquanto. Agora, dentro de nossa função pronta, para aparecer fora da tela, o que vamos fazer é obter tamanho da tela em Get vPortrc dot E vamos obter uma variável de crédito para spawn edge. Todo mundo é Randy por cento quatro, então isso nos dará zero, um, dois ou três E com base nisso, vamos determinar se vamos atribuir cada número ou associar cada número à parte superior, inferior, esquerda e direita. Então, vamos usar algo chamado declaração de correspondência. E tudo que você faz é digitar a partida. O que você deseja combinar, nesse caso, seria spawn edge Desça o cólon e diremos zero porque essa é uma opção Coloque dois pontos e você terá um bloco de texto. Em seguida, você pode combiná-lo com um e um bloco de texto, dois e um bloco de texto e assim por diante. É assim que a declaração de combinações funciona. Então, estamos basicamente dizendo: Ok, vamos combinar isso. Então, se isso corresponder a isso, faça isso, corresponda a isso, nós fazemos esse bloco, se corresponder a isso, fazemos esse bloco e assim por diante. Então, o que vamos fazer com isso, vou copiar isso, é claro. Mas vamos fazer tudo isso, vamos usar Spawn Edge Se for zero, vamos considerar que sua posição é igual a um vetor dois, e esse vetor dois é um intervalo flutuante aleatório, então rand F no intervalo quadrado entre zero e o ponto X do tamanho da tela, e então o Y é menos 50 Então, como é negativo, você pode assumir aqui que a posição aqui, que a partida de zero será exibida ou na tela superior. Então, se estamos surgindo acima da tela, é aqui que vamos colocar nosso E então nossa velocidade será o vetor 20 no X, e então nosso Y será nossa velocidade, certo? Então, sendo esse um número positivo, isso significa que vamos descer e continuar esse padrão até o fim. Então, se for um, a posição será um vetor dois do tamanho da tela ponto X mais 50. Isso significa que estamos surgindo no lado direito da tela aqui, no intervalo de sublinhado Rand F, e isso nos dará entre zero e o ponto Y do tamanho da tela. Então, estamos gerando no lado direito qualquer ponto vertical, desde que estejamos no Então nossa velocidade será um vetor dois. Tem um zero no Y e uma velocidade negativa no X, então está se movendo para a esquerda. Tudo bem E se combinarmos com dois, basicamente faremos a mesma coisa que fizemos com zero aqui. Então, nossa posição é um vetor dois, rand F no intervalo quadrado, zero, tamanho de tela X. Então, estamos no lado esquerdo agora Tamanho de tela Y mais 50. Já que o estamos adicionando, estamos surgindo na parte inferior, direita e inferior da nossa tela vetor dois X é zero para nossa velocidade, e é velocidade negativa, o que significa que nosso asteróide vai subir E por último, mas não menos importante, temos uma partida para três. O vetor dois será menos 50 porque menos 50 porque já estará fora da tela do jeito que está, então está desligado para a esquerda. Faixa F aleatória de zero e, claro, o ponto Y do tamanho da tela, em qualquer lugar no lado esquerdo, e a velocidade será positiva quando ela se mover para a direita e zero para o Y. Tudo bem. Então, se você tem isso, na verdade precisamos fazer mais uma coisa porque não podemos nos mover, e você deve ter notado que temos que entrar em nosso processo físico, e precisamos chamar mover e deslizar. E também vou adicionar rotação mais igual à nossa velocidade de rotação vezes Se testarmos isso, você está no meu pequeno asteróide. Bem, lá vamos nós. Nós vimos isso na parte superior. Vou executá-lo novamente. Não, eu vim do lado direito dessa vez. Vou tentar de novo. Eu vim do lado direito novamente. Assim, podemos ver que é sempre completamente aleatório, veio de baixo e está funcionando consistentemente. E se passarmos para, digamos, meu grande asteróide, onde atingi a velocidade 20, e eu o testo, novamente, ele está girando Está vindo de uma direção aleatória e está se movendo mais devagar porque ajustamos a velocidade Tudo bem, então com isso, agora está funcionando perfeitamente bem para nós Nossos asteróides podem aparecer e girar, e todos eles têm Agora temos que chegar à seção de tiro e destruição para que eles possam gerar pedaços menores deles 8. Destruição de asteróides: Vamos em frente e vamos configurar nosso projétil para poder destruir nossos asteróides para que ele possa gerar um menor Portanto, os grandes gerarão médios, os médios gerarão Então, a primeira coisa que precisamos fazer é ir até a cena do projétil, selecionar nosso projétil, a área dois D, procurar a seção de colisão sob o objeto de colisão dois D e definir a Então, a camada é a camada em que o objeto está, e a máscara é basicamente a camada com a qual ele pode interagir. Então, vamos definir a máscara para dois e, em seguida, vamos para cada um dos nossos asteróides E selecione-o e defina nossa camada no asteróide para duas e nossa máscara para uma Dessa forma, com a máscara sendo uma no asteróide, ela pode interagir com nosso projétil e com ela na camada dois E a máscara dois não está selecionada. Os asteróides não devem interagir uns com os outros, então eles devem passar um pelo outro e não bater uns nos outros. Tudo bem. E você pode fazer a mesma coisa no asteróide médio e no pequeno. Tudo bem. Na minha cena principal, acabei de colocar meu player nela e coloquei dois asteróides médios para que possamos usar como teste aqui E se fôssemos jogar, nós asteróides estamos surgindo, eles vêm de Nesse caso, os dois vieram da direita. E lá tínhamos um da direita, outro da parte inferior. Ah, e você pode ver que nós meio que não esbarramos lá, o que é bom, porque quando isso acontecer mais tarde, isso vai acabar matando nosso jogador Portanto, não importa que possamos interagir com ele agora. Tudo bem, então como podemos fazer nossos asteróides funcionarem? Bem, primeiro, vamos ao nosso projétil. Vamos dar uma olhada na guia do nó nos sinais. E vamos selecionar o corpo inserido. E o que isso vai fazer é conectar o sinal, basta clicar duas vezes nele e conectar ao projétil Isso vai explodir sempre que um corpo físico tocar nosso asteróide, porque é um corpo de personagem que dois D entram em nossa Então, o corpo representará tudo o que entrou nessa área. Então, o que podemos fazer facilmente é dizer, eu sou um asteróide. Nossa, eu realmente estraguei essa. Nome do asteróide e do ponto corporal. Porque lembre-se, os meus são todos asteróides grandes , asteróides médios e pequenos Então, se o asteróide está no nome do ponto corporal, então devemos estar atingindo o Eu vou fazer body dot D asteroid, que é a função personalizada vamos criar aqui em breve E então eu vou fazer self.q3. Dessa forma, meu projétil pode se destruir. Tudo bem. Agora, se fôssemos executá-lo agora , é claro, isso não funcionaria. Vamos cometer um erro e alguém como, Ei, destruir não existe. Estrondo. Lá vamos nós. Ah, e eu ainda não retirei isso. Então eu acho que isso é uma coisa boa. Então, o que vou fazer é usar o script de asteróides e criar uma variável aqui chamada New spawn Isso vai ser um touro, o que é verdadeiro ou falso. E, por padrão, vou definir isso como verdadeiro. Vou até a declaração de partida que tínhamos e, logo acima dela, vou dizer I, new spawn, e depois vou pegar toda a declaração de partida Então, da linha 13 à 25, destaque todas elas e pressione a tecla tab para movê-las para dentro. E fora dessa declaração, eu vou dizer sim. E o que vou fazer é, na verdade , selecionar essa declaração de correspondência e colá-la dentro do meu conjunto. Mas o que vou fazer é excluir as mudanças de posição. Então, tudo o que estou modificando nessas partidas é a velocidade porque não queremos mudar a posição Só queremos que ele tenha uma direção aleatória. Tudo bem. Agora, para aquela função de destruição. Agora, para essa função de destruição, o que vamos fazer é, neste caso, eu ter uma variável chamada ST, e eu estou carregando, neste caso, meu pequeno asteróide porque estamos testando com o médio agora E eu quero gerar dois deles, então estou executando quatro voltas. Então, quatro eu na faixa de dois, certo? Então, vamos passar por isso duas vezes. Tudo bem. Então, entrando nesse loop dianteiro, vamos criar uma instância do nosso pequeno asteróide Vamos definir a posição global de nosso asteróide instanciado para qualquer que seja a posição global atual de nossos asteróides Vamos definir o novo spawn como falso. Dessa forma, não usamos nossa declaração de partida para mudar a posição. Só nos deparamos com ele para definir a velocidade. E chamamos GParentTad Child para adicioná-lo à cena. E uma vez que passemos por isso duas vezes , nosso grande asteróide vai pisar por si mesmo. Agora, se executarmos isso e fizermos um teste, boom, podemos ver que funciona perfeitamente bem aqui. E se você está curioso sobre todos aqueles erros vermelhos no depurador, está apenas nos dizendo que devemos usar call adied aqui durante nossa entrada no corpo para o que chamamos de body para o que chamamos Então, em vez de body dot destroy, o que fazemos é fazer body call adiado e passar Destroy como uma tela E agora, se você executar isso, verá todos esses depuradores simplesmente desaparecerem Tudo bem. Perfeito. Agora nós o temos destruindo e desovando. Os médios, desculpe, os médios estão destruindo e gerando esses Então, agora precisamos de uma maneira de nosso asteróide saber o que ele deveria estar gerando ou qual versão ele deveria estar surgindo Portanto, se for médio, deve aparecer pequeno e, se for pequeno, deve simplesmente se destruir Se for grande, deve ser gerado até médio. Então, como podemos fazer isso? Bem, suba até o topo. Vamos criar uma nova variável para nós mesmos. Bem, para começar, criaremos um enum chamado olhos, terá um tamanho grande médio pequeno Teremos uma exportação, então podemos mudar isso. Então, exportação do nosso tamanho. E o tipo aqui será o tamanho do nosso Enum, então todos os tamanhos da tampa E podemos simplesmente deixar isso em branco. Se entrarmos em algum de nossos asteróides e entrarmos no inspetor, devemos vê-lo Portanto, certifique-se de que grande esteja definido como grande. Médio está definido como médio e o pequeno está definido como pequeno. Se eu verificar minha cena principal, elas devem ser configuradas automaticamente, mas não estão, então vou excluí-las e trazer também uma cena média. Provavelmente porque eu simplesmente não os salvei. Ah bem, não é um problema. De qualquer forma, vou trazer dois médios. Tudo bem? A partir do nosso roteiro de asteróides, agora podemos descer. E dentro de nossa destruição, podemos ir em frente e fazer uma partida, certo? Então, podemos dizer que o tamanho corresponde. Vai ser um tamanho grande. Aí está. Teremos um ponto de tamanho médio e, claro, um ponto de tamanho pequeno. Então é isso que vamos fazer em tudo isso. Agora, é claro, podemos basicamente copiar tudo o que temos aqui, recortar e basicamente colar isso dentro do nosso meio. Porque esse é todo o nosso código para isso. Sim. Então, se fôssemos testar isso com nosso asteróide médio aqui, deveria funcionar exatamente da mesma forma Fantástico. No entanto, criamos apenas dois deles Desculpe, um, o que é interessante aqui. Não, lá vamos nós. Há dois. E vou testá-lo novamente. Há dois e dois. Ok, então está funcionando, certo? Então, isso está funcionando perfeitamente. Agora, o que vou fazer é copiar isso e colar dentro do meu arquivo grande. Obviamente, em vez de carregar a cena do pequeno asteróide, vou arrastar minha cena de asteróide médio Então, agora, se destruirmos um grande, ele deve gerar um meio, e nós destruímos o médio Deve gerar um pequeno. Então, vamos dar uma olhada. Vou deletar os dois da minha cena e arrastar um grande asteróide E vamos testá-lo. Há um grande medio, ele saiu quando teve que vir até nós Tudo bem. Chegou a hora, guarde o grande. Pegamos um meio, armazenamos o meio, temos um pequeno. Tudo bem, então está funcionando perfeitamente bem. Incrível. Agora, para os pequenos, sim, não precisamos realmente fazer nada, mas simplesmente ignorá-los , porque eles só precisam se destruir. No final das contas, não precisamos gerar mais nada. Mas, por enquanto, podemos deixar assim porque usaremos isso para atualizar nossos pontos posteriormente. Portanto, ainda precisamos ter nossa pequena seção aqui. Então, agora temos nossos asteróides que não só aparecem em direções diferentes, mas também podemos destruí-los, mas também podemos destruí-los, e eles geram coxas menores nas próximas Agora seria um bom momento para testá-lo e decidir se você quer talvez alterar um pouco os números de velocidade , porque talvez eles se movam um pouco rápido demais para o seu gosto Lá vamos nós. Temos nosso conjunto de destruição de asteróides 9. Temporizador de spawn e vazamentos de memória: Vamos configurar a desova completa porque agora que a destruição está funcionando, temos nossos asteróides surgindo corretamente fora Então, vamos fazer com que ele apareça continuamente para nós Então, o que eu vou fazer é ir à minha cena principal aqui. Vou fazer mais ou adicionar um nó. Vou adicionar um cronômetro. Eu quero chamar isso de temporizador de spawn. OK. E esse criador terá um tempo de espera de mim, claro. Vamos fazer 2 segundos. Talvez a gente mude isso. Sempre podemos ajustá-lo novamente mais tarde. Isso vai começar automaticamente. E eu vou continuar e adicionar um roteiro à minha nota principal aqui. E vou conectar um sinal, então vou clicar no meu cronômetro, ir até a guia do nó e clicar duas vezes no tempo limite Certifique-se de que Mina esteja selecionada, pressione Conectar. E quando ele se conectar, obteremos um número aleatório, assim como fizemos com nossos lados. Vamos criar uma variável chamada asteróide igual a Randy e por cento três, então vamos obter zero, um ou dois, e podemos combinar os asteróides 01 e dois e podemos combinar os asteróides 01 e asteróides E o que vamos fazer é clicar no meu script de asteróides aqui porque podemos realmente pegar um pedaço disso E vai ser esse conjunto longo que temos aqui. Com base nisso, ou vamos gerar o pequeno asteróide, grande ou médio Então, para zero, vou definir isso como meu grande. Aí está. Então, um vai ser meu meio, e três podem ser meu pequeno. Então, tudo o que vou fazer é adicionar Child e fazer ast dot instanciate E isso deve funcionar em todas essas linhas. Tudo bem. Então, basicamente, vamos escolher um número aleatório para gerar um asteróide aleatório e, em seguida , carregar nosso grande, médio ou pequeno e adicioná-lo à cena Tudo bem. Vamos dar uma olhada e ver se isso funciona a cada 2 segundos. Bum, bum. Bem, oh, vamos lá. Por que não pode ser destruído. Isso é curioso. Ok, então os pequenos parecem que temos um erro, alguns desses. O problema é que, se executássemos isso, e se clicássemos na guia remota, à direita, você pode ver todos os asteróides que estão chegando e damos uma olhada, e vemos que alguns deles estão apenas sendo atribuídos, como corpo do personagem dois D, por exemplo Portanto, nem sempre está funcionando porque, obviamente, eles não têm asteróide no nome se receberem um nome genérico como esse, como você pode ver Então, o que realmente precisamos fazer é entrar no nosso script. Vamos até o nosso projétil. Em vez de usar o nome do asteróide if e do ponto corporal. Vamos fazer I Body dot has method Destroy. Agora, se ele tem o método destruído, então vamos chamá-lo. E essa única mudança deve resolver isso completamente para nós. Tudo bem. Lá vamos nós. No momento não temos problemas com isso. Oh, detecção. Não, está indo. Está indo. Agora, você pode ver que estamos recebendo uma quantidade ilimitada de asteróides aqui, então estamos criando um pequeno vazamento de memória Então, precisamos limpar isso também. Então, em nossas cenas de asteróides, vamos passar para todas as três e adicionar um Notificador visível na tela dois dentes Vamos até lá e teremos o sinal TreeNeited E podemos conectar isso ao nosso script de asteróides, clique em Conectar E tudo o que vamos fazer para fazer isso é libertar o Self Cute e salvá-lo para que possamos voltar para o Medium novamente. A tela saiu, conecte-a. Eu deveria ter o mesmo nome por padrão, então devemos ter uma função cobrindo todas as três e pequena no nó, tela encerrada, conexão Então, o que isso vai fazer é basicamente dizer quando o asteróide sair tela e depois destruir. Tudo bem. Agora, se dermos uma olhada nisso, clicarei no controle remoto, para que possamos ver. Quem realmente vai até a cena principal para jogar e clicar no controle remoto. Você pode dar uma olhada. E podemos ver que quando eles saem da tela, eles são destruídos automaticamente , então não estamos criando esse vazamento infinito de memória para nós mesmos Tudo bem, então você pode ver que o jogo está limpando sozinho, muito bem. Tudo bem, fantástico. Agora, o que estamos vendo aqui é que temos um problema semelhante, certo? Vemos todas essas áreas em dois Ds. Esses são nossos projéteis. Então, provavelmente devemos limpá-los também. Então, podemos fazer algo semelhante, certo? Podemos ir até nosso projétil, adicionar um Notificador dois D visível na tela, sair da tela, conectar-se ao nosso script de projéteis e simplesmente ligar para o Qqare e Então, se não atirarmos nada e errarmos quando nosso projétil sair da tela, ele deve se limpar sozinho Vamos até o controle remoto, dê uma olhada. E devemos ver todos esses projéteis se apagarem. Então, arrumamos tudo bem e limpamos. Tudo continua se apagando sozinho. Tudo bem. Fantástico. Tudo o que resta é que precisamos atualizar nossa pontuação dando a nós mesmos alguns pontos toda vez que destruímos um asteróide. Tudo bem. E, claro, então precisamos dar uma olhada na morte do nosso jogador, certo? Perder nossas vidas pelo jogador. Tudo bem. Então, podemos começar a lidar com isso na próxima vez. 10. Atualizar pontuação: Vamos continuar e atualizar nossa pontuação sempre que distorcermos nossos asteróides Agora, poderíamos usar coisas como ter pais e filhos e, em seguida, chamar métodos para isso, mas a melhor maneira de fazer isso é realmente usar sinais, certo? Então, essas coisas aqui que temos ao lado, só vamos criar nosso próprio sinal personalizado e enviá-lo ao Guy para pedir que ele atualize a pontuação para nós, e diremos quantos pontos. Agora, primeiro, certifique-se de que seu cara tenha um script nele. A minha está completamente vazia. E então podemos acessar nosso script de asteróides e criar uma nova variável exportada porque precisamos de uma nova. Cada asteróide tem uma quantidade diferente de pontos e, coincidentemente, eles realmente se alinham com a velocidade que eu variável exportada porque precisamos Cada asteróide tem uma quantidade diferente de pontos e, coincidentemente, eles realmente se alinham com a velocidade que Então, se continuarmos, acredito que os asteróides grandes do jogo dão 20 pontos, os médios dão 50 e os pequenos dão 100 Então, coincidentemente, são exatamente os mesmos números que eu dei para minha velocidade para todos eles E a próxima variável precisaremos aqui será, na verdade, um sinal. Então, digitamos a palavra sinal e, em seguida, o nome do sinal. Então eu vou dizer destruído. E vou usar parênteses abertos e fechados como uma função porque quero adicionar Vou chamar isso de PTS e convertê-lo como um int. Então, se agora olhássemos para nosso asteróide e déssemos uma olhada nos sinais, podemos ver nosso personalizado aqui chamado destruído, e ele tem um argumento chamado pontos site PTS, que é um número inteiro que é passado com Então, para nós, sempre que enviarmos esse sinal, enviaremos essa variável de pontos com ele. Então, primeiro, precisamos realmente conectar nosso sinal, então vou para minha cena principal aqui por um segundo e carregar meu script de asteróides Então, vamos fazer Destroyed porque esse é o nome do sinal. Certifique-se de obter aquele com o ícone de sinal aqui, aquele que parece um símbolo de Wi-Fi. Eu não conecto. Agora, isso exige um chamável, e tudo o que isso quer dizer é quem estamos nos conectando e qual função estamos chamando Portanto, podemos simplesmente dizer parênteses abertos e fechados que podem ser chamados. O primeiro argumento é o que queremos anexar. Portanto, este é nosso pai mas filho, e passar o Índice é zero ao obter um filho. Coma o nome da função que você deseja chamar. Então, para mim, vou chamá-lo de Update SCORE. E se você está confuso sobre como obtivemos Get parent e get child zero, se dermos uma olhada, temos um asteróide aqui como exemplo em nossa cena Se seguirmos essa linha, obteremos os pais. Isso nos leva até um galho. Então, um e mais alto que nos leva ao Maine. E queremos chegar até Guy do Main. Então, para isso, temos que ter um filho, e esse será o primeiro filho, certo? É a primeira filial lá em cima. Então, a partir do grande asteróide, fazemos com que os pais subam e depois fazemos com que a criança desça. Então, estamos nos conectando com o cara. E quando esse sinal for emitido, procuraremos uma função chamada Update score Tudo bem Agora, vou copiar essa linha inteira porque vamos fazer algo um pouco semelhante aqui quando chegarmos à nossa função de destruição. Só que em vez de conectar, vou ligar para desconectar Certo? Essa é a única coisa que eu mudaria é que estamos apenas adicionando mais três letras, certo? Portanto, desconecte em vez de conectar-se dentro de nossa função de destruição Dessa forma, podemos simplesmente limpar o sinal. Não deveríamos precisar, e você provavelmente ficará bem sem fazer isso, mas só para praticar um pouco melhor, vou jogar isso aí. Agora, quando ele é destruído, também precisamos emitir nosso sinal porque ainda não fizemos isso Então, antes de desconectarmos o sinal, vamos destruir, emitir e precisamos passar o argumento, que no nosso caso, é esperar que um número seja passado Então, vamos passar nossa variável de pontos. Tudo bem, vá em frente e guarde isso. Então, agora, se passarmos para a nossa GUI, na verdade, você sabe , primeiro, vamos jogar, e você verá que teremos um problema Certo? Bem, parece que nosso problema não vai realmente aparecer, o que é um pouco interessante, mas nada vai acontecer porque essa função não existe. Eustly, nenhuma função está sendo chamada aqui. Então, se entrarmos em nosso Guy e criarmos essa função, acredito que chamei uma pontuação de atualização como essa, e teremos uma discussão, certo? Pontos, então vou usar PTS, e isso é um número inteiro E podemos seguir em frente e podemos simplesmente imprimir o PTS que foi passado E se executarmos isso veremos todos os nossos pontos sendo impressos toda vez que destruirmos um. Lá vamos nós. Temos 100 pontos lá. 20, 50, 100, 50, certo, então parece que tudo está funcionando bem. Só precisamos realmente atualizá-lo visualmente. Mas agora que sabemos que isso está funcionando, precisamos acompanhar nossos pontos e atualizar o rótulo real. Então, vou criar uma variável aqui no nosso Guy. Essa será a nossa pontuação. Obviamente, isso será um número inteiro e começará do zero. Então, a primeira coisa que vamos fazer é marcar mais pontos iguais a PTS. É por isso que podemos somar os pontos à nossa pontuação. E então precisamos realmente atualizar o rótulo em si. Então, vamos em frente e podemos usar nosso cifrão aqui e obter nossa etiqueta de pontuação. Texto pontilhado. E podemos definir isso igual a uma sequência de nossa pontuação. Agora, isso vai parecer um pouco estranho. Se você der uma olhada no canto superior esquerdo em nossos pontos. Vamos lá, gire em torno de um pequeno hippie. E você vê que todos esses zeros desapareceram, e os números meio que mudam sozinhos, é claro, mas você vê que eles estão crescendo constantemente, certo? Então, quando chegarmos a 1.000, teremos outro aleatório, outro aleatório aqui. Devo pegar isso? Lá vamos nós. Então, aumentamos um número extra. E você pode gostar disso. Eu não, especialmente quando estou fazendo um jogo clássico como esse. Então, o que eu realmente vou fazer no final disso. Então, quando convertermos essa pontuação em uma string, vou fazer zeros com Dot pad e vou colocar um número lá Agora, se eu colocasse nove, por exemplo, daremos uma olhada. Podemos prosseguir e atualizar a pontuação. Ei, vá em frente e me bata. Isso foi rude. Boom, você pode ver que temos todos esses zeros por deva, certo E toda vez que o atualizamos, fica um pouco melhor, especialmente em um sistema retrô, especialmente quando você também tem uma pontuação máxima que pode ser Tudo bem Agora, não tenho 100% de certeza de qual é a pontuação máxima, mas isso sempre fica melhor quando você preenche o zero Então eu fui em frente e verifiquei, e a pontuação máxima é 99.990, então isso vai nos dar um, dois, três, quatro, cinco, então isso nos dá Então, vamos rejeitar isso, e vamos verificar isso. Verifique novamente esses números. Se completarmos com cinco, essa foi uma pergunta rápida. Só precisamos colocar algo no quadro aqui. Lá vamos nós. E isso nos daria 99.990 como máximo possível. Tudo bem, então vamos lá. Então, se você quiser ser autêntico, preencha com cinco zeros Lá vamos nós. E aí vai nossa pequena pontuação. Pouco de sobra. Peep peep E Bank, isso teria sido uma vida perdida para nós, mas aí está. Opa. Ainda segurando o botão A. Mas lá vamos nós. Nossa pontuação é atualizada toda vez que destruímos nossos asteróides. 11. Atualizar vidas: Cedo. Então, vamos dar uma olhada em como adicionar saúde, certo? Então, vamos adicionar vidas de jogadores aqui ao nosso jogo. Eu sei. E como não temos sprites para usar aqui, selecionamos nosso personagem de jogador Teremos que fazer as coisas um pouco diferente, mas tudo bem. Não será muito difícil para nós. A primeira coisa que quero fazer é entrar no meu Goey aqui. Porque as coisas vão mudar um pouco. Vou entrar no meu roteiro de Guy. Vou criar uma exportação, e essa será minha variável de rótulo de pontuação. Isso vai ser um rótulo de tipo. E vou simplesmente substituir isso no meu código não precisar pegar essa variável. Então eu posso clicar em Guy e eu vou ver a etiqueta de pontuação no meu inspetor Clique nele e eu posso atribuir a ele meu nó de rótulo de pontuação. Tudo bem. Agora, eu fiz isso porque acho que vou mudar isso um pouco quando estivermos configurando nossas vidas. Então, ao fazer isso dessa forma, não precisaríamos atualizá-lo em nosso código. Tudo bem, então eu vou até o meu Buy. Vou adicionar um contêiner VBox. Agora, um VBox só nos permite empilhar coisas diferentes verticalmente Então, por exemplo, se eu adicionar um rótulo, adicione qualquer texto, e você verá se eu continuo duplicando isso Você verá que tudo ficará perfeitamente espaçado verticalmente, tudo bem e arrumado para nós, certo tudo bem e arrumado para nós E tudo uniformemente espaçado. Então, um VBox é muito bom. Tudo bem, então vou pegar a etiqueta da pontuação e colocá-la dentro do VBox Tudo bem. E se dermos uma olhada no Guy, podemos ver que o rótulo da pontuação ainda está definido. E por isso, não precisamos editar nosso código. E se prosseguirmos e testarmos isso, podemos ver isso nós mesmos. Há uma lá embaixo, e podemos ver nossa pontuação e tudo ainda funciona perfeitamente bem. Não precisamos atualizar nada. Portanto, às vezes, é bom usar exportações desse tipo, especialmente quando você não sabe se vai mudar as coisas ao criar seu I like this. Tudo bem. Então, a próxima coisa que eu preciso fazer é dentro da minha VBox, eu preciso criar uma caixa H. Agora, um HBox funciona exatamente da mesma maneira, contêiner HBox, só que é para coisas que vão horizontalmente, de um lado para o outro, em vez de para cima e para baixo E dentro desse HBox, vou adicionar um controle Na verdade, ainda não vou adicionar o controle porque vou mostrar o porquê. Então, vou clicar no meu player. Vou pegar a linha dois D onde estamos desenhando nossa nave espacial Vou controlar C e copiar isso. Volte para minha cena principal e dentro do contêiner da caixa Sage Vou pressionar Control V para copiá-lo. E você notará Whoops. Se tivermos apenas um monte deles, nada está sendo organizado horizontalmente como você viu com a caixa V. E isso é porque tem que ser um tipo de controle, certo? Portanto, tem que ser um nó verde. É por isso que vamos entrar e entrar na caixa Ace, vamos adicionar um controle regular, e vou dar a esse controle um tamanho aqui, uma caixa H inferior também precisa de um. Mas meu controle, vou seguir em frente e definir que seu mínimo personalizado aqui seja 15 por 20. Eu não sei. Isso pode ser um pouco de mastigação. Vou pegar minha linha dois D aqui e simplesmente puxá-la para baixo e colocá-la dentro do controle. Duplo. Tudo bem. Então, só para que eu possa ver as coisas com um pouco de clareza, vou selecionar meu controle. Vou ativar o conteúdo do clipe no inspetor e agora vou selecionar minha linha dois D, e isso vai me permitir movê-la um pouco melhor descobrir onde estão esses limites E vou descer até minha rotação, e vou colocar -90 graus só para poder girá-la para cima, e posso ver que preciso movê-la mais para baixo Opa, embaixo um ali mesmo. Tudo bem. Agora eu posso desativar o conteúdo do clipe aqui. E eu posso ver que meu Y é um pouco demais, então talvez 15 também. Isso pode ser um pouco curto. 16. Quando eu estiver feliz com isso. Antes de colocá-lo, posso dar uma olhada na minha caixa H e, se eu simplesmente copiar esse controle agora, vou selecioná-lo e fazer o Controle D. Agora, como está dentro de um controle, eles estão ficando todos bem espaçados Então, se continuarmos jogando, podemos ver que fica bem lá em cima, certo? Assim como nossa nave, e faz parte da nossa interface de usuário. Então, como não tínhamos nenhum sprite para ir até lá, estamos apenas aproveitando a linha dois D que já usamos para desenhar nossa nave E agora que temos nossa nave funcionando, e você vê que ela estará à nossa frente aqui, assim como o resto da interface do usuário, como um sapato Então, agora precisamos que a vida real funcione. Então, precisamos subtrair vidas sempre que somos atingidos por um desses asteróides, em vez de sermos capazes de empurrá-lo assim Para isso, nosso jogador precisa estar ao vivo. Então, vamos ao meu script de player. E você quer colocar nossas vidas lá? Não, você sabe, eu acho que vou colocar isso como meu Gui. E também vou criar outra exportação para o meu HBox. Vou dizer que exportamos nosso contêiner Lives, que será um HBox E vou criar outra variável aqui para Lives, que, claro, será um int, e o valor inicial aqui é três. E vamos continuar e criar outra função chamada Update Lives. Tudo bem, e vamos passar por enquanto. Tudo bem. Então, a questão é: como vamos detectar quando nos deparamos com o jogador ou quando o jogador colide com um asteróide Para fazer a colisão para subtrair de nossas vidas e transmitir nossos sinais, vamos até nosso asteróide e entrar em nosso processo físico Vamos verificar se nosso asteróide está colidindo com Então, digamos que a contagem de colisões de barras seja igual a slide, contagem de colisões. Tudo bem? Então, vamos ver se estamos colidindo com alguma coisa e, em caso afirmativo, certo? Então, vamos dizer que se a colisão conta, o que significa que estamos colidindo com pelo menos um item para que isso seja verdade, certo É a mesma coisa de dizer se a contagem de colisões maior que zero, certo? É a mesma coisa, menos palavras. Então, se a colisão contar, obteremos a colisão e atribuiremos isso à colisão de slides, e passaremos o índice zero para que possamos obter o primeiro item com o qual estamos Então vamos pegar o colisor em si. Até agora, o colisor é igual ao ponto de colisão e ao colisor. E se fôssemos imprimir isso para ver o que temos , aqui está. Vamos prosseguir e fazer isso, e veremos quando nossos asteróides aparecerão quando nos depararmos com eles com nossa nave. Podemos ver o corpo de um personagem dois D sendo atingido e tem o nome de jogador. Então, definitivamente estamos detectando quando o jogador é atingido pelos asteróides Tudo bem. Até agora tudo bem. Sabemos que estamos batendo em algo e esse algo é nosso jogador Então, nesse caso, tem que ser o jogador. Não tem como não ser. Mas, por segurança, mais uma vez, poderíamos dizer que o nome do ponto de colider é igual ao dos jogadores Então, se quisermos apenas fazer essa verificação dupla, poderíamos fazer algo assim. E já verificamos se está atingindo os jogadores. O que podemos fazer aqui é livre de pontos, certo? Assim, podemos destruir o asteróide quando nos depararmos com ele. E podemos testar isso funcionando. Sempre teste seu código. B, p, p, bum. Tudo bem, até agora tudo bem. Toda vez que batemos em um asteróide, o asteróide é o asteróide Estrondo. E ainda podemos atirar e destruí-los. Tudo isso ainda funciona. Mas bum, boom. Tudo bem. Agora, o que também queremos fazer aqui é emitir um sinal aqui, certo? Porque precisamos desse sinal para atualizar nossas vidas a partir do jogador e do asteróide Portanto, precisamos de um novo sinal do nosso asteróide aqui. Então, vamos dizer sinal, impacto de asteróide. E não precisamos apresentar nenhum argumento para isso. Só precisamos saber se o asteróide foi atingido. Então, vamos pegar isso, desça. E quando nos conectarmos com o player antes de nos libertarmos, emitiremos esse sinal Então, o asteróide atingiu o ponto de emissão. E então podemos nos desconectar. Asteróide atingiu a desconexão. Agora estou ciente de que ainda não o conectamos, mas vamos até aqui. E isso, na verdade , será muito semelhante à nossa conexão. Então, vou seguir em frente e copiar o argumento do chamável Então, vamos nos conectar à GUI e passar essa função da qual nos desconectaremos E nesse caso, o meu se chama Update Lives. Tudo bem, então eu vou passar isso. Bem, parece que estou perdendo um parêntese aqui. Vamos ver. Você faz parte desse conjunto, você faz parte desse conjunto. E eu tenho um a mais. Lá vamos nós. Tudo bem. Então, vou copiar essa linha inteira. Vou passar para minha função de prontidão. E assim como o sinal destruído, vou conectar este. Portanto, conecte em vez de desconectar. Lá vamos nós. Então, temos dois sinais que estamos nos conectando e prontos, um que emitimos e desconectamos quando somos destruídos e outro que emitimos e desconectamos quando atingimos Tudo bem, agora precisamos dessa função para realmente fazer alguma coisa Então, em nosso script Gooey, podemos dar uma olhada nisso e atualizar nossas vidas Então, podemos fazer vidas menos igual a um. E então precisamos atualizar nosso rótulo de vidas. Preciso atualizar isso? Porque eu mudei o nome? Eu tenho. Vá porque eu tinha um erro de digitação lá. Então, vou pegar meu Lives Container dot get children ou Get Child Count. Com o que queremos ir? Basicamente, vou definir isso com o que queremos remover. Reduzimos para dois. Então eu vou fazer Lives Container dot, get child. Vou passar nossa contagem de vidas aqui. Então, vai começar às três e, quando formos atingidos, isso se tornará dois. Então, dois pegarão nosso mais novo, nosso último aqui, o último, a última vida, porque só temos três, e ele aparece no índice 01, dois, e eu vou ligar para Dot Hyde Vamos chamar Hyde sobre isso? Não, provavelmente porque é com esse controle. Então, o que fazemos em vez disso, só porque ele não sabe o que é criança, diremos que ponto visível é igual Coisas que, se tentarmos, devemos ver nossas vidas. Vemos o primeiro aqui na extrema direita desaparecer quando somos atingidos por um asteróide Boom, lá vamos nós. E parece que de alguma forma fomos atingidos por um segundo. É isso mesmo? Tudo parece estar funcionando. Não tenho certeza do que foi isso. Talvez um tenha surgido quando eu desviei o olhar. Mas lá vamos nós. Temos isso funcionando, é claro, isso vai ao ar agora. Ou pelo menos deveria, mas não acontece. Um pouco curioso deveria nos dizer que isso não está funcionando por causa do índice. Isso é meio curioso. Acho que estamos ficando negativos, talvez esteja voltando. De qualquer forma, passando por aqui. Então, nossas vidas estão desaparecendo. Temos nossas vidas atualizadas. E com base nisso, precisaríamos de uma vida para terminar o jogo ou não. Mas primeiro, quero definir um número mínimo aqui ou um número máximo para que não possamos ficar abaixo de zero em nossas vidas. Então, o que eu vou fazer é, na verdade dizer vidas iguais a. E queremos que o número máximo aqui entre vidas menos um e o segundo argumento seja zero Mesmo que não precisemos disso, vou colocar isso por precaução para garantir que não tenhamos algum tipo de bug acontecendo lá. Portanto, nossas vidas nunca devem ficar abaixo de zero. E aí está. Temos esse problema, e tudo o que faríamos agora é encerrar o jogo se chegarmos a zero e reiniciarmos a cena Tudo bem. Agora vamos fazer isso aqui porque tudo o que queremos fazer é atualizar as vidas. Nós fizemos isso. E da próxima vez, reconfiguraremos o jogo e reiniciaremos. 12. Final do jogo e reiniciar: Antes de terminar o jogo, vou entrar em contato com meu Guy. Vou adicionar outra nota aqui. Vou adicionar um rótulo. Esta será minha gravadora de game over. Esse texto só vai dizer “fim de jogo”. Vou colocar essa âncora , aqui mesmo no topo. Vou colocá-lo no remetente da tela para dizer fim do jogo sempre que perdermos Podemos acessar nosso código e, com nossas vidas de atualização, criar uma nova função. Fim do jogo e simplesmente faremos uma verificação depois de atualizarmos a tela. Eu direi que eu vivo é igual a zero, então chamamos nossa função de fim de jogo E a função de fim de jogo Bem, eu não preciso que isso apareça. Vou colocar esse passe de volta. Vou seguir em frente e criar uma exportação aqui para minha gravadora de jogos, a etiqueta GameOver Vou designar isso e o inspetor aqui bem rápido. Etiqueta GameOver. Então, o que fazer. rótulo GameOver dot Vsb é igual a tripulação. Podemos pausar Portanto, é uma árvore G. E, na verdade, não vou pausar a árvore dessa vez. Acho que queremos tirar o jogador do Goey. Acho que o jogador aguenta a segunda. Certo. Como eu quero fazer isso? Tudo bem, então vou clicar no meu player aqui na minha página principal Vou clicar com o botão esquerdo do mouse e arrastá-lo para dentro. E eu vou lançar, e isso deve me dar o caminho para o meu jogador. Então, vou dizer que dot Qu está livre para deletar meu player. Quando você ficar sem Lives e terminar o jogo, vou dizer que vou esperar. Pegue a Árvore, crie um cronômetro. Dessa forma, podemos esperar 3 segundos ou algo assim. Você pode jogar com esse cronômetro e ver do que gosta Dot TO, certo? Já fizemos isso antes. E então vamos dizer Get dot. Recarregue a cena atual. Então, vamos dar uma olhada quando terminarmos o jogo. Para fazer. Nós podemos entrar. Nós podemos jogar. Podemos atirar, ganhar pontos. Mas, mas, bah. Está tudo bem. Boom, fomos atingidos, perdemos uma vida. Boom, perdemos duas vidas. Era nosso pequeno navio. Existe, e vamos perder nossa última vida. Boom, fim do jogo. Aguarde 3 segundos. O jogo recarrega e podemos continuar jogando. Tudo bem. Então aí está. Nosso fim de jogo está configurado de forma simples. E estamos prontos para começar a jogar nosso jogo aqui. Agora, se você quiser que seja um pouco mais autêntico ter a tela preta, você pode acessar as configurações do projeto e eu apenas pesquiso a palavra cor e entro em um ambiente de renderização Cor padrão. Você pode vir aqui e mudar essa cor se quiser. Essa é a cor padrão do plano de fundo. Você pode fazer isso se quiser. Mas como eu geralmente prefiro manter a cor padrão aqui, o que você pode fazer é simplesmente entrar e destruir a cor, definir suas âncoras para ficarem cheias definir suas âncoras para ficarem Bem, parece que não vai acontecer porque não temos o controle como principal. Entendo. Tudo bem. Então, teremos que entrar e configurar isso nós mesmos. Assim, você pode simplesmente definir o tamanho que quiser. Desde que seja grande o suficiente para cobrir a área azul, você deve ficar bem. E entre e mude para preto. E como vamos mostrar apenas o que está na área azul, não importa que seja maior. Então, vamos jogar Oh, e eu preciso mudar a ordem Então, eu preciso pegar a cor, retirar e, na verdade , levantá-la até o fim, de forma que meu jogador fique em cima dela para que possamos ver. E aí está. Temos algo que parece ainda mais próximo do original por ter o fundo preto. Mas, novamente, essa é apenas uma escolha pessoal se você quiser ter isso. B, boom, mas, p, p, p. E na verdade parece um jogo Nosso. Ah, e se você está se perguntando por que a pontuação não está funcionando Provavelmente é só porque eu criei o Color Rect para ser o primeiro filho Então, Índice zero, estou tentando conectar meus sinais ao color rect em vez da GUI Então, se eu simplesmente puxá-lo para baixo para que a GUI apareça, saia daí Lá vamos nós. Para que o cara seja o primeiro , isso deve resolver nosso problema aqui. Veja, bum, Lives Now Connecting e nossa pontuação. Então, isso é apenas uma camada de ordenação na hierarquia da cena. Então, isso é apenas algo a ter em mente se você, é claro, fizer dessa maneira e não fizer as configurações do seu projeto. Tudo bem, aí está. Temos nossos pontos. Nós temos vidas. Temos o GameOver. Temos que reiniciar. E fizemos, mais uma vez, outro jogo completo sem precisar de nenhum recurso Fizemos tudo de dentro do motor. Tudo bem, isso bastará. Agora temos asteróides. E se você quiser dar um passo adiante, pode seguir em frente e novamente, encontrar sprites on-line ou usar a Linha dois D e criar as naves espaciais que você viu e as naves espaciais que você viu atribuir E a mesma coisa, dê a eles um sinal, conecte-o à sua GUI, envie os pontos com ele, assim como fazemos com os asteróides