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