Transcrições
1. Introdução ao curso: Olá, e bem-vindo
ao acampamento Got to Boot. Sou Mike Maguire e serei seu instrutor
durante todo Em nosso primeiro vídeo aqui, abordaremos tudo o
que abordaremos ao
longo deste curso,
que
será principalmente
sobre que abordaremos ao
longo deste curso, o desenvolvimento de jogos dentro
do motor de
jogo GoTo No entanto, também
abordaremos um pouco do desenvolvimento de software, em que você criará seus
próprios aplicativos de desktop, além de se ramificar
em coisas como APIs e sites, fazendo
com que tudo se comunique entre si E todas essas coisas sempre
podem ser repetidas e usadas nos próprios jogos, então ainda podemos
considerar tudo parte do desenvolvimento do jogo
no final do dia. Vamos dar uma
olhada na visão geral do motor
de jogo Goto Bem, o Goto é um motor de
jogo poderoso e versátil que oferece uma ampla gama de recursos e ferramentas que são muito úteis
para o desenvolvimento de jogos Agora, um exemplo disso é algo como
física de tecidos, por exemplo. Digamos que você queira
fazer uma capa em um personagem. No Goto, você poderia
configurá-lo em cerca de um minuto, enquanto em outros motores, levaria muito mais tempo apenas para que a
física do tecido funcionasse Então, esse é um benefício que
teríamos se criássemos um jogo em três D
que
envolvesse coisas como capas,
capas e qualquer outra coisa
que precise de física de tecidos É um mecanismo de código aberto, o que significa que é
ótimo de usar e tem uma grande comunidade de desenvolvedores contribuindo
para seu crescimento. Agora, enfatizo
a parte gratuita porque algumas pessoas dizem
que a unidade é gratuita
e, pelo menos no
momento atual, não é gratuita. Existe uma versão pessoal que você pode usar
até certo ponto,
uma vez que tenha uma certa quantidade
de receita ou, se quiser determinados recursos, terá que pagar. Portanto, eu não consideraria o
Unity totalmente gratuito e outros mecanismos que as pessoas
consideram, como irreais Eles recebem uma parte
de seus royalties,
então, embora você
não esteja pagando adiantado, você está pagando a longo prazo E então temos
outros mecanismos, como GameMaker, que
acredito que agora estão em regime de
assinatura Portanto, o GOTO é totalmente gratuito
do começo ao fim. Você nunca precisa
pagar por nada. O GOTO também suporta o desenvolvimento de jogos em dois D e três D. O que, obviamente,
o torna adequado para uma ampla gama de projetos. Isso não vai limitar você
no que você pode fazer ou tornar
as coisas extremamente difíceis,
por exemplo, novamente, com o
GameMaker, é um motor TD E se você quiser fazer três
D, seria uma grande dor de cabeça forçá-lo a fazer isso, porque
não é para isso que serve GoTo é destinado
tanto para TD quanto para três D, então você não terá problemas ao fazer isso Você só precisa se
preocupar em como criar
seus jogos, eu suponho. Tudo bem. Agora vamos ver os benefícios de usar
o Gato. Bem, vamos explorar algumas das principais vantagens de usar
o Goto em seus projetos de
desenvolvimento de jogos GoTo tem uma
interface amigável que
facilita a navegação e o
trabalho, mesmo para iniciantes oferece um editor visual que permite
criar cenas de jogos manipular objetos e
configurar a lógica do jogo sem precisar escrever
muito código E é aí que entra o GD Script
, que é muito amigável para
iniciantes e
bastante fácil de aprender sistema baseado em nós do Goto simplifica a criação e a organização de todos os objetos
do seu jogo, tornando-o altamente
intuitivo e eficiente Vamos dar uma olhada nas
comunidades e recursos do Gatto. A comunidade de Gatos é vibrante e apoia desenvolvedores
de todo o mundo, compartilhando seus conhecimentos
e experiências Existem vários fóruns on-line, sites e grupos de mídia social onde você pode se conectar
com outros usuários do Gato, fazer perguntas e
encontrar inspiração. Um desses principais está
no próprio site do Gato. Há um fórum específico
para as pessoas fazerem
perguntas e obterem ajuda com qualquer coisa em que estejam presas, seja uma pergunta para iniciantes ou algo mais avançado Além disso, o Gato tem
uma extensa documentação e tutoriais que estão disponíveis praticamente
em qualquer lugar neste momento, facilitando a
localização de respostas para as perguntas que você está
procurando e o ajudando a
aprender novas técnicas Agora, o que você vai
aprender neste curso, exatamente? Neste curso,
abordaremos uma ampla variedade de
tópicos para ajudar você a se tornar proficiente no uso do mecanismo Goto para criar aplicativos Você aprenderá a linguagem de
programação GD Script, que é essencial para criar mecânicas
e interações de
jogo, e será nossa principal linguagem de
script Agora, a razão pela qual
vamos
usar GD Script em vez de
algo como o C Sharp é que o GD Script tem um
suporte melhor no momento, embora o C Sharp também
esteja ficando muito bom em seu suporte Mas o GDScript também tem uma compreensão mais estreita, eu
acho que você poderia dizer, da própria API de motores, além de ser muito mais fácil para iniciantes aprenderem e usarem Exploraremos o desenvolvimento de jogos em dois D e três em D,
incluindo a manipulação de sprites Obviamente,
abordaremos as novações, detecção de
colisões, trabalho com partículas
e muito Você também ganha
experiência na criação um
software de desktop baseado em Goey ou
interface gráfica de usuário usando o Goto
e aprende a utilizar APIs e incorporar o uso de soquetes da web
para Tudo bem.
Parabéns por concluir a introdução
ao mecanismo de jogo Goto
no próximo vídeo Vamos nos aprofundar no script GD,
a linguagem de script que usaremos no Goto, e aprenderemos um pouco de código Agora, lembre-se, a comunidade
Gatto está sempre lá para apoiá-lo, e eu estou aqui para guiá-lo em
cada etapa do processo Vamos mergulhar juntos
no empolgante mundo do desenvolvimento de jogos.
2. Baixe e configure: Bem-vindo aos futuros desenvolvedores. Se vamos desenvolver coisas usando o mecanismo Goto, seja videogame
ou software de desktop, primeira coisa que
precisaremos é,
bem, o mecanismo Goto Então, vamos dar uma olhada em como
podemos fazer o download
disso. Agora, a primeira coisa ou
a primeira maneira de dizer
que podemos fazer
isso é baixando Gato do
site oficial aqui. Basta acessar Goto engine.org, como vemos aqui,
aqui mesmo na tela E uma vez aqui, você verá a seção de download
na parte superior da tela. Além de dois botões de download no centro, temos o LTS, que tem três pontos X e
o mais recente, que é 4.1 Usaremos a
versão mais recente, que é 4.1. Não há nada de errado com
a versão X de três pontos. Ele ainda está sendo desenvolvido
e é o suporte de longo prazo. No entanto, se você fosse usá-la, essa versão enquanto
acompanha, pode
haver algumas funções ou coisas que
escrevemos que podem ter nomes
diferentes ou, potencialmente nem mesmo existir
na versão antiga. Portanto, lembre-se disso
e, por isso, recomendo
que você use a versão
4.1 à medida que avançamos. Tudo bem, então esta é a
versão estável 4.1 que acabou de sair. Assim, você pode clicar no botão
Baixar mais recente ou na guia de download na parte superior. Ambos o levarão
a esta tela aqui. Tudo bem, então, para fazer
o download disso, tudo o que precisaremos,
já que vamos usar
a linguagem de
programação GD Script Tudo o que precisamos é a versão
padrão aqui com o botão azul. E a diferença entre
esta e a versão.net é que a
versão.net
também suporta C E se você fosse usar isso
, teria que rolar para
baixo e também pegar o.net necessário
para usá-lo, bem
como, de preferência programas
externos nos quais
escrever seu código E são muitas coisas
extras que não
precisamos ao fazer
este curso. Portanto, se você quiser
obtê-lo no site, pode
clicar no botão
do motor Goto para 4.1 na versão
padrão Agora, há uma segunda maneira
de você conseguir isso, que seria do Steam. Você pode acessar o
Steam e
fazer o download de lá,
se quiser. E isso nos
dará a versão padrão por padrão. A versão Steam não tem
a versão.net disponível. Mas você não precisa se
preocupar com nenhuma confusão se prosseguir
e obtê-lo no Steam. Tudo bem, então se você
obtê-lo do Steam, pode
clicar no botão Play Ou, se você o obtiver
do site, obterá um arquivo zip e tudo o que você precisa
fazer é
extraí-lo e começar a
executar o aplicativo. Tudo bem. Ao executá-lo, você se depara com uma
tela como a que você vê aqui. E tudo o que vamos
fazer, é claro, você não vai
ter todos esses projetos e coisas do seu lado. Mas tudo o que vamos
fazer é apertar o botão do novo
projeto aqui. E isso deve
lhe dar uma nova janela que
aparece exatamente como você vê aqui E tudo o que você precisa fazer é decidir onde, acessando Browse, decidir onde
deseja colocar o projeto aqui à medida que avançamos no curso
e dar um nome a ele. Para isso,
vou chamar isso de bootcamp de botas Para esse propósito,
vou voltar e depois
chamá-lo de Goto Boot Camp, e vou
clicar em Criar pasta porque tem que estar em
uma pasta vazia aqui E aí está. Vemos que temos um pequeno cheque verde aqui indicando que está
tudo bem. Em seguida, temos três modos de renderização forward plus, mobile
e compatibilidade. A compatibilidade é usada como OpenGL. Como você pode ver,
a partir dos pontos aqui, cada versão tem
seus prós e contras. Mas, na maioria das vezes, você trabalhará
com o Board plus. A menos, é claro, que
você esteja fazendo algo , crie uma versão móvel ou algo
assim, é claro que você deve
usar a opção móvel aqui. E se você estiver trabalhando em uma
versão a ser implantada
na web de sua ferramenta
ou hardware antigo
, você usaria a
compatibilidade Então, vou seguir em frente
e deixar a opção Avançar
mais aqui selecionada, e podemos simplesmente clicar em
Criar e Editar, e isso vai seguir em frente e criar o projeto
e abri-lo Então, isso levará apenas
um momento. Tudo bem. Em seguida, você verá
a seguinte tela aqui, e agora estamos dentro
do motor e prontos para começar a trabalhar aqui Agora, para dar
um breve
resumo, no canto inferior esquerdo, temos o sistema biliar, que é onde todos os nossos arquivos,
scripts, ativos do jogo, etc., serão armazenados Continuando do lado
esquerdo aqui, temos a aba de cena. É aqui que desenvolveríamos
visualmente, bem, os visuais
de nossos projetos Aqui está uma guia de importação. Portanto, se você precisar
reimportar um objeto por qualquer motivo,
poderá fazer isso a partir daí Indo para o lado
direito, temos o inspetor, o que
será muito importante Estaremos lá um
pouco durante todo o curso. Temos a seção de nós, que nos permitirá conectar
alguns sinais embutidos, e temos um histórico que
podemos revisar. Tudo bem acima disso, temos alguns botões. Temos um botão play aqui, que é para executar o projeto. Isso
percorrerá a cena padrão , como
se estivesse sendo aberta por meio da execução do executável após a exportação do jogo Na maioria das vezes,
você vai me
ver fazendo essa aqui, como rodar a cena atual, e essa vai
rodar a cena atual que eu
selecionei em vez de
executar o projeto inteiro Então, por exemplo, no meio, você tem essa guia
que diz vazio. Se eu construísse, se eu construísse
algo aqui, acessando a cena atual de execução, ele executará
o que está sendo executado
nesta guia, independentemente de quais
minhas outras configurações estejam definidas No meio, você
verá isso, onde
temos nossos dois D ou três D, ou scripts, e
a biblioteca Asset, onde você poderá
entrar e encontrar ferramentas ou novas adições
ao mecanismo, coisas assim que podem
ajudá-lo no futuro ou tornar sua vida
um pouco mais fácil Dependendo do que
você está fazendo, lembre-se de que a biblioteca de ativos pode ser
muito útil, muito útil. E, é claro, você
sempre pode usá-lo apenas para ver código e tentar
aprender com ele. Tudo bem? Nós baixamos o motor. Nós o temos funcionando. Eu
diria que o temos instalado, mas não está realmente
instalado, certo? Nós meio que abrimos o zíper e
o abrimos. E temos um novo
projeto criado e estamos prontos para começar a aprender
sobre essa
linguagem do GD Script
3. 03 Impressão para produção de imagens adicionadas: Tudo bem. Agora que criamos nosso projeto para dar uma
olhada rápida na interface aqui. No lado esquerdo,
por padrão, temos
a hierarquia de cenas Então, essas são nossas cenas e
a aparência da cena ou nível atual, como você pode ver,
se você estiver
desenvolvendo jogos, e abaixo disso,
temos nosso sistema de arquivos, e essa é nossa estrutura de
pastas e todos os arquivos que
temos em nosso projeto. Então é aqui que
vamos ver nossas cenas
salvas, nossos scripts, quaisquer texturas ou outros recursos que temos em nosso projeto que serão
mostrados aqui embaixo Na extrema direita,
temos o inspetor, e é aqui que
vamos ver as propriedades de cada item em nossa cena Na parte inferior,
temos nosso editor de sombreamento. Temos nossa linha do tempo de animação, nosso barramento de áudio para fazer algumas mixagens Temos nosso depurador para corrigir os
erros necessários
e temos nosso console de saída
que podemos dar uma olhada, e seremos muito úteis
ao longo E, claro,
bem no centro, temos nossa grande janela panorâmica E, por padrão,
você pode ver que estamos colocando as três áreas D. E no topo, vamos
passar
para dois D porque é
tudo o que precisamos para isso. Se apenas diminuirmos o zoom, você
notará essa caixa azul. Esse é essencialmente o
tamanho da nossa janela. Agora, se você quiser mudar isso,
basta acessar as
configurações do projeto. E parece que isso não é
percebido. Vamos ver se consigo
ativar isso. Lá vamos nós. Então, tudo o que vamos fazer
aqui, se você quiser alterar o tamanho da
sua janela, vamos
descer e ver a
largura e a altura da tela, da
janela e largura e a altura da tela, da
janela e Aqui está o que você
pode mudar. E você vê que isso não
tem muitas configurações aqui, mas se avançarmos demais, teremos muito mais opções
que você poderá dar uma olhada, como uma alta taxa de atualização, e parece que o
alto DPI está Eu sei que existe um alto
DPI, modo de economia de energia. Portanto, há
algumas opções aqui que você pode dar uma olhada. Mas, por enquanto, não
precisamos realmente das configurações avançadas. Eu só queria
destacar para você a largura e a altura aqui. Vou seguir em frente e
vou mudar o meu para 12 80 por 720 apenas para obter um bom número redondo e
padrão, e uma janela
perfeita Não precisamos começar a minimizar, não
precisamos começar a maximizar. E, no começo
, nem valerá a
pena prestar atenção nisso , nem valerá a
pena . Para a primeira boa
parte disso. Mas lá vamos nós. Vou definir um 12 80 por 720. E se você definir
isso, poderá notar a
mudança do retângulo azul. Talvez você não. E isso é só
porque é uma mudança muito pequena e
minuciosa. Mas sim, qualquer coisa dentro desse retângulo azul aparecerá na tela Então, para começar,
vou seguir em frente e, na cena à esquerda, vou selecionar a interface
do usuário, e isso
nos dará um nó de
controle por padrão. Se quiséssemos,
poderíamos clicar em outro nó e ver todas
as coisas diferentes que podemos adicionar e simplesmente
selecionar o controle aqui. Podemos ver todos os nós da
interface do usuário inerentes ao controle. Ele controla as âncoras, o deslocamento, a
adaptação, a posição e o tamanho
em relação ao seu pai Mas, em geral,
podemos ver que o controle é usado para uma interface de usuário. E é isso que
observaremos aqui, qualquer coisa relacionada
à interface
do usuário será colorida em verde. Tudo bem, então vamos selecionar
isso
e clicar em Criar ou clicar no botão da interface
do usuário. De qualquer forma, você chegará à mesma tela ou
ao mesmo resultado. E com isso,
temos uma cena à qual
podemos adicionar nosso script para que
possamos realmente começar no código, uma cena que
podemos reproduzir
para que possamos ver nosso código ser executado e uma cena que precisamos salvar. Francamente, vou salvá-la
. Ponto de controle C TSCM, tudo bem. Vá em frente e salve-o lá. E vou adicionar meu primeiro script. Agora vou
chamar isso de impressão porque é isso que
vamos ver aqui para começar. Imprimir. O idioma está no script GD, controle
aprimorado,
modelos sem padrão Poderíamos simplesmente usar vazio porque vamos
excluir tudo nele de qualquer maneira, então vamos
continuar com esse objeto vazio e criar. Tudo bem, então tudo o que vemos aqui
no topo é estender o controle E isso está apenas dizendo
que isso vem da nossa classe de controle, e o que quer que esteja se estendendo é o tipo de nó ao qual o
script deve ser anexado Então, como está conectado
a um nó de controle, ele precisa estender o controle. Então, vamos descer
um pouco até lá. Vamos criar um e
vamos digitar Bunk Underscore. Pronto? Eu coloquei um
resfriador no final disso. Pressione Enter e
digite a palavra pass. Agora podemos remover o erro
que está aparecendo lá. Mas isso, o que acabamos digitar aqui é
apenas um trecho de código que foi removido porque
fizemos um script vazio E eu posso ir em frente e
te mostrar isso aqui também. Então, se você fizer isso de
outra maneira, eu
vou excluir esse script, tirá-lo do controle. E se eu adicionar um
script a ele, novamente, você pode simplesmente clicar
no slide Controle e clicar no
botão de script aqui no topo, ou clicar com o botão direito do mouse em Controle, e você
poderá adicioná-lo. E estou percebendo que isso não
está aparecendo lá. Isso é bom. Você pode saber o que é bom
porque você pode, bem, você está vendo isso do seu lado. Mas se selecionássemos
um nó padrão de dois pontos, o modelo, quando
anexado em nosso script, espero que eu
me lembre e coloque uma imagem aqui na tela, caso vocês
estejam um pouco Você clica em Criar, você verá esta tela aqui, e tudo o que fizemos essencialmente quando criamos
uma vazia foi excluir tudo isso e digitar
nesta seção novamente Foi tudo o que fizemos. Agora, a razão pela qual
vamos usar esse sublinhado pronto aqui é porque qualquer coisa dentro
desse bloco aqui,
que no momento, é apenas a passagem de palavras, será executada assim que o controle
aqui entrar na cena, que já faz parte
da cena, para começar Então, ele será executado
assim que clicarmos no botão play. E o que você
aprenderá aqui é que aprenderemos sobre as
diferentes maneiras pelas quais podemos realmente
imprimir no AR Console. E por que você pode
querer fazer isso? Bem, você pode usar isso para
se dar algumas informações. Você pode usar isso para
ajudá-lo a tentar depurar alguns pequenos erros E, o mais importante, as coisas que você
imprime aqui podem realmente ir para seus registros. Portanto, seus registros, é claro, se você já teve
problemas com um jogo ou software no
passado e publicou em um formulário, talvez perceba que as pessoas
solicitam que você publique seu registro. Bem, isso é o que
eles estão pedindo. Então, vamos começar
a falar sobre isso. E a forma mais padrão ou simples de digitar
a palavra imprimir,
abrimos e fechamos um
par de parênteses
e, entre
esses parênteses, podemos usar um par de Não importa, mas o que quer que comece, tem que terminar. Então, se tivermos aspas
simples aqui, você
não pode digitar a palavra não como você vê lá, porque estamos tendo um problema em que o T não está incluído
e, basicamente, ele está parando aqui neste apóstrofo, a aspa simples,
e continua
após o Então, neste caso,
se vamos ter
algo assim lá,
precisaríamos colocar aspas e continua
após o Então, neste caso, se vamos ter
algo assim lá, duplas
para o início e o começo,
não digite isso corretamente. Portanto, você pode usar qualquer um, mas dependendo do que você está
escrevendo, isso pode limitar você. Então, a primeira coisa que
vamos digitar aqui é Hello world. Agora, isso é
fundamental ao aprender qualquer linguagem de programação que imprimimos no
console Hello World Então, é como
um rito de passagem. É algo que
todo mundo faz quando experimenta um idioma
pela primeira vez. Tudo bem. Então você pode
vir aqui e apertar este botão play
aqui no topo. Com o pequeno badalo, e isso reproduzirá
a cena atual Ou você pode clicar neste
botão de reprodução aqui na parte superior. Eu digo Run Project. E se você clicar na
que diz Executar projeto, será exibida uma tela para selecionar sua cena principal, que, neste caso,
usaremos a
que já temos, então você pode simplesmente clicar na
opção selecionar atual e ela será executada Você notará que uma janela se abrirá. Espero que sem problemas. E você verá
no console
aqui embaixo que
imprimimos Hello world. Então, já aprendemos
a imprimir no console. Então, no mínimo, agora
você tem sua
primeira inscrição Não é um aplicativo muito
interessante, mas é algo que
você criou que funciona. Agora, ao longo deste
curso, se imprimirmos, é mais do que provável que
esse seja o
método que vou usar, mas há algumas outras coisas que vale a pena observar aqui. E um deles é
impresso com dois Ts. E o que isso basicamente
vai fazer é
colocar uma aba entre os objetos. Então, se gostarmos disso e separarmos nossos objetos com uma vírgula e
continuarmos jogando isso, você verá na saída agora é um espaço por tabulação
entre nossas palavras Se tivermos dois
objetos diferentes como esse, podemos imprimir
no final, um T e um S, e isso só
colocará um espaço entre cada objeto, exatamente como tínhamos
inicialmente, onde tínhamos hello world como peça única. Agora, também temos impressora com TWors e isso é, na verdade, eu o chamo de impressora, mas é
mais um erro de impressão E você notará quando executarmos isso que isso
realmente aparece em nosso console em vermelho com
um pequeno ponto vermelho lá Então, isso é algo que
podemos usar se quisermos mostrar um erro no console. Há algo
que podemos ver. E como é vermelho e o
resto do nosso texto é branco, é algo para o qual podemos
pular imediatamente. E isso nos deixa
com uma última opção aqui, que é imprimir em bruto. Agora, se fizermos isso, você
não verá nada aqui na saída do console. Mas o que isso faz é
, na verdade ser impresso janela
do console
que está sendo exibida
nos bastidores e
ainda deve ser exibida em nossos registros. Isso deve cobrir
a impressão, sendo possível fazer todos esses métodos
de impressão aqui. Então, novamente, temos a impressão impressa
como vemos aqui. Temos dois Ts impressos. Estrondo. Então, lá. E, para observar, você não precisa ter um
espaço após a vírgula, mas tem uma aparência melhor É uma espécie de coisa normal
que as pessoas acabam fazendo. Mas eu vou pegar
impressões digitais com um S. E aí está. Vá em frente e digite bed in.
O que mais temos? Temos impressora, que está
imprimindo seus próprios erros. E tínhamos a impressão em bruto. Portanto, existem todas as
maneiras diferentes de
imprimir no console, é claro, menos imprimir em bruto, o que só
seria útil para nós se
acessássemos nosso registro Mas lá vamos nós. Há todas as
maneiras diferentes de imprimir, e isso será suficiente
nesta lição aqui. E na próxima, vamos
seguir em frente e vamos
entrar em algumas variáveis
e/ou matemática.
4. 04 Variáveis: Tudo bem. E nesta lição, vamos seguir em frente e começar a falar sobre variáveis. E se tivermos tempo,
entraremos na matemática. Então, variáveis. O que eles são? Bem, eles são
algo que podemos usar para representar qualquer dado. Assim como antes, quando
tínhamos um dado que era definido e assinava
um par de aspas, podemos definir isso como uma variável, o
que seria muito
útil, por exemplo, se tivéssemos uma frase muito longa e pudéssemos digitar apenas
uma palavra ou uma letra, e isso poderia significar exatamente
a mesma coisa. Portanto, uma variável é um rótulo que você pode usar para
armazenar
dados, como os que imprimimos
antes com o Hello world. Então, vamos
adicionar isso em um script. Então, vamos criar um
pouco de controle. Vou adicionar um script aqui. E eu vou continuar
e chamar isso. Vamos continuar e
chamaremos isso de variáveis. E clique em Criar. E a única que
precisaremos aqui
será nossa
função pronta, é claro. E sim. Tudo bem, então vamos em frente e vamos colocar o Type
Pass de volta lá E nossas variáveis vão
ficar aqui no topo. Então, para criar uma variável, tudo o que precisamos fazer é digitar
VAR VAR para variável. Coloque um espaço lá e podemos digitar
sempre que quisermos aqui. E esse será
o nome da nossa variável. Então, o que vamos
colocar aí é vamos chamar isso
de saudação, certo? E, no mínimo,
isso é tudo o que precisamos fazer. Podemos atribuí-lo mais tarde,
se quisermos. Bem, na verdade, vamos atribuí-lo
aqui no topo. Então, vamos apenas
dizer iguais. Então, vamos dizer saudação é igual, e podemos colocar nosso
par de aspas, e você pode dizer olá, novo W. Agora, temos uma
pequena frase aqui, mas podemos colocá-la onde quer que
coloquemos a Então, se prosseguirmos e
imprimirmos nossa saudação variável, e se prosseguirmos e executarmos isso, você verá aqui embaixo em
nosso manual que
obteremos a saudação que
digitamos na parte superior obteremos a saudação que
digitamos Agora, você pode digitar
quando quiser aqui. Você pode fazer isso pelo
tempo que quiser. E tudo isso será representado por essa palavra
singular. E se quiséssemos
ir mais longe,
poderíamos simplesmente transformá-la em uma
letra singular como G e fazer isso de novo. E, como você pode ver
, uma letra representa tudo isso. Agora, para fins
de uma variável, especialmente aquelas
que estão no topo aqui, usar uma letra como essa é nomenclatura
terrível porque
alguém entra olha isso. Você pode ver que há uma
variável chamada G, mas ela não diz
o que é E uma variável deve
dizer exatamente o que é e o mínimo de
contexto possível. Então, vamos deixar isso como uma saudação porque é isso que está
acontecendo aqui Temos uma saudação que
está acontecendo, certo? Eu só controlo para salvar. Então, agora temos nosso
primeiro programa em execução e agora estamos usando variáveis. Agora, parte de cada
variável terá algum tipo de
dado conectado a ela. Isso normalmente é
chamado de valor. Agora, não importa
que tipo de dados sejam esses. Eu sempre posso ser
rotulado como um valor. Então, no nosso caso, greeting
é o nome da variável e Hello New World
é nosso valor Agora, um dos benefícios
que temos com isso é que dá um pouco mais de trabalho. Mas digamos que viemos
aqui e quiséssemos usar essa frase ou
aquela saudação
repetidamente ,
repetidamente, em todo o nosso código Você pode imaginar
ter que vir aqui e editar todas essas
coisas se quiser fazer uma alteração
na sua saudação, depois vir aqui e editar
todas elas uma por uma Bem, com a variável, podemos fazer isso
aqui no topo. Então, em vez de olá, novo mundo, diremos olá e bem-vindos
ao programa Mundial. E como estamos
usando uma variável aqui, acabamos de alterar essa frase em todas essas linhas
de código ao mesmo tempo. Agora, como eu disse, se fôssemos passar por
isso um por um, seria extremamente chato Como mencionei anteriormente, podemos definir isso mais cedo
ou podemos definir isso mais tarde
e, na verdade, também podemos
sobrescrever isso Então dizemos saudação, que
é o nome da nossa variável, e diremos igual,
direi que esse é meu Então, veremos que a grade
superior
será a que está colocada aqui na parte superior Mas depois disso,
vamos
mudar o que essa variável significa. Estamos alterando o valor disso
e, em seguida,
imprimiremos nosso novo valor. Se prosseguirmos e
jogarmos isso,
aí está. Você pode ver isso aí. Assim, podemos alterá-lo na parte superior, o
que, idealmente, você
deve fazer quando puder, ou você pode alterá-lo mais abaixo dentro do seu
script em um momento posterior. Você pode alterá-lo ou assiná-lo para algo
completamente diferente. Tudo bem Então, isso nos dá uma visão geral rápida
aqui sobre variáveis. Então, o que vou
deixar aqui é que existem alguns nomes,
algumas regras que você deve tentar seguir quando se trata de
nomear suas variáveis Agora, essas regras normalmente
são um nome de variável. variável pode ser nomeada usando letras, números
e sublinhados, que não podem usar espaços
no nome da variável A linguagem simplesmente não permitirá que você faça
isso, e você não pode iniciar o nome
das variáveis com um número. Isso é algo para se ter em
mente. Evite Você
também deve evitar usar qualquer palavra-chave ou
nome de função que já exista
no idioma, ou você receberá um erro. E você aprenderá ao analisar o que é uma
palavra-chave e o que não é. E uma palavra-chave seria algo como VAR there ou variable. Agora, você pode se perguntar
quando algo assim pode surgir. Mas e se você quisesse que uma variável chamada
pass representasse a senha, o que você viu ao
criar o script que passa na verdade
já é uma coisa, então não
podemos fazer isso. E por último,
o nome de uma variável deve ser curto, mas descritivo ao mesmo tempo
do dado
que ela contém Então, por exemplo, ter uma variável
chamada comprimento do nome seria muito mais
apropriado e aceitável do que algo
como comprimento do meu nome. Agora, ambos transmitem
a mesma informação, mas um deles
é muito mais curto,
é mais conciso e, é mais conciso e geral, será visto como
um nome de variável melhor Ok, agora, algo
que vale a pena notar também quando se trata nossos erros variáveis é observar
como tudo isso está em minúsculas Se tivéssemos algo
disso em algum ponto como maiúscula, como você vê, obteremos um
erro lá de cima, e vemos na parte inferior do
identificador que a classificação com G maiúsculo não é declarada
no escopo atual Então,
o que isso significa é parece que estamos
tentando usar uma variável, mas essa variável
não existe. Portanto, a capitalização será algo em
que vale a pena prestar atenção, especialmente na
codificação Tudo bem, então vou terminar aqui para dar uma
olhada rápida nas variáveis E na próxima,
começaremos a
analisar alguns desses
diferentes tipos de dados. Ou seja, começaremos a
analisar as cordas.
5. 05 cordas: Tudo bem. Hoje, vamos dar
uma olhada nas cordas. Strings é um tipo de dado. Então, vamos começar. Tudo o que fiz aqui foi criar
um novo script,
é claro,
para que as sequências de caracteres pertençam
especificamente a esta lição Agora, como programadores, nós
dois definimos e reunimos
alguns dados para armazenar, como você viu anteriormente
com nossas variáveis, e isso ajuda se pudermos classificar os diferentes tipos de Agora, o tipo que estamos
usando foi chamado de string. E uma string é
qualquer coisa que entre um par de
aspas, sejam as aspas duplas ou as aspas simples que
mencionamos anteriormente Então, nosso olá, ou melhor nossa variável de saudação
que estávamos usando estava contendo
um dado, e esses dados podem ser classificados
como uma string para seu tipo Tudo bem. Portanto, ao
atribuir uma variável, é uma prática recomendada atribuir também o tipo de
variável que ela é E se formos em frente
e dermos uma olhada, se voltarmos e
recebermos nossa má saudação, tornaremos isso igual a Hello
New World, como tínhamos antes Na verdade, podemos definir isso
de duas maneiras diferentes. Assim, podemos colocar dois pontos após o nome da
nossa variável e digitar o tipo de dados estamos procurando,
que pode ser uma string E você pode ver que essa
é uma maneira classificá-la como uma string Agora, como alternativa, podemos
usar o operador Walrus, que é dois pontos
ao lado do sinal de igual Temos cólon igual. E o que isso vai fazer é
pegar nossa nota e atribuí-la igual a esse dado E então, qualquer que
seja esse
tipo de dado , também é como
vamos classificá-lo Então, vamos
classificá-lo nesse dado de acordo o tipo
desses dados e
defini-lo como igual a esses dados Portanto, existem duas
maneiras diferentes de
fazer isso e é altamente
recomendável que você faça isso. É claro que, nessa linguagem,
você não precisa, mas especialmente em projetos
muito maiores, isso vai ajudar
um pouco no desempenho, sendo capaz de classificar
todas as coisas de antemão Tudo bem, então o que podemos
fazer aqui é cada classe, neste caso, uma string lá, como você viu quando
eu digitei isso, e ela mudou para uma cor
mais verde Tudo aqui tem
um caso diferente. Então, vou criar uma nova variável,
e vou
chamá-la de nome com
N maiúsculo porque todas as letras
minúsculas já foram usadas. Então eu vou dizer que nome é igual, eu quero ir em frente
e colocar meu nome E lembre-se, ainda
queremos classificá-lo. Então, vou usar o operador
Walrus aqui. Então, eu vou
dizer que cólon é igual. Agora, tudo tem um
conjunto de métodos. Então, se eu digitar
meu nome aqui ou variável, e eu fizer um ponto final, você pode ver todas essas coisas
diferentes aparecerem, todas
elas relacionadas a uma string. E o que vamos
ver especificamente
agora é chamado de capitalizar Se entrarmos e apenas colocarmos
o nome em maiúsculas, podemos ver isso concluído Agora é azul. Temos
parênteses abertos e fechados, e nosso erro aqui
desapareceu de onde
esperávamos Agora, se colocarmos essa
declaração impressa e reproduzirmos o que observaremos
em nossa saída, tudo terá maiúsculas
depois de cada espaço Então, mesmo que eu coloque
tudo em minúsculas, como você vê aqui
e a executemos novamente,
você pode ver que ainda Agora, capitalizar é algo
que você deve fazer para coisas como nomes e
títulos, como seria de esperar Agora, com o nome maiúsculo, você pode ficar um pouco convencido
de que isso
transformará tudo em
capital, mas isso não acontece E é aqui que o Python meio que faz isso melhor porque
eles o chamam de título, o que eu acho
mais apropriado Nesse caso. Mas de qualquer forma, você percebe
que é assim que a capitalização funciona. Da mesma forma, podemos transformar
tudo em maiúsculas e minúsculas Então, tudo o que precisamos fazer aqui é, em vez de
chamar capitalize, você pode dizer que podemos fazer
dois sublinhados E se executarmos isso,
teremos todas as capitais. Está faltando um
parêntese, que é o que nosso erro estava nos
dizendo
lá embaixo Agora, se dermos uma olhada, veremos que tudo está em maiúsculas. E se fizéssemos isso
de outra forma, então se tivéssemos todas as letras maiúsculas e tivéssemos sublinhado mais baixo com nossos parênteses abertos e
fechados, agora tudo estará Assim, podemos fazer com que
as coisas sejam capitalizadas. Para coisas como
títulos e nomes. Podemos
transformar tudo em maiúsculas e podemos
transformar tudo em minúsculas. Agora, com cadeias de caracteres,
também podemos adicioná-las e usar algo chamado
podemos usar o que é visto
como um espaço reservado Então, por exemplo,
voltamos aqui. Isso
retornará o
Controle Z ou o Controle Z até que tenhamos
todas as letras minúsculas E digamos, por exemplo, que
queremos imprimir uma saudação Queremos dizer Olá. Bem-vindo à programação, e queremos colocar
o nome aqui. Mas também queremos incluir. Queremos que o nome seja dinâmico. Portanto, talvez não
saibamos qual
é o nome no momento em que
chegarmos ou devemos saber qual é quando
chegarmos a esse ponto. Mas talvez não saibamos
o que é no início. Agora, isso pode ser
porque nosso usuário não inseriu e não nos
disse o que é. Ou é apenas algo que
não temos e que podemos
mudar mais tarde. Mas tudo o que vamos
fazer é usar o sinal de
porcentagem e a letra
minúscula S. Agora, isso é um espaço reservado
para uma string, e tudo o que precisamos fazer é
fora das aspas, mas ainda dentro dos
parênteses, fazemos uma porcentagem
e
podemos digitar o nome da
nossa variável aqui,
que é apenas o nome com
N. E se executarmos isso,
podemos ver que podemos onde essa porcentagem S está com qualquer que seja o valor do nome da nossa variável ou o
valor da nossa variável. Agora, isso muda um pouco. Se você quiser usar
várias variáveis
, vamos continuar e
dizer que crie outra. E diremos, vamos chamar isso de trabalho e definiremos
isso como recurso, e diremos: Olá, bem-vindo à porcentagem de programação
S. Você é uma porcentagem Agora, você pode pensar
que poderíamos fazer outro como esse, ou você pode pensar que apenas fazemos
outra porcentagem de trabalho lá. Mas, na verdade, o que fazemos é
ter nosso sinal de porcentagem aqui e usar colchetes. Agora, aqui dentro, é
aqui que podemos colocar todos os nossos nomes de
variáveis aqui, separados por uma vírgula
na ordem em que
queremos que apareçam Então, se executarmos isso, podemos ver que
tudo está preenchido, e você quer ter
certeza de que preencheu isso
incorretamente porque, novamente, a ordem em que você
preenche aqui é a ordem que será preenchida na frase E, obviamente, isso
não faz sentido. Bem-vindo ao professor do programa. Não parece certo. Então,
tenha isso em mente. Observando também que, se você tem
várias coisas aqui, como se fôssemos
assim, certo? Se tivermos muitas variáveis listadas, tudo bem. Não vamos ter
nenhum problema. A única vez que
teremos um problema é se você
não tiver o suficiente. É aí que nosso
erro vai acontecer, suponho que eles não tenham mais
nenhum erro aqui. O que você vê? Eu sei, aí está simplesmente não
aparecendo como um erro. O que eu esperava. Mas aqui
no console, em vez disso, ele diz que não há argumentos suficientes para
formatar a string ou
para formatar a string. Então, está nos dizendo
que não temos argumentos
suficientes aqui que realmente deveriam ter
aparecido mais como um erro. Mas você pode ver que ele aparece. Basta colocá-los de volta
na ordem correta. Portanto, se você estiver preenchendo
informações, certifique-se de ter informações
suficientes e
preenchê-las na ordem correta. Agora, direi que, alternativamente, você poderia
preencher isso de outra forma. No entanto, ocupa mais espaço,
parece mais confuso, tártaro para ler E com isso, estamos falando sobre fazer basicamente essa adição. Tudo bem, então assim, boom, de novo, para que possamos
fazer algo assim. E veja, você
pode fazer isso dessa maneira, mas parecia um pouco mais problemático ou não
tão bonito, mas você certamente pode
fazer dessa maneira E estou perdendo um espaço
entre lá e aqui. E você verá que, se
imprimirmos
isso, isso
nos dará o mesmo resultado. Então, essas são duas maneiras
diferentes usar suas variáveis
dentro de suas strings. Tudo bem. Então, isso
bastará para cordas. seguir, examinaremos alguns outros tipos de
variáveis.
6. 06 Inteiros e floats: Tudo bem. Hoje, vamos
dar uma olhada nos números, como você provavelmente pode
ver pelo nome do meu script. Aí? Agora, os números na programação podem ser
divididos em duas categorias diferentes. Agora, os números na programação, ou melhor, são usados
na programação para todos os tipos de coisas,
como marcar pontos, diferentes tipos de mecânica de
jogo, algoritmos, visualizar dados
diferentes, algumas das coisas que você
viu são arte ou shaders que podem ter vindo apenas da
matemática Agora, esses números serão
chamados de número inteiro ou flutuante Agora, um flutuador também pode ser
chamado de número real. Então, se você já ouviu alguém
falar sobre números reais, provavelmente está
falando sobre carros alegóricos Vamos
começar com números inteiros. Os números inteiros são um número inteiro. Agora, a classe deles, se você
quiser criar uma variável, digamos BInum, se
você quiser criar
uma variável para isso, um número inteiro, é apenas
reduzida É isso mesmo. E um carro alegórico será classificado da mesma forma que um
flutuador em letras minúsculas Tudo bem. Então, se você quiser
criar uma variável, essas são as duas
maneiras de fazer isso, e eu vou
criar outra aqui só para
tê-las aqui no topo. Então você sempre pode
dar uma olhada nisso. Agora, quando estamos
imprimindo coisas, podemos imprimir números. Então,
se digitarmos cinco aqui e imprimirmos, podemos ver cinco aparecendo
em nosso console. Agora, o que pode ser um pouco diferente é que podemos
realmente fazer matemática aqui. Então, se dissermos cinco, são dez, e talvez queiramos
colocar um espaço lá, torne-o um pouco mais legível Dê uma olhada. Isso vai imprimir nosso total aqui de 15. Portanto, podemos realmente realizar um
subconjunto da matemática dentro desses. E podemos fazer isso
com adição. Podemos fazer isso com a
multiplicação. Podemos fazer isso com subtração. E, claro, podemos fazer isso com divisão, como você pode ver lá. E você vê que a divisão
neste caso nos
deu um depurador, nos
deu um depurador, e isso é porque a divisão de
números inteiros entra em O coração decimal
será descartado. Portanto, isso não acontece de forma desigual. Na verdade, isso nos
devolve um carro alegórico. E como estamos
dividindo dois números inteiros, na verdade não
divulgamos isso para Então, obtivemos zero, mas
não obtivemos nada depois disso. E é isso que esse erro está nos dizendo lá
no depurador E chegaremos a isso quando tocarmos em carros alegóricos
aqui em um momento Mas o que também podemos fazer é apoiar expoentes
e raízes quadradas Por exemplo, podemos fazer P, que nos dá um
número elevado à potência, outra
coisa ou um expoente. Então, se dissermos dois, colocamos um Tama. Como você pode ver,
temos nosso número base
seguido pelo nosso expoente. Se dissermos dois para a
potência, vamos com cinco. Tudo bem? Vamos seguir as regras
dos expoentes, teremos
duas vezes duas vezes duas vezes duas vezes dois Então, isso
nos daria duas vezes dois, que é quatro vezes
dois, que é oito, vezes dois, que é 16, vezes dois é 32. Então, se executarmos isso,
devemos obter 32 como resultado. Lá vamos nós. Então, vemos
que eliminamos expoentes. Da mesma forma, também podemos obter a raiz quadrada de
algo com SQRT e a mesma situação aqui Situação semelhante. Nós
passamos em um número. Nesse caso, faremos com
32. E nós o repassamos. Vamos ver quais tempos em si nos
darão 30 ou sim, quais tempos em si nos
darão 32. Qual é a raiz quadrada disso? E vemos que isso
nos dá uma boia aqui. 5.6 5685, 42, 4942, três,
oito. Esse é um número longo, mas se você multiplicar esse número
por si mesmo ou por ele mesmo, obterá 32 Como você pode ver, demos a ele um
número inteiro e recuperamos um fluxo. E com a raiz quadrada, isso certamente
é possível com expoentes, o que não
acontecerá, a menos, é
claro, que usemos um
flutuador para começar E, como você pode ver, a raiz
quadrada espera uma flutuação
para o primeiro argumento isso que isso está essencialmente sendo
convertido em um flutuador, que seria o
mesmo que fazer 32.0 Nesse caso. Agora, você pode usar qualquer combinação de matemática que quiser aqui, então você pode usar qualquer combinação de usar todas elas juntas. Digamos, por exemplo, que
temos cinco mais parênteses três elevado
a
7/3 e depois subtraímos nove Agora, se estamos
usando a cama Miss, bod Miss PEMDS, seja qual for a
ordem de operação, examinaremos
nossos colchetes ou parênteses Eles são parênteses.
Não sei por que alguns lugares chamam os
colchetes, mas sim parênteses Então, nesse caso,
examinaremos primeiro o interior daqui. Em seguida,
veremos os expoentes. Então, a primeira coisa que
vamos fazer é nossa matemática aqui. Então, três elevado à potência de sete. E então temos que fazer o que está
dentro dos parênteses. Então precisamos
dividi-lo por três, certo? Porque o próximo passo é nossa
multiplicação e divisão. Nesse caso, temos
apenas divisão, então vamos
dividir isso por três. Isso nos deixa agora com
cinco mais nosso resultado aqui, e então subtrair
nove e adicionar
a subtração poderia ser feita ao mesmo tempo, apenas
indo da esquerda para E se você fizer todas essas contas, obterá uma saída de 725 Tudo bem. Então, isso não importa. A ordem em que
fazemos isso bem, a ordem em que digitamos. O pedido será
feito da maneira correta, e podemos misturar e combinar
todas as diferentes. Basicamente, você pode fazer qualquer
fórmula matemática aqui Tudo bem, então agora, quando
olhamos para carros alegóricos, eu disse que tínhamos
cinco menos dez Então, se voltarmos aqui
para essa situação, tivemos cinco menos dez, e fazemos isso e
temos um pequeno depurador,
desculpe, desculpe, E temos um pequeno
depurador dizendo: Ei, esse é o float e
tudo que está zerado
está sendo deixado Bem, e se
quisermos isso? Bem, temos que converter um
desses em um flutuador Então, ou temos que fazer com que
tenhamos um número sólido como esse. Podemos fazer 0,0 em um deles. E você vê agora que podemos realmente
obter nosso número decimal. Ou o que podemos fazer
é fazer pontos, e eles ainda têm isso? Não, eles não têm. Não aparece. Então, o que podemos fazer é simplesmente digitar a palavra lote e colocar um dos nossos números entre
parênteses Isso vai converter
nossos dez em um carro alegórico. Então, podemos fazer
isso dessa maneira também. Se não
soubermos necessariamente qual é o número
que está sendo
inserido, se isso faz sentido. Então, se você tem um usuário
digitando números, você não sabe necessariamente
se será um número inteiro ou flutuante
que o usuário Então, podemos simplesmente
convertê-lo no momento, certo? Então é assim que
resolveríamos esse problema lá. Simplesmente convertemos
um deles em um fluxo. Agora, no código, qualquer número que tenha um
ponto decimal é chamado de fluxo E usamos esse termo
na maioria, se não em todas,
as linguagens de programação,
como mencionei anteriormente, elas podem ser chamadas
de números reais. E todos os idiomas devem ser cuidadosamente projetados para
gerenciar adequadamente esses números decimais Como usuário, é claro,
apenas usando o idioma, você não precisa
se preocupar com a forma como o idioma está lidando com isso. Só saiba que
está sendo tratado. E desde que a linguagem
esteja lidando bem com
isso, você só
precisa se preocupar com isso. Agora, qualquer uma das
expressões matemáticas que já
vimos, também
podemos fazer isso com flutuadores Eles não são exclusivos
dos números inteiros. E como você viu
aqui com nosso 5/10, e convertemos
um em um flutuador, você pode usar números inteiros e flutuantes juntos
ao mesmo tempo
7. 07 Constantes e comentários: Tudo bem. Agora, antes de
prosseguirmos, quero falar sobre uma variável especial
chamada constantes e quero falar
sobre comentários Agora, esses são pequenos tópicos, então vou abordar os
dois aqui em um único vídeo, e isso deve levar apenas
alguns minutos. Uma constante difere
de uma variável. Agora, você se lembra quando eu disse que poderíamos mudar
o que
é uma variável ou podemos mudar seu
valor a qualquer momento. Bem, uma constante é
uma variável especial, e essa
variável especial não pode alterar seu valor depois de definida. Então, uma vez que esse valor é definido, ele nunca pode ser alterado,
e é exatamente o que é. Portanto, se você tentar
alterá-lo mais tarde, devemos encontrar um erro
que aparece em nosso código. E podemos ir em frente e
dar uma olhada nisso. E tudo o que precisamos fazer para criar algo chamado
constante em vez de uma variável típica é
fazer CONST em vez de VAR E como você pode ver,
temos alguns pop-ups aparecendo
lá embaixo. Não se preocupe com isso. Mas podemos ligar
constantemente. E, novamente, se chamarmos isso de MOM, e ver, ainda
temos um erro aqui porque ele espera que eu defina a constante
para alguma coisa Então, se eu definir isso para, digamos, cinco, total é igual a cinco, veja, agora o erro desaparece,
a constante foi Agora, o problema aqui
não é realmente um problema, mas se chegarmos
aqui, tentaremos definir meu número para um número
diferente, vamos ver se o
erro é, é. Aí está. Então
você vê que não pode atribuir um novo valor
a uma constante. É o que está aparecendo lá embaixo. E vemos isso na linha
sete, caractere cinco. Um, dois, três, quatro, cinco, então no final do nome da nossa variável, porque estamos tentando
defini-la no final do nome, o que faz sentido. É assim que você define as coisas aqui. Então, vamos
inventar esse erro. Portanto, você só quer usar
coisas com consentimento
que não devem ser alteradas. Por exemplo, se você estiver criando um
jogo ou aplicativo que tenha uma conexão on-line
entre usuários, provavelmente
definirá isso para uma quantidade máxima de usuários ou uma quantidade máxima de jogadores para cada um
dos seus servidores. Portanto, você só quer usar constantes para coisas
que nunca serão alteradas Passe o tubo de volta para lá novamente, limpe esses problemas
. Agora, um comentário. Um comentário pode ser bom
e ruim. Portanto, eles não são exclusivamente de
uma forma ou de outra. Depende apenas quando você deve ou não usá-los. Agora, os comentários são como pequenas notas que
você pode deixar para si mesmo para explicar o que está acontecendo
no trecho de código, por que você fez algo
de uma maneira específica ou o que mais precisar. Agora, um comentário está realmente
na tela agora, e você o viu
esse tempo todo. comentários podem ser úteis
para qualquer desenvolvedor futuro que precise
examinar um trecho de código que
outra pessoa tenha feito, ou talvez você tenha trabalhado
nele em algum momento e
depois outra pessoa
venha dar uma olhada. E um comentário, como eu disse,
já está na tela, e tem isso você pode
conhecê-lo como um símbolo de hashtag, ou se você for um pouco
mais velho, você pode conhecê-lo como um símbolo de libra E configuramos logo acima onde temos nosso
sublinhado pronto Temos essa hashtag
e ela diz chamada quando o nó entra na
árvore da cena pela primeira vez Agora, isso, como é prefixado
com esse símbolo de hashtag, isso é um comentário
nesse idioma Agora, em alguns idiomas, talvez seja necessário fazer
a barra dupla,
assim, para criar um comentário Mas no script GD, temos apenas nosso pequeno símbolo de
hashtag lá Agora, você também pode usar isso para
comentar uma linha de código. E a razão pela qual podemos fazer isso é porque qualquer coisa
com um comentário que tenha sido comentada será
ignorada quando o código Então, se tivermos uma impressão
e
imprimirmos, lembre-se de que, se tentarmos
isso, ela será
impressa conforme o esperado. Mas também podemos colocar essa
pequena tag de hash aqui, e ela é comentada. Agora é só reclamar
porque não temos nada depois de nossa função
pronta aqui, então vou
colocar o passe de volta lá E você vê que agora ele
não é impresso
porque é ignorado. Agora, se tivermos muito código Talvez estejamos tentando coisas.
Não está funcionando. Quero experimentar alguns
métodos diferentes, mas não
queremos necessariamente nos livrar
da tentativa que já
tentamos. Bem, na verdade, podemos
comentar grandes seções de código com uma tecla de atalho E para fazer isso,
tudo o que precisamos fazer é destacar
todas as partes que você deseja Digamos que queremos isso,
queremos manter o final no começo. Tudo o que precisamos fazer é
destacar essas peças e pressionar Control K. Agora, se você quiser voltar,
isso pode ser Command K, eu sei que eles gostam de usar
comando em vez de controle, eu acredito, para muitos
de seus atalhos Em geral, o Controle
K não funciona. Experimente o Command K. Mas isso é
tudo o que temos que fazer, e isso é
comentar toda a seção Agora, da mesma forma, se
destacarmos todos eles e
pressionarmos o Controle K novamente, podemos descomentar
todos ao mesmo tempo E tudo bem, então há
comentários e como eles funcionam. Posteriormente, falaremos
sobre um código limpo mais perto ou mais perto
do final deste curso, onde falaremos um
pouco mais sobre quando você deve usar comentários e
quando não deve. O que são bons comentários,
o que são comentários ruins. Mas, por enquanto, é isso
que os comentários são, e essas são as
constantes Eu só queria que
você soubesse sobre eles. E vamos seguir em frente. Nos
vemos na próxima.
8. 08 Listas: Tudo bem. Vamos dar uma
olhada em uma lista. Outro nome para
eles também é array ARRAY, mas é mais comumente referido, pelo
menos por minha
experiência como lista. Então, o que é uma lista? Uma lista é um grupo coletado de itens que são colocados em uma ordem
específica, e você pode criar uma
lista que contenha qualquer tipo ou combinação
de dados diferentes. Assim, podemos ter números inteiros, flutuantes
e strings combinados em Agora, sua lista não
precisa estar relacionada. Os elementos não precisam
estar relacionados entre si. No entanto, faria
sentido se fossem. Pense se tivéssemos diferentes
tipos de pizzas, certo? E cada um desses
diferentes tipos de pizza tinha uma lista de coberturas E então eles tinham um outro elemento
aleatório lá. Eles tinham quem o fez ou quem
fez esse tipo específico. Não está realmente relacionado, então você
provavelmente existe uma maneira melhor de
lidar com esse tipo de situação. Mas as listas são indicadas
por seus colchetes, assim como quando estávamos usando nossas variáveis dentro de
nossas cadeias de caracteres com
esses espaços reservados, uma lista é cercada
por E esses colchetes, cada item é
separado por uma vírgula Então, vamos dar uma
olhada em uma lista de mantimentos. Vamos fazer compras.
Temos nossos colchetes e vamos aos tomates Ou, você sabe o que,
vamos ser singulares. Vamos comer tomate, picles. Drop and pãezinhos. Tudo bem, então
se imprimirmos isso,
se imprimirmos esses mantimentos, você verá que
teremos
colchetes colchetes Você provavelmente não quer
os colchetes. Você provavelmente não quer
esse tipo de saída. Talvez você esteja procurando
por um item individual. Bem, vamos dar
uma olhada em como
podemos acessar
itens individuais dessa lista. Para acessar um elemento ou
item na lista, basta informar ao GD Script a posição de índice do
item que estamos procurando Então, se prosseguirmos
e imprimirmos
isso, se fizermos compras, colocaremos um par de
colchetes depois disso, e agora podemos inserir E esses números
realmente começarão em zero. Então, mesmo que contemos um, dois, três, quatro, um computador
vai começar do zero. Então, tomate será zero,
picles um, ketchup
dois e Então, se fizermos compras zero e imprimirmos isso, veremos que vamos
colocar tomate lá Se fizermos uma fileira,
vamos pegar picles. Agora, se ficarmos fora de
ordem, por exemplo, se escolhermos quatro porque
contamos um, dois, três, quatro
itens, pensamos:
Ok, queremos o item número quatro, teremos
um erro porque quatro
seria na verdade o quinto item. Então, o que realmente queremos é três para colocar o
último item lá, ou pãezinhos, se você estiver
recebendo o item errado, apenas certifique-se de escolher o valor do índice e
não o número do item. Já vi algumas
pessoas ficarem
confusas isso ou se
confundirem com essa confusão. Agora, como nesse caso, são sequências de caracteres, podemos usar coisas que
aprendemos antes Então, podemos usar duas maiúsculas, por exemplo, e
obter uma maiúscula. Opa. Aqui vamos nós. Como você pode ver lá.
Também podemos diminuir, capitalizar e tudo Vamos ver, uma vez que
colocarmos isso aqui, obteremos uma
boa lista Mas você pode ver todas
as coisas normais que temos lá
com todas as cordas. Assim, podemos fazer nossa capitalização superior
ou inferior. Agora, e se você quiser manter
tudo em um tipo definido? Então, definir isso para
uma lista como essa seria o equivalente
a fazer isso e configurá-la para uma
matriz, o que é bom. Uma matriz pode conter todos os tipos
diferentes de itens. Mas se você quiser
restringi-lo ainda mais
ou talvez apenas reduzir ou talvez apenas um pouco mais de desempenho, o que podemos fazer quando o
declaramos como uma matriz é, na verdade,
digitá-lo assim Colocamos os colchetes
e, por dentro, declaramos
qual tipo pode estar Então, neste caso, todos os
meus são cordas. Então, vou usar
uma corda para o interior. E o que isso significa aqui, o
elemento de colchetes tight, e depois colchetes novamente, theta tight logo ao lado de
nossa declaração de uma matriz diz ao nosso script ou código que somente uma
string pode estar Então, se colocarmos
um número, um inteiro,
obteremos um erro Então, é assim que podemos
restringir nossa lista a um tipo específico e extrair pouco mais de desempenho, um pouco mais Mas, novamente, a menos que você
trabalhe em algo que seja mais um grande projeto,
provavelmente não notará. Portanto, basta chamá-lo de um array normal ou usar
o Walrus Agora, algo que
eu não mencionei antes é que, quando
olhamos para as cordas, podemos realmente obter o comprimento Então, se obtivermos luz, assim, obteremos o comprimento desse caractere ou daquele item. Então, neste caso, vamos para o
índice três, que é pães. Queremos o comprimento, e
isso nos dará quatro porque temos
quatro caracteres, B, U
e S. Agora, o que é
diferente é uma string. Você também pode acessar o índice
de uma string. Então, se entrássemos
aqui e pedissemos o Índice um, dessa string,
obteríamos a letra U porque cada caractere tem seu próprio índice
dentro da string. Então B é zero, U é um, N é dois e S é três. Então, estamos acessando
o terceiro elemento. Estamos entrando em nossas compras, obtendo o terceiro valor do índice e obtendo o terceiro valor do
índice desse item Espero que isso faça sentido e não seja muito confuso. Mas se você quiser
apenas a frente ou o verso de uma lista
automaticamente, podemos obter o
índice de menos um, e isso sempre nos dará
o último item da lista,
que neste caso, pãezinhos. Mas, como alternativa, também podemos,
em nossa lista de compras, você pode simplesmente colocar um ponto na frente Você recebe o primeiro item,
que seria tomate. Oh. Precisamos de mais um
parêntese lá Podemos chamar dot
front para tomate
e podemos chamar dot Bat. Recebemos o último
item da lista. Portanto, se você não quiser
usar um índice, basta chamar
dot front ou Dot Back se quiser obter o
primeiro ou o último item. Agora, como nesse caso, são todas sequências de caracteres
, lembre-se de que ainda
podemos usá-las
dentro de uma frase Então, vamos dizer, querida, ainda
precisamos pegar alguns, e usaremos nossas porcentagens
e, portanto, nosso jogador . Agora podemos inserir
o que precisamos Então, podemos prosseguir e substituir o primeiro
espaço reservado por mantimentos, e chamaremos Vamos usar o índice dois
e, em seguida, podemos chamar
Let's go with capitalize Agora, se imprimirmos isso, falta um parêntese
no final Vá. Então, agora podemos ver
nossa declaração aqui. Nosso item está sendo inserido e está
sendo capitalizado Portanto, temos
K maiúsculo para começar, o que funcionaria bem se tivéssemos uma lista de
marcas, por exemplo. E, claro, você também pode
fazer isso e preencher vários itens. Tudo bem, então isso serve para ser introduzido nas listas aqui. Continuaremos com mais
alguns recursos
no próximo vídeo.
9. 09 Adicionando e removendo: Tudo bem, continuaremos usando nosso mesmo
script para este, já que ainda estamos
falando sobre listas, e vamos
falar sobre como podemos adicionar,
vamos falar sobre como
podemos adicionar itens à nossa lista Então, para fazer isso, estamos
analisando isso, e a maioria das listas pode ser que a
maioria das listas que
criamos sejam dinâmicas, certo? O que significa que eles
podem ser modificados. Estamos usando variáveis. Não fazemos isso de forma constante. Obviamente, uma constante
não pode ser modificada. E a maioria dos que vamos
criar
serão para zivar, que
serão dinâmicos, que significa que podemos adicionar e remover itens dessa
lista Agora, você pode usar uma
lista para acompanhar quais missões um jogador tem
em um jogo, por exemplo Portanto, você precisa ser
capaz de adicionar novos remover os que
estiverem concluídos. Em termos de dados, podemos usar
uma lista para usuários registrados. Agora, a maneira mais simples de adicionarmos
a uma lista seria
chamar o método append Então, se formos às compras, podemos chamar uma caneta para acrescentar pontos
e, em seguida, tudo o que
digitarmos aqui será adicionado à Então, se continuarmos e adicionarmos, vamos usar
alguns Pringles, Nós digitamos isso. imprimir nossas compras
antes e depois E podemos ver a
diferença antes e depois de ser
adicionada à lista. E você vê que uma caneta vai
adicionar um item à lista e vai
adicioná-lo ao final da lista. Então, isso terminará ou
será adicionado ao final da lista. Agora, usar uma caneta
nos permite adicionar itens de forma fácil e rápida a uma
lista dinâmica, o que é fantástico. E isso significa que também podemos
começar com uma lista vazia. Então, se entrarmos aqui, vou apenas
comentar essa, possamos fazer
a mesma coisa aqui. E vamos
fazer disso uma lista vazia. Agora, se começarmos com
esse Z, podemos começar com algo vazio e adicionar algo a ele. Isso também funcionará. É igualmente fácil. E criar uma lista
como essa é comum, então nem sempre
sabemos os dados que
precisamos adicionar até que o
programa esteja em execução. Às vezes, temos uma lista
definida de opções
e, outras vezes,
talvez adicionemos a uma lista no futuro. Por isso, é sempre bom saber
como podemos adicionar algo a isso. Agora, e se
quisermos inserir em uma lista? Não queremos
adicioná-lo ao final, mas
queremos inseri-lo nele. Bem, em vez de adicionar
um item em uma lista, talvez
precisemos inserir
um item em uma lista. E para inserir um
item em uma lista
, são necessários dois parâmetros. E isso significa apenas duas
coisas que ignoramos. Então, quando fizemos uma caneta e
colocamos um item aqui, isso seria um parâmetro. E quando inserimos um
item, serão necessários dois
desses parâmetros. Então, voltando à
nossa lista antiga aqui novamente, basta confirmar isso. Lá vamos nós. E a posição da primeira
é a primeira posição e a
segunda o valor. Então, vamos prosseguir e chamar insert
aqui, e podemos ver. A primeira coisa que
colocamos é a posição. Então, digamos que
queremos colocá-lo na posição dois, no índice dois. Então, agora, o índice
dois é ketchup. Então, queremos colocar algo entre picles e ketchup Então, vamos comer picles,
nosso novo item, e depois ketchup Então, depois de colocarmos nosso
índice, colocamos um coma e inserimos nossa nova
variável, desculpe, nosso novo item, que
vou usar Pringles novamente E se imprimirmos isso, podemos ver pringles foi colocado entre os
picles Fui inserido como
índice número dois. Portanto, não só podemos
adicionar ao final, mas podemos inserir um item em um ponto
específico da nossa lista. Agora, quando um novo item
é inserido em uma lista em nossa posição de caixa, um de nossos itens é
colocado entre, bem, no nosso caso, dois e três, e temos um item totalmente novo. Fantástico. Agora, o fato de podermos adicionar à lista e
inserir em uma lista é ótimo. Mas e se precisarmos remover
um item da sua lista? Bem, podemos fazer isso facilmente. Tudo o que temos que fazer é chamar
dot remove e, neste caso, com o novo sistema aqui, trata-se de remover em E vamos em frente e
aprovamos o índice, certo? Então, se passarmos em dois
agora, passaremos em dois. Isso vai remover o ketchup, então vamos comer apenas
tomate, picles Isso é o que devemos ter
quando executamos isso agora. Então aí está. Removemos
o item no índice dois. Portanto, remover itens é bem
simples, como você pode ver lá. Agora, haverá casos em que
você
desejará que
você
desejará obter um item e removê-lo
ao mesmo tempo. E poderíamos fazer isso em
várias linhas de código, mas não precisamos porque podemos
realmente mostrar isso. E eu digo pop porque esse é o nome desses dois métodos que
vamos aprender aqui, que são pop
front e pop back. Então, se colocarmos Pop, underscore, front, e você ver quando
imprimirmos mantimentos aqui novamente, o primeiro item
vai faltar Mas isso, na verdade,
não apenas o
remove, como
remover, remove o que acabamos de fazer. Mas isso também retorna
o item frontal. Então, se armazenássemos
isso em uma variável e chamássemos
esse item, isso na verdade
retornaria isso, e o primeiro item da nossa lista, que será nosso tomate que será removido, será
atribuído ao item. Então, se
imprimirmos o item depois, vamos pegar aquele tomate. E é o mesmo conceito. Se sairmos da parte de trás, pegaremos o último
item, que serão pães. Portanto, os itens serão iguais aos pães. Tudo bem, então ele vai
gritar com a gente lá Então, o que você gostaria que fizéssemos é porque isso não pode
sugerir qual é o tipo, teríamos que
declará-lo manualmente desta forma Portanto, há algumas
situações em que você não
conseguirá usar essa declaração
inferida automática E você terá que
fazer isso sozinho. Esse é um daqueles poucos
casos em que você precisaria se
optasse por seguir esse caminho, o que provavelmente deveria. Novamente, apenas algo
para se acostumar. Dessa forma, você sempre pode obter o máximo desempenho
possível. Dessa forma, se você reduzir a quantidade
de otimização necessária posteriormente E a última coisa que
vamos dar uma
olhada neste vídeo é
como podemos apagar um item, mesmo que não saibamos ou onde esse item está em nossa lista Se eu simplesmente voltarmos a imprimir nossas
compras novamente, e não precisaremos mais dessa
variável O que vamos fazer
é chamar eras de pontos. E para isso, podemos
simplesmente digitar o valor. Então, podemos entrar
e dizer Keto. Agora, lembre-se de que isso diferencia
maiúsculas de minúsculas quando se
trata de molas. Portanto, um K minúsculo
não será o
mesmo que um Porém, para nós, parece o mesmo, ou nós o
consideraríamos o mesmo. No código, há duas coisas
completamente diferentes. Então, se chamarmos apagar e apenas
passarmos o valor real, podemos entrar e ver
que será apagado, não importa onde esteja em nossa linha Agora, você pode pensar: e se
tivermos vários valores iguais e chamarmos de apagar Bem, ele só
vai excluir ou apagar a primeira instância
que encontrar, então vai passar
e dizer: isso
corresponde ao que
estamos procurando Não. É isso, não. Isso é Sim e exclua. E isso vai
parar por aí. Portanto, se você quisesse apagar vários, teria que continuar lendo no momento atual Aprenderemos uma maneira melhor
se você quiser apagar todas as instâncias de
um valor específico Mas, por enquanto, ele
removerá apenas um item. Tudo bem,
isso bastará para a
aula de hoje ou para esta aula. Temos um
pouco mais a aprender sobre as listas antes de prosseguirmos. Então, mais uma aula chegando.
10. 10. Empurrando e classificando: Agora, em nossa
aula final sobre listas, veremos os métodos push e como podemos organizar nossa lista e obter
o tamanho de nossa lista. O método push,
existem dois deles. Eles nos permitem alterar
o conteúdo da lista. Há empurrar para frente
e empurrar para trás. Ambos aceitam um argumento
e isso é um valor. Agora, ao usar push front, nosso valor é adicionado
ao início da lista, como se você
usasse insert no índice zero. Da mesma forma, quando usamos push back, nosso valor é adicionado
ao final da lista, assim como quando usamos append Então, se dermos uma
olhada nisso, podemos pegar nossas compras
e usar o push front, e adicionaremos nossos Pringles E se dermos uma
olhada nisso agora, teremos os pringles colocados
no início da nossa lista Da mesma forma, poderíamos usar o push back para enviá-lo
para o final da nossa lista. Agora, pessoalmente,
geralmente
acabo usando uma caneta quando quero
no final da lista Mas temos a alternativa de empurrá-lo
para trás, é claro, empurrar para frente em vez
de inserir no deck zero Os métodos push
são muito simples. Não é um conceito novo. São apenas mais dois
métodos que você pode considerar uma forma
alternativa de fazer isso. Agora, quando se trata de
organizar nossa lista, você pode ver que, na maioria dos casos, nossas listas são criadas em
uma ordem imprevisível medida que nosso programa é executado e à
medida que adicionamos coisas a ele E nem sempre é possível
controlar essa ordem, especialmente se o usuário inserir vários itens. E por causa disso, o
problema se torna inevitável, na verdade. Mas estamos com sorte. Dentro do GD Script, podemos classificar nossa lista usando um
método simples chamado SRT Agora, o SRT começará a
classificar nossa lista em ordem
alfabética, e isso também conta para
números Vai ficar na
ordem dos nossos números. Agora, vale a pena saber
que os números são incluídos aqui em outros idiomas, ter números como uma lista
que contém um, três e 025 ou 025 seria classificado na ordem
de 1025 e três, enquanto na escrita GD aqui 025 e 25 são lidos exatamente como
o mesmo número, permitindo que nossa classificação seja
um pouco
mais precisa do que Tudo bem, então vamos dar
uma olhada se executamos o sort e depois imprimimos novamente. Depois, podemos
dar uma olhada e ver
a aparência normal, e então temos uma aparência ordenada
que entra em ação aqui Agora, isso também
ocorre com nossos números. Então, o que acontece se tivermos números como esse
em execução e tentarmos classificar. Bem, veja, vamos
encontrar o erro aqui. Porque não é realmente compatível com a
classificação que resolvemos Então, o que
precisaríamos nesse caso é que pudéssemos ter
duas listas separadas aqui. Vamos chamar isso de numbs. Vamos fazer nosso um,
95, três, 287. E se resolvermos este, podemos ver que todos os nossos
números serão classificados exatamente como
esperaríamos em ordem Então, um, dois, três, 87, 95. Portanto, podemos classificar uma lista de números e podemos classificar
uma lista de sequências, mas não podemos classificar uma lista
que tenha números e cadeias Então, precisamos de uma lista que seja
uma ou outra. Se temos uma lista que contém os dois, então
temos um problema acontecendo. Só temos que aceitar o fato de que
não somos capazes de classificá-lo, e talvez devêssemos
voltar e repensar como estamos organizando nossas
listas de que precisamos Agora, o que também temos aqui é que podemos dar uma
olhada no tamanho de uma lista. Agora, comprimento quando
obtemos o comprimento, isso na verdade
nos fará retornar um número para nós. E quando se trata de uma lista, na verdade
ela é chamada de tamanho. Então, se
imprimirmos
o tamanho aqui, veremos que obteremos
um número. Neste caso, está nos dizendo cinco. Agora lembre-se,
temos índice zero, um, dois, três, quatro, mas a quantidade de
itens que temos é um, dois, três, quatro, cinco. E como isso é
devolvido para nós, podemos realmente armazenar
isso em uma variável e a chamaremos de List. Provavelmente deveríamos
chamá-lo de tamanho da lista. Mas aqui vamos nós. E então, é
claro, é como qualquer
outra variável, e podemos prosseguir
e simplesmente chamá-la. Se você precisar obter o tamanho de uma lista por qualquer
motivo, e houver alguns
motivos pelos quais você encontrará
em sua
jornada, você
precisará em sua
jornada, você
precisará saber o tamanho da
lista e, ao mesmo tempo, sua lista
pode mudar dinamicamente, tudo
bem, então isso abrange
tudo o que vamos ver aqui com Então, agora terminamos com a lista e vamos seguir em frente. Ainda vamos
usar nossas listas, mas abordaremos um tópico
completamente diferente agora ou na próxima lição. Tudo bem. Cuide-se. E se você precisar
voltar, revise isso. A seção da lista aqui tinha
muitas coisas para analisar.
11. 11 for Loop: Agora que sabemos como
criar nossa lista, editá-la, adicioná-la, removê-la e
tirar itens específicos da nossa lista. Agora podemos dar uma
olhada em outro conjunto de recursos, outro termo básico de codificação, vamos falar sobre o que é chamado de quatro loops Agora, muitas vezes
você pode precisar
realizar a mesma ação em
todos os itens da sua lista Por exemplo, se quiséssemos
listar todos os nossos itens, precisaríamos entrar e imprimir todas essas coisas,
certo? Então, vamos em frente. Entre, compras, e
vamos precisar do índice zero, e vamos copiar isso Um, dois, três, e
podemos remover esse editor. Eles dirão índice um,
índice dois e índice três. Então, normalmente,
teríamos que
fazer algo assim se
quiséssemos listar todos eles. Agora, isso é cansativo. É desnecessário ou
ocupa desnecessariamente muito espaço. No momento em que
examinamos todos eles
e, honestamente,
analisando o código, não
é um código muito atraente, vendo a mesma coisa acontecendo
repetidamente Mas quando você deseja
realizar a mesma ação em cada item dentro de uma lista, usamos o que é
chamado de loop for. Então, olhando nossa lista de
compras lá em cima, podemos ver que
ela está cheia de itens
e, se adicionarmos alguma coisa a ela, teremos que adicionar
outra declaração impressa, outra, outra Sempre que o
removermos, teremos que
retirar ou excluir
linhas de lá É um incômodo, é
chato de manter. Mas somos capazes de automatizar esse processo dentro desses
quatro ciclos Então, se quisermos
imprimir as coisas exatamente como estamos
vendo aqui, tudo o que precisamos fazer é
comentar isso bem rápido. Como dizemos, ou, e você percebe que isso
vai mudar cor. Temos uma palavra-chave aqui. E o próximo item
aqui é que você pode usar muito bem qualquer variável
que quiser usar aqui. Este é completamente novo. Se você quiser fazer algo para ajudá-lo a manter as coisas claras, você pode usar item, mas uma abreviatura popular é usar apenas I and
I significa Agora, falamos sobre
variáveis e como seu nome deve
falar com a pessoa Você deve saber exatamente o que
é ao olhar para ela. E tornou-se uma
prática comum usar I
para representar o item que,
uma vez que você comece a codificar, você
reconhecerá o que é isso Além disso, se uma variável
for
usada apenas em um ponto, como neste único loop, não há problema em
encurtar sua variável dessa forma Mas continuando, então temos quatro, temos uma variável para representar nossos itens até quatro
I ou quatro itens,
dizemos N, mantimentos E o que isso quer dizer
é que toda vez que
analisarmos e fizermos qualquer bloco
de código que escrevermos aqui, eu serei
igual a tomate, depois
serei igual a picles, depois serei ketchup
e depois serei e depois serei Então, no final do nosso loop for, podemos colocar dois pontos, entrar com a cabeça e
descer até a próxima linha Agora, você percebe como
agora estamos recuados em dois níveis. É a primeira vez que precisamos
indentar um novo nível, então certifique-se de que seu
recuo Ao programar em algumas linguagens, eles usam colchetes, mas em linguagens como
Python e GD script, eles usam colchetes,
mas em linguagens como
Python e GD script,
usamos o método de indentação. E já vi
algumas pessoas apresentarem erros ou
me dizerem que algo não está funcionando quando o
problema acaba sendo que elas não estão recuadas
o suficiente ou ainda estão
recuadas e depois voltam para trás e saem Então, fique de olho nisso. E vamos embora. Então, para
itens em mantimentos Tudo o que queremos fazer é
imprimir nossas compras, Só queremos imprimir esse item. E é isso. Isso é
tudo que temos que fazer, imprimir, passar I para o item. Isso é tudo o que temos que fazer,
e vamos obter o mesmo resultado que você vê aqui, agora, a diferença
é que podemos seguir em frente e adicionar
quantos itens quisermos a essa lista. Então, podemos entrar
e sair assim. Novamente, você vê quantos itens que temos começam a
ficar ridículos E isso acontece quando começamos a adicionar ou acrescentar mais
itens à nossa lista E veja, eu não preciso
mudar meu código,
e todos eles são impressos. Não tem problema. O mesmo que se
tivéssemos que deletar todos eles. E desça para dois de
repente. Só temos esses
dois impressos, não
temos problemas. voltássemos com essa configuração de impressão, Se
voltássemos com essa configuração de impressão, teremos problemas
porque, neste momento, quando tínhamos todos
esses itens lá, teríamos que
entrar e criar um monte de mais declarações impressas ou o que
quiséssemos fazer com cada entrada. E agora que estamos
reduzidos a duas,
teríamos que entrar e modificar nosso código e remover as duas
últimas linhas aqui. Então, sempre que você quiser executar o mesmo código em vários
itens dentro de uma lista, usaremos
quatro loops para isso. Tudo bem Então, espero
que esteja claro Dentro de nossos quatro loops, nosso primeiro item aqui
é uma variável, comumente chamada de I, mas você pode fazer o
que quiser. Suportes para itens. Então, para cada item na mercearia, vamos imprimir esse Então, eu vou ser
igual ao tomate. E então, uma vez que
o imprimimos, eu vou seguir
em frente e virar picles, e
então vamos imprimi-lo, e então ele passa para
o próximo item e assim por
diante . Apenas confirme isso aqui. Lá vamos nós. Agora, e se quisermos fazer alguma coisa após a conclusão desses quatro ciclos? Bem, vamos pressionar
Enter para descer
para a próxima linha. E você vê como
ainda temos duas linhas recuadas. Bem, o que podemos fazer é
segurar a tecla Shift e apertar a tecla tab para, eu acho, sair, certo? Voltamos um nível, ou você pode simplesmente
apertar a tecla de volta à base uma vez e
também devolveremos um. E agora você pode
ver que o quilate aqui está alinhado
com os quatro laços Isso significa que estamos fora disso. Então, podemos
imprimir agora e dizer, quatro voltas concluídas, e veremos que isso
só
acontecerá depois que
todo o resto tiver sido impresso. Então, se você quiser fazer algo
fora dos quatro circuitos, certifique-se de puxar o
recuo um
pouco para trás Agora, para ajudá-lo a evitar erros, certifique-se de que tudo o
que eu estava dizendo, como eu disse anteriormente,
tenha certeza de que sua ortografia está
correta para as coisas G maiúsculo para mantimentos e
G minúsculo para mantimentos. Mas para nós, eles são
a mesma coisa. Ambos são mantimentos. Eles são, no que diz respeito ao
código, dois itens muito diferentes ou duas
variáveis diferentes neste caso, e o mesmo acontece com o nosso I. Então, dizemos quatro I para I minúsculo, não
podemos imprimir em maiúsculo I. Ele não vai
saber o que E teremos
erros a partir daí. E então, é claro, nossos níveis de
indentação que
acabamos de examinar. Tudo bem? Então, isso completa isso no que
diz respeito aos quatro ciclos
básicos e seus princípios Agora, você pode fazer a
mesma coisa se
tivéssemos um conjunto de números aqui. Se fôssemos entrar
aqui, você pode entrar. Basta colocar um monte de
números. Oh, esse mínimo. Então, agora, quando fazemos
para I e mínimo, I representará
os números três e
depois 675 e depois 23 67 Então, como agora temos números, também
podemos fazer matemática com isso, então podemos dizer I mais 100. Mantenha as coisas simples.
E lá vamos nós. Agora podemos ver impressos 103, 775, 123 e 167 E, em seguida, nossa
declaração impressa informando que os quatro ciclos
foram concluídos. Então, se você não tem uma corda e tem
algo parecido, você pode fazer algumas
contas. Você tem números. Obviamente, com strings,
se você realmente quiser, pode
inseri-las em um espaço reservado, se for isso que você
quiser fazer repetidamente Tudo bem Então, isso dá uma rápida olhada que é um loop de quatro
e como podemos usá-lo.
12. Alcance 12: Algo com o qual podemos
usar um loop de quatro. Normalmente, quando queremos fazer algo, talvez um
determinado número de vezes, mas não precisamos de uma lista. Não queremos examinar
um determinado número de listas ou itens, só
queremos fazer algo uma determinada quantidade de vezes. Bem, é aqui que coisas
como alcance entram em jogo. Agora podemos usar o intervalo para obter todos os números entre um conjunto
de valores, se quisermos. E isso exigiria
alguns argumentos apresentados. Se dermos uma olhada no alcance, podemos ver que, bem, neste caso, tem apenas
três pontos no momento Mas o primeiro argumento
será o número mais baixo. Então, se eu disser dez, então isso requer um
segundo argumento, que seria o
número mais alto, então digamos 20. Então, isso nos daria um intervalo 10 a 20,
então vamos imprimir isso
na forma de, digamos, 44,
digamos , N para o número
quatro N no intervalo E vamos imprimir N
e ver o que obtemos. Bem, se olharmos para isso,
vemos que temos dez, 11, 12, 13, 14, 15, 16, 17, 18 e 19. Então você não obtém o último número impresso aqui
porque quando chegamos lá, se você pode imaginar,
se N fosse igual a 20 e 20 não fosse 10-20 É 20. Portanto, ele não é impresso e
os quatro laços terminam. Agora, da mesma forma, podemos entrar
aqui e colocar um intervalo de e se colocarmos um intervalo de apenas 20?
Nós imprimimos isso? O que obtemos? Bem,
temos a mesma coisa. Só subimos até 19, mas
estamos começando do zero. Então, se eu quisesse fazer
algo 20 vezes, eu poderia colocar o número
20, e isso aconteceria. É só porque
estamos começando com nosso índice em zero, começando a contar a partir de zero
e não contando a partir de um. Então, usando isso, podemos
percorrer um determinado intervalo de
números de zero a um número ou todos os
números entre um intervalo definido. Agora, você pode fazer isso se quiser repetir
uma ação específica. Você pode fazer isso se
quiser ou
percorrê-lo com base no tamanho da
sua lista, certo? Porque sabemos como
obter o tamanho
disso agora chamando size. Qualquer coisa que possa devolver um número, podemos
conectá-la aqui. Na verdade, tudo o que o intervalo serve
é
nos dar todos os números dentro de um anel definido e, em seguida, o loop de quatro
nos faz passar. Então, uma coisa que podemos fazer
com isso é,
por exemplo , dar uma olhada e imprimir, ou melhor, criar uma variável. Podemos criar uma lista
totalmente nova aqui. Então, chamaremos esse quadrado e definiremos isso como
uma lista vazia. E o que poderíamos fazer
é então fazer caneta
quadrada para que possamos
adicionar à nossa lista. E o que
vamos adicionar
seria um valor exponencial Então, queremos adicionar todos
os números quadrados. Então, os números de 0 a 20 estão todos ao quadrado. Então, colocaríamos isso em
um Posh do expoents. Então eu vou dizer N para qualquer
número que temos aqui. Com o poder de dois. E
queremos imprimir o interior? Não, vamos imprimir do lado de fora. Vamos imprimir um quadrado. Tudo bem. Portanto, temos uma lista
vazia para começar. Vamos examinar
cada número de 0 a 20
e vamos para o quadrado Então, vamos
dizer zero ao quadrado. O que quer que isso
seja igual é o que
vamos adicionar a essa Vai dizer que um quadrado,
que é igual a entrar,
dois quadrados entrarão, três ao quadrado e assim por diante Então, se dermos uma
olhada em nossa lista agora, você pode ver que temos
zero, um, quatro, nove ,
16, 25,
etc até 361 Portanto, o intervalo é uma forma de adicionar alguns números em uma lista ou criar uma lista com base em algo
que já existe. Portanto, valor preexistente. Tudo bem. Então, isso é tudo o que
podemos realmente fazer com isso. Portanto, há quatro loops e como podemos
usá-los em uma lista com uma lista E há quatro loops e
como os usamos com intervalo para repetir um conjunto de instruções ou um trecho de código por
um determinado número de vezes
13. igualdade: Ah, o cerne de cada cheque. Portanto, uma parte muito importante aqui codificação
será a declaração if E esse é o tipo de coisa que enfrentaríamos na vida
cotidiana, onde
verificamos se isso acontece
e depois fazemos isso. Caso contrário, fazemos isso, certo? Então, por exemplo, basta usar
seu computador lá. Se você estiver no editor, se pressionar K, colocamos K na tela. Certo? Se clicarmos em backspace, excluiremos o caractere
anterior Essa é a ideia geral de
como uma declaração if funciona. Agora, uma declaração if está sempre verificando se
algo é verdadeiro, certo? Então, se pressionarmos K, o que fizemos, pressionamos, o que
significa que agora é verdade. Então, sua resposta foi
colocar K na tela. Então, para obter essas verificações, temos que usar declarações if com o que é chamado
de verificação de igualdade. Agora, uma
verificação de igualdade é basicamente verificar se dois itens são iguais. E podemos verificar se dois
itens são iguais, com facilidade. Entramos e fazemos uma impressão. Podemos dizer que cinco
é igual a cinco, certo? Podemos fazer isso e,
se a
imprimirmos, obteremos
a palavra verdadeiro. Agora, lembre-se de que, quando
fizermos uma verificação de igualdade, esse
será um sinal de dois iguais, duplo de igualdade Então, se cinco é igual a cinco, então se cinco e cinco são iguais, vamos
passar. Agora, se verificarmos se
cinco é igual a seis, vamos ficar
falsos porque cinco e seis não são a mesma coisa. São
duas coisas diferentes. E isso também conta com a
impressão. Isso remonta às nossas
declarações anteriores. Então, se tivermos tomate com maiúscula e verificarmos se isso é equivalente a tomate com minúscula e
imprimirmos isso,
você verá que vamos ficar falsos porque, para nós, a mesma palavra
porque um tem
T maiúsculo e o outro é minúsculo,
vê isso como duas vê isso como Então, ambos teriam que
estar em maiúsculas para serem verdadeiros. Então, isso é tudo que a verificação de
igualdade é. É verificar se isso é verdade ou se essas duas coisas são iguais, então
podemos fazer alguma coisa. Então, vamos
começar, certo? Podemos dizer se, e
então você pode digitar. Então, se fizermos nossos tomates novamente, tomate. O dobro é igual a tomate. E então
terminamos com dois pontos e entramos para ir para
a próxima linha Então, agora estamos recuados em um bloco. Então, tudo o que colocarmos
aqui vai acontecer
se esses dois forem verdadeiros, certo? Se essa condição for
verdadeira, nós fazemos isso. O que vamos fazer
é imprimir uma string. Esses dois são verdadeiros. Então, se
fôssemos imprimir isso, começaríamos e
notamos que não é impresso
porque, à medida que examinamos, T e T minúsculo fazem a diferença, então não
são verdadeiros Mas se adicionarmos o apt T
lá, esse
bloco recuado será executado Como você vê, esses dois são
verdadeiros agora estão impressos. Agora, além da verificação de
igualdade, também
podemos fazer uma verificação de
desigualdade E no caso deste ano, que temos uma maiúscula
e uma minúscula,
lembre-se, podemos usar duas minúsculas lembre-se, podemos usar Então, neste caso, se quisermos ver se esses
dois são iguais, podemos dizer que se tomate maiúsculo
é igual a tomate minúsculo
ponto maiúsculo ou verdadeiro, que seria porque coloca primeira letra em
maiúscula, então esses dois
voltarão Agora, alternativamente, o que essa alternativa, porém podemos fazer é
usar a desigualdade E com isso, podemos
fazer pontos de exclamação iguais. E isso significa que não é igual. Portanto, o
ponto de exclamação significa que não. Então, se tomate, não tomate é igual, o que significa que estamos verificando
se essas duas coisas são diferentes, então é verdade, e entramos e
entramos em nosso trecho de código
aqui, ou bloco recuado Agora, alternativamente,
o que poderíamos fazer é digitar no
início a palavra, não. Então, se não, tomate é igual a tomate. E isso nos daria
a mesma coisa que dizer, eu tomate não é igual Portanto, você pode
escrever a palavra ou usar o ponto de exclamação antes dos iguais, se
quiser verificar Muitas vezes
vamos
verificar se duas coisas não são iguais uma à outra
para conseguir coisas diferentes. Agora, analisamos isso um
pouco com números. Mas o que podemos fazer é
realmente avançar para, se você se lembra, na matemática, onde tínhamos
mais e
menos do que isso que
precisávamos verificar e usar. Também podemos usar isso aqui
no código. Então, podemos dizer, por exemplo, se voltarmos para
nossos cinco iguais a seis e imprimirmos iguais? Cinco é igual a seis?
Não, claro que não. Mas podemos perguntar se cinco é
menor ou igual a seis. E então podemos obter
nossa pílula bloqueadora, que obviamente diz igual, o que é verdade, que
funciona para
torná-la um pouco mais
precisa, certo torná-la um pouco mais
precisa, Então, se cinco for menor que
seis, menor ou igual a. Observe isso. Então, poderia
ser seis em comparação com seis, e ainda assim
voltaria a ser verdade. Por outro lado, se tivéssemos apenas
o sinal menor que, ele voltaria
falso porque seis não é menor que seis, seis é seis. Portanto, podemos usar menor que,
menor que ou igual a, maior que, leitor
que ou igual a, igual a e não igual a. Eu sei que há muitos sinais e símbolos de igualdade
para você lembrar, mas espero que você possa manter esse tipo de verificação
na nuca E podemos usar o s
para
dizer, digamos que alguém vá
à loja e
queira comprar álcool. Digamos que seja 19 anos para quem
tem idade para comprar álcool. E, obviamente, você vai
ter que mostrar sua identidade, provar sua idade, certo? E se
codificássemos esse cenário, o caixa examinaria
o ID e
realizaria uma verificação de igualdade Eles vão ver se
a pessoa na frente
deles tem 19 anos ou mais, maior ou igual a 19, então voltaremos como verdadeiros e realizaremos a venda. Se eles voltassem
como se fossem menores, certo? Então, se esse cheque
voltasse como falso, obviamente, você
não o venderia para eles. E esse é o tipo de caminho que eu sei que alguns
desses jogadores também
seguiram com
os videogames. Então, se um jogo é
classificado como M para adultos, isso é, eu acredito, uma classificação de 17. E então vamos
verificar se a pessoa
tem 17 anos ou mais,
maior ou igual a 17, vender o jogo, se
não, recusar a venda. Então, esses são dois exemplos de como esse tipo de verificação de if e de igualdade se traduzem,
tipo , na vida real nessas situações do mundo
real. Então, agora que
cobrimos uma, também podemos cobrir duas
condições ao mesmo tempo. Então, podemos dizer que eu seis
é menor que seis, e outra coisa a dizer, e cinco é maior que dois, então sabemos que um
deles é verdadeiro, certo? Sabemos que seis não é
menor que seis, mas sabemos que cinco é
definitivamente maior que dois. Então, se
imprimirmos isso, veremos que não
volta a ser verdade, nada acontece. Não chegamos a esse quarteirão. E a razão para isso
é porque
essas duas afirmações precisam ser
verdadeiras porque estamos usando e. Então essa peça precisa ser verdadeira, e essa peça precisa ser verdadeira. Então, se mudássemos
isso para cinco, deveríamos dizer que se cinco é
menor que seis e cinco é
maior que dois, isso se torna verdadeiro. Portanto, você pode ter
várias condições e não precisa
parar em duas, certo? Você pode entrar e adicionar uma terceira condição, uma quarta condição,
uma quinta condição. Você provavelmente não deveria, uma vez que
temos tantas
condições em andamento, mas a questão
é que você poderia. Você pode ter quantas
condições quiser. Agora, o que também podemos fazer
é não precisar verificar se uma delas
muda Baca seis, menos de seis, não precisamos
verificar se ambas são verdadeiras Podemos usar o operador or. E isso verificará
basicamente se isso é verdade ou isso é verdade. condição um é verdadeira ou a
condição dois é verdadeira, então avançamos dentro
do nosso bloco de código. Então, só precisamos
que uma instância seja verdadeira quando usamos O. Precisamos que todas
as instâncias sejam verdadeiras quando usamos e. Agora, o importante
é que, se você não quiser escrever as palavras
e, além disso,
podemos usar dois canais verticais para
representar ou podemos usar
dois
e comerciais para
representar a palavra. Então, seja qual for o caminho que
você seguir,
novamente, será uma preferência
pessoal,
se você usar os sinais comerciais ou os canos ou os
aprisands podemos usar dois canais verticais para
representar ou podemos usar
dois representar ou podemos usar e comerciais para
representar a palavra. Então, seja qual for o caminho que
você seguir,
novamente, será uma preferência
pessoal, novamente, será uma preferência
pessoal, e canos ou apenas escrever as palavras
e, além disso,
podemos usar dois canais verticais para
representar ou podemos usar
dois
e comerciais para
representar a palavra. Então, seja qual for o caminho que
você seguir,
novamente, será uma preferência
pessoal,
se você usar os sinais comerciais ou os canos ou os
aprisands e canos ou apenas
escrevendo a palavra. Isso não vai
mudar nada. E, até onde eu sei, isso não afeta o
desempenho de forma alguma. São apenas duas opções de
fazer a mesma coisa. Então, em última análise, eles retornam
como verdadeiros ou falsos. Então, em última análise, é com isso que
estamos lidando, certo? Então, estamos basicamente
verificando se é verdade. Então, se isso for verdade, claro que
imprimimos, certo? Em última análise,
é isso que estamos fazendo. Mas quando estamos fazendo
as verificações de desigualdade, estamos verificando se
algo é falso, certo? Então, estamos dizendo que se
não são, se não são iguais, então isso é verdade, e
entramos em nosso blog. Tudo bem. Espero que isso tenha
feito sentido lá. Havia muitas coisas para fazer malabarismos lá
dentro Se você estiver um pouco confuso,
volte e assista novamente. Mas isso bastará para
nossas verificações de igualdade, verificações desigualdade Um booleano é apenas
o resultado aqui, seja verdadeiro ou falso E vamos ver, isso
abrange que também examinamos várias condições
por e ou por meio do uso de ou. E comparamos
números. Temos maior que menos que
igual ou não igual a. Passamos muito por aqui. Então, farei isso nesta seção
e prosseguiremos, continuando nossas
declarações de I aqui.
14. 14 If Elif else: Tudo bem Então, abordamos brevemente
as declarações se porque precisávamos,
para usar as qualidades, verificações de
igualdade, verificações de desigualdade
e tudo Então, vamos nos aprofundar um pouco
mais na declaração I. Agora, com as declarações I, você notará que na seção
condicional que estávamos examinando, começamos nosso código com I, claro, porque queremos
verificar se algo é verdadeiro Então,
a declaração if diz: isso for verdade,
continue e entre no meu bloco de código. Então, agora, essa é uma
condicional que diz se algo é verdadeiro
ou falso, essencialmente, e muito bem sempre
segue ou é sempre seguido pela palavra-chave I. Acho que escrevi isso de forma
um pouco estranha. Nosso cheque sempre vem
depois da palavra-chave I. Assim como ao verificar
se várias
condições são verdadeiras, podemos usar isso em
nossas declarações if, como verificamos com
strings anteriormente. Mas uma das principais diferenças
é que é um bloco de
instruções if que pode ficar um pouco complicado quando temos
várias verificações que são usadas, como você viu quando
poderíamos colocar
e, e poderíamos continuar adicionando mais e mais condicionais e poderíamos usar
Os para continuar Praticamente, temos
uma quantidade ilimitada de condições que
podemos verificar. E podemos usar condição, qualquer condicional
com declaração I. Então, se olharmos para a simples afirmação
if, como
fizemos antes, dissemos: Se tomate é igual a tomate, então diríamos que
é verdade, certo Desde que ambos
estivessem escritos exatamente da mesma forma com
letras maiúsculas e tudo mais. Mas e se
quisermos pegar tudo, certo? E se quisermos, vamos ver. Vamos criar uma
variável chamada NUM. Vamos defini-lo igual a seis. Diremos que, se eu estiver pronto, diremos se num for
maior ou igual a seis. Certo. Diga dois pontos e diremos,
vá em frente e imprima lá Ha, é maior. E se prosseguirmos
e
imprimirmos isso , veremos: Ok, é ele
que volta. É maior
ou igual a seis. No entanto, se dissermos
que
é maior ou igual a sete,
nada vai funcionar. Mas, em alguns casos, você pode querer que algo
aconteça como resultado. E é aí que
entra o bloco else . Eu só
vou diminuir isso. Caso contrário, seguido
por dois pontos, é tudo o que
temos que colocar lá Estamos dizendo que se todas as
verificações acima forem falsas, nenhuma delas for verdadeira, o bloco else
cuidará disso. Então, podemos vir
aqui e imprimir isso, eu tenho um espaço lá, digamos, isso não é maior. E podemos ir em frente
e receber nossos cheques. Então, agora
vamos realmente entender que isso não é maior ou
obteremos a resposta. Isso é maior. Então, independentemente de
ser verdadeiro ou falso, teremos
algum tipo de resposta,
algum tipo de ação e
você pode ir em frente
e pensar: Ok,
bem, você pode simplesmente
ir em frente, von down, fazer outro se, outro se e outro se, e você pode continuar fazendo todas essas verificações
diferentes. Mas o problema é que, se
tudo isso for verdade, por exemplo, se
mudarmos isso para quatro, esse para três, esse um, dois, na verdade, se mudarmos isso,
queremos ir para o outro lado. Se dissermos que se são sete, oito e nove, então se
forem maiores que seis, já que são verificações de if,
todas elas serão executadas como você vê aqui, elas foram executadas por um número,
sete, oito, nove. Todos eles voltaram à realidade, então todos
foram acionados. No entanto, e se precisarmos
apenas de um desses? E se quisermos apenas que
o primeiro seja verdadeiro para acioná-lo. E então, se isso for acionado, nenhuma das outras
condições Bem, é aqui que outra
palavra-chave entra em jogo aqui, e esse é o else if. Então, é uma espécie de combinação do I e do
else juntos, e nós o chamamos de LF. Então, se entrarmos aqui
e dissermos se é para esses. Estou dizendo que, se isso for
verdade, então faremos isso. Caso contrário, verificamos se, se isso for verdade, fazemos isso, senão, se isso for verdade, senão,
se isso for verdade, e se tudo isso falhar,
ficaremos com apenas
a declaração else. Então, se fôssemos fazer isso agora, você pode ver que o primeiro
se torna verdadeiro aqui em cima, e então nunca chegamos a eles. E podemos dizer isso se
entrarmos aqui e
colocarmos vários pontos
de
exclamação para que possamos diferenciá-los Podemos ver que o primeiro
é detectado como verdadeiro e depois ignoramos
todos os outros porque não
precisamos verificá-los. Portanto, não estamos verificando se todas essas coisas são
verdadeiras individualmente. Portanto, pode haver
certas
situações em que você queira usar múltiplos,
múltiplos se verificarem sozinhos Mas muitas vezes você
provavelmente terá mais de um I else if ou if else. É uma espécie de cadeia
acontecendo, como vemos aqui. Agora, isso pode
realmente tornar as
coisas um pouco complicadas às
vezes quando abordamos isso. Então, se dermos uma olhada em um
exemplo aqui, vamos lá. Tudo bem, então temos todos os
nossos cheques em vigor aqui. Então, eu apenas seleciono um
número aleatório para a idade de até 15 anos. Então, vamos verificar
se a idade é menor que 13 anos. Tudo bem, vamos supor que
talvez os preços
dos cinemas, certo? Então, vamos dizer, se eu tiver 13 anos, será esse preço,
se for 13-64, então é maior
que 13, menor que 64, é esse preço, e se for maior que 64, nós fazemos esse preço E então temos um aqui
dizendo que ele não é válido, o que é para o caso de pegar tudo. Nunca deveríamos ter uma
situação como essa. Vamos. Então, temos 15. Nós podemos passar por nós mesmos. Diremos que
não é menos do que 13. Então pule isso. Vamos
para nosso segundo cheque. A idade é maior que
13 e menor que 64. Sim, 15 é. Portanto, devemos
voltar, o preço é 14 50. Se você jogar isso, podemos ver
que é exatamente o que obtemos. Portanto, há um exemplo
de como fazer um tipo de
cadeia if, else if e else acontecendo lá. Então, novamente, o exemplo seria
algo como talvez
um cinema com
preços de ingressos
diferentes com base na idade
da pessoa
que precisa de um ingresso. Agora, também podemos usar essas declarações
if e mesclá-las com nossas
quatro declarações ou 44 loops, e podemos conversar sobre coisas
como , digamos que
temos nossas compras Certo? Cereais. Ketchup. Leite No entanto, podemos verificar se
há itens fora de estoque. Talvez você esteja desenvolvendo
um aplicativo que
monitora quais itens estão
fora de estoque e em estoque. Quando um item estiver fora de
estoque, ele aparecerá aqui. Então, vamos dizer que esta loja está
sem estoque de leite, certo? Então, diremos que não temos
leite, mas queremos verificar. Então, queremos ver
nossa lista de compras. Então, queremos dizer por mim, certo? Para itens de mercearia, assim como fizemos anteriormente
na seção de quatro Lucas E queremos ver se esse
item está esgotado. Então, juntando
tudo isso para que tenhamos um
item nos mantimentos Queremos verificar se
estou sem estoque. Então, usar aqui
vai verificar se o
item está lá. Então, se o cereal estiver nessa lista, faremos o
próximo bloco de código E se não for,
vamos continuar. Então, vamos
dizer que vamos
imprimir e estamos reunindo
tudo aqui. Diremos que a porcentagem
S está fora de estoque. E então passaremos a porcentagem I para passar nosso
item para nossa string. Juntando
tudo isso, vemos que a única coisa
que o desencadeia é o leite,
porque o leite está de fato dentro
da nossa lista de produtos esgotados Assim, você pode ver com
que rapidez estamos começando a
juntar as coisas. Estamos imprimindo
em nosso console, inserindo variáveis
em nossas strings Estamos usando verificações de
IP para ver se algo é verdade e estamos executando quatro ciclos para examinar tudo
dentro de nossas compras Veja tudo
dentro da nossa lista. Tudo bem, então isso deve abranger tudo aqui, incluindo
as verificações if e if, else ,
if, else,
bem como alguns exemplos para tornar as coisas um pouco mais claras e ver como tudo
isso
15. 15 dicionários: R: Tudo bem. Pessoal, hoje
vamos dar uma olhada nos dicionários Agora, obviamente não estamos falando sobre o tipo que você escolhe, esse tipo de palavra e uma
definição associada a ela, mas você pode usar um dicionário
para criar um dicionário. E um dicionário tem relação
muito boa com o que
um dicionário está codificando. A razão para isso
é porque eles funcionam na função de
ter um par de valores-chave. Então, em relação a um dicionário
normal, teríamos a
palavra como chave
e, em seguida, a definição
seria o valor. Portanto, os dicionários são um conjunto
de dados que pode conter tipos de
dados de qualquer tipo que discutimos
até agora,
incluindo outros
dicionários Um dicionário pode manter um conjunto de informações
relacionadas em um só lugar, como configurações do jogo ou do
programa ou informações
sobre personagens inimigos. Um dicionário pode ser facilmente
identificado, pois todos os dados, todos os seus dados, serão
colocados em um conjunto de colchetes versus uma lista que usa Então, vamos dar uma
olhada em como esses dicionários são
formatados Tudo bem. Então,
indo aqui no topo, vamos criar
uma nova variável. Vou
chamá-lo de dicionário M. E, claro,
vamos definir isso como
igual a um par de colchetes. Agora, a forma como isso funciona é que podemos entrar para
torná-lo mais agradável de ver E fazemos um par de valores-chave. Então, por exemplo,
vamos dizer a chave um, depois fazemos dois pontos
e depois o valor Então, vamos usar meu valor e, se você
quiser inserir outro, colocamos uma vírgula e podemos inserir menu suspenso até a próxima linha,
e podemos fazer a tecla dois Lá vamos nós. Esse
é meu novo valor. E, assim por diante,
em toda a lista. Agora, o nome do
nosso dicionário pode ser o que você quiser, assim como uma variável normal. Mas quando entramos em
nossos colchetes, você pode ver que temos uma corda, e essa primeira corda
aqui é nossa chave Obviamente, você pode nomear
isso como quiser, mas,
assim como as variáveis, deve ficar claro
a quais dados estão relacionados. Portanto, ele deve ter algum
tipo de indicador do que o valor está relacionado. Por exemplo, isso pode estar dentro de talvez um dicionário meteorológico. Uma chave pode ser temperatura
ou temperatura
e, em seguida, o valor
seria o número real Tudo bem. Então, um exemplo disso, se
você estiver fazendo configurações, pode ser ter um dicionário
de áudio e um dicionário gráfico. Agora, sua chave, como você pode ver , é seguida por
dois pontos e depois seus dados Seus dados aqui são o que
chamamos de valor e são tratados de forma semelhante a uma lista com um índice zero, se isso fizer sentido,
sendo seu primeiro valor. Agora, poderíamos seguir
em frente e chamar isso situações diferentes ou de
algumas maneiras
diferentes de chamá-lo. Você pode até, eu acho, ter diferentes tipos de
dados lá. Poderíamos ter uma lista
lá como um dos nossos valores. Então, se quisermos o índice zero aqui, forneceremos nosso nome, retornando com Jim
e o Índice um, retornando sim.
Estamos nos
transformando em nossa saúde. Então, se tivéssemos, desculpe, um dicionário dentro
de um dicionário, que podemos fazer aqui, certo? Então, vamos dizer que esse é o nome, e isso seria relatado como ele e no próximo
teremos saúde, e diremos 100. Então, em uma situação como
essa, é de onde vêm
os índices Agora, é claro, não
precisamos usar índices. Poderíamos simplesmente escrever
nomes completos quando se trata dicionários, o
que é sempre bom Lembre-se de que cada chave deve ser separada por sua própria vírgula, então vamos continuar e
, aqui, para nossa leitura, dar uma
olhada em como podemos acessar
um dicionário Tudo bem? Então, quando
acessarmos nosso dicionário, vamos
imprimi-lo, é claro. E o que vamos
ver é que vamos imprimir meu dicionário, é
claro, e poderíamos
simplesmente imprimir assim. Mas é claro que, se
quisermos
restringi-lo , vamos dar uma olhada. Então, a impressão é que
pegamos a chave um e depois
pegamos a chave dois, e então elas vão para dentro de outra cinta encaracolada
para o outro Portanto, podemos obter a chave
um ou a chave dois aqui. Agora, se quisermos obter a chave um, podemos simplesmente colocar colchetes bem ao lado dela,
semelhante a uma matriz Só nós podemos ir em frente
e digitar a chave 1. E como você pode ver aqui,
obteremos o resultado,
a chave 1 lá embaixo. E a mesma coisa.
Se fizermos k dois, obteremos
o novo dicionário
que Kit está segurando. Agora, o que acontece se
usarmos zero em nosso dicionário
aqui? Tente acessar isso. Vamos nos deparar com essa situação porque estamos fora dos limites
desse dicionário Portanto,
existem situações diferentes
para algo assim. Por exemplo, o que poderíamos fazer
é ir ao meu dicionário, certo? Novamente, podemos fazer teclas de
pontos e
algo assim. Isso só vai pegar todas as nossas chaves e
retorná-las como uma matriz, então essa será
uma lista de todas as nossas chaves. E então podemos fazer nossos colchetes e
colocar um zero lá Então, poderíamos fazer algo
assim, e isso funcionaria, embora
certamente seja muito
mais longo do que o necessário. E eu sei que com três, ocasionalmente, isso também
funcionaria. Você poderia simplesmente pontilhar a tecla
um. Sim, aí está. Então você pode simplesmente fazer ponto e
inserir o valor da chave aqui. Então, podemos fazer dois, e o K dois entra em
outra lista própria, desculpe, em outro
dicionário próprio. Então, poderíamos ir
e fazer outro ponto. Então, podemos fazer meu dicionário.k2
dot, vou dizer Saúde. E, como você vê,
nosso resultado é 100. Portanto, existem algumas maneiras
diferentes de realmente
acessar o conteúdo
do nosso dicionário, seja usando o método
de log obtendo uma lista de nossas chaves
e inserindo um índice, apenas passando a
chave que queremos como string ou usando
um método de
ponto como esse, semelhante a uma chamada de função ou uma
chamada de método. Agora, quando temos dicionários
dentro dos dicionários, você viu essencialmente o que
faremos aqui
com dotqt faremos aqui
com Somente você pode acessá-lo
por meio de nossos colchetes. Então, podemos fazer a chave dois. E então, logo ao lado
,
faremos outro conjunto de
colchetes. Também podemos simplesmente
escrevê-lo assim,
que tem um ou dois pares de colchetes em
cada tecla abaixada Então é assim que podemos acessar nossos dicionários e o
lado dos dicionários Pode ser um pouco confuso, então espero que
tenha ficado claro o suficiente, pelo
menos se não a
explicação com
a demonstração
real de como vê-la em uso aqui Agora, os dicionários podem armazenar
todos os outros tipos de Então eles poderiam ter uma lista neles. Eles poderiam ter números,
você sabe, números inteiros, números
flutuantes, cadeias de caracteres, dicionários e lados dos dicionários Então, temos todo esse conjunto selvagem
e, claro,
acessá-los realmente se resumirá aos métodos
que mostramos lá
e, com base no
tipo de dados,
obviamente, se o valor
for uma matriz, você acessará os valores lá como uma matriz. Agora, e se quisermos adicionar
ao nosso dicionário, certo? Então, temos meu dicionário lá. Vamos
criar um novo. Chamaremos isso de Colors, teremos a sequência de um dicionário
vazio Me dê os erros de
lá embaixo porque
não preenchemos isso. Agora, o que
fazemos para passar alguns dados aqui se quisermos adicionar uma nova
entrada em nosso dicionário? Bem, podemos simplesmente usar nossas
cores
e passar uma chave como se
estivéssemos tentando acessá-la. Então, chamaremos isso de “
vamos usar cores frias” ou “frias”
e, em seguida, definimos isso como igual ao valor que queremos. Então, vamos usar um azul. Se
imprimirmos nossas cores agora, veremos azul
sendo o valor, sendo um valor de string
aqui da chave cool. Então, devemos ver isso aqui dentro do nosso dicionário de cores. E lá vamos nós. Podemos
ver isso ali mesmo. Então, é tão simples quanto isso, você adiciona a ele, e
isso também deve funcionar para uma matriz. Então, se tivermos uma lista aqui e a imprimirmos, como você vê, ela funciona exatamente como você
imagina que funciona da mesma forma,
mesmo se estivermos fazendo um
tipo diferente de conjunto de dados aqui. Então aí está. Fácil
o suficiente para nós fazermos. Nós simplesmente o chamamos e depois definimos, e isso funciona da mesma maneira se você quiser
redefinir ou alterar isso também. Então, se você quiser mudar
a chave dentro dela, se você vier aqui
e trocar esses livros. Então, primeiro, serão esses números, depois vamos
mudá-los para vermelho e
imprimi-los novamente. Como você pode ver, você pode
adicionar chaves a ele e sobrescrever as chaves usando
o mesmo formato Agora, o que fica um pouco
complicado é quando você
quer adicionar um dicionário
ao dicionário. Vamos simplesmente retirar isso? E vamos ver se isso
funciona agora, digitando isso. Então, vamos dizer que sou um. Tudo bem, vamos dizer valor aqui. E vamos ver se isso funciona. Tudo bem, legal. Assim, podemos criar dicionários dessa
maneira com a mesma facilidade Incrível. Portanto, não preciso revisar nenhum tipo de solução
alternativa para isso Perfeito. Tudo bem,
então aí está. Veja como podemos adicionar ao nosso dicionário e
sobrescrever as chaves Agora, podemos dar uma olhada em
nossos dicionários Então, obviamente,
os dicionários
serão um pouco diferentes Então, vamos usar o
Meu dicionário novamente
e, na verdade, vamos executar quatro ciclos para que
possamos examiná-lo. Então, o que queremos
fazer é
fazer quatro e, normalmente, vamos usar quatro
teclas no meu dicionário. Então, neste ponto, vamos obter
a chave um e a chave dois. É isso que
vamos analisar. E se simplesmente imprimirmos
isso, imprima P. Você pode ver
que vamos imprimir as chaves um e dois para nós. Agora, se quisermos ir
ainda mais longe nisso, podemos usar o valor, digamos,
em Key, podemos imprimir o valor e ver o que obtemos
lá em duas camadas mais profundas. Oh, vamos lá. Erro meu. Meu dicionário e cerque
os mesmos colchetes encaracolados.
Lá vamos nós. É isso que queremos fazer e imprimiremos o valor dessa forma. E lá vamos nós.
Então, vemos a chave um, nome, saúde e chave dois. Agora, nessa situação, como temos uma string aqui, ela imprimiu todos os
caracteres individualmente, que é o que você está vendo
aqui com ela sendo vertical. E os caracteres incluem espaços. Isso é tudo o que
temos lá. Como você pode ver, procuramos a chave e o dicionário
, então obtivemos a chave um. E então, o que fazemos
aqui,
percorremos o valor e imprimimos todas
essas letras individualmente
e, em seguida, imprimimos o nome da chave. É por isso que temos
isso e, em seguida, a chave 1. E então passamos para a chave dois e imprimimos a próxima. Então, nome e saúde, e depois imprimimos na chave dois. Assim, você pode ver como
percorremos esses dicionários e você pode ir
mais longe ou pode percorrer um
conjunto específico de Então você pode ver como percorremos esses
dicionários esses
dicionários Tudo bem. Então, isso é tudo que você
precisa saber para usar e acessar elementos do seu dicionário. Então,
isso bastará por aqui. seguir, veremos como
obter informações do usuário e
entraremos em mais alguns loops
16. Como obter inputs: Tudo bem, então percebi
que,
aparentemente, faltam entradas na
parte do idioma Então, vamos seguir em frente e eu vou mostrar como fazer
isso bem rápido. Eu só vou fazer
uma interface de usuário. Vou clicar em
Controlar para minha nova cena. Vou seguir em frente
e renomear isso. Eu vou ligar para ele. Vamos fazer o teste de entrada. Vou
salvá-lo com Controls, insira o ponto de teste TSN. Isso é bom. E vou adicionar um script a ele. Ótimo. E vou fechar todas essas outras seções que não precisamos
para isso, certo? Então, no meu caso, estou estendendo um controle,
mas no seu caso, pode estar estendendo o corpo de
um personagem dois D quando se trata de criar jogadores para jogos
ou qualquer outra coisa, não importa muito o que ele esteja estendendo, porque você pode adicionar ou receber informações de
muito bem qualquer tipo de Certo. Agora, o que eu vou fazer Sim, vamos apenas usar a impressão
para reconhecer isso Portanto, há algumas maneiras
de obtermos informações. E uma das principais maneiras pelas quais você verá
muitas pessoas fazerem isso é entrar em um processo de sublinhado do
funk
ou no processo de física do
funk Esses são dois
pontos diferentes no quadro. O processo de física
é onde você deve colocar qualquer coisa
relacionada à física. Então, algo como
mover seu player. Como você provavelmente terá que
lidar com coisas como colisões e outras coisas baseadas na
física, você provavelmente deveria fazer isso no processo de
física no quadro E o processo aqui
provavelmente é onde
muitas outras coisas em seus projetos
serão realizadas, mas você geralmente quer tentar deixar isso o mais claro possível. Agora, outra situação
que você pode ver usada será outra
função chamada input. E entrada não tratada, e a nossa última é a entrada de chave
não tratada Agora, há algumas
pequenas mudanças na
forma como elas são
tratadas e veja se eu apenas mantenho meu mouse aqui, dependendo da
versão do Gudo que você tem, você
pode ou não ver Se você não ver os
pop-ups e sua versão, você deve ser capaz
de manter o controle e clicar na função obter as mesmas informações. Você leu sobre algumas
dessas diferenças aqui
com entrada de tecla não manipulada, entrada não manipulada e assim por diante Mas esses três últimos aqui
são especificamente para entrada. E aqui em cima é onde você terá coisas mais
contínuas como segurar
para frente para se mover, por exemplo. Tudo bem? Então, vou me livrar
dos não manuseados. Não vamos
precisar disso para isso. Eu só queria
mostrar
que essas são uma
opção para usar aqui. Eu vou me livrar
do Eu quero me livrar disso? Não. Vou esconder isso
do meu exemplo. E vou me livrar do processo de física só
porque não
vou mover nenhum personagem ou
fazer nada baseado em física. E eu vou te mostrar aqui. A maneira mais fácil de fazermos alguma entrada é if input, e essa classe de entrada contém
todas as entradas que estão disponíveis incorporadas ou que você adiciona
ao mapa de entrada Então, vamos
dizer que eu insiro um ponto. Podemos dizer I e
você pode ver aqui, qualquer coisa pressionada é
semelhante a como você acessaria o menu principal e
diria que pressionaria qualquer botão. Então, se você pressionar qualquer botão,
isso vai disparar. Além do menu principal, não
tenho certeza de onde você
pode incorporar isso, mas se precisar,
há alguma coisa pressionada?
Existe alguma coisa para você? E
vamos testá-lo. Então dizemos, se a entrada for qualquer coisa pressionada e tabulada nela,
diremos que imprima algo
se soubermos soletrar, às vezes é difícil
soletrar, algo pressionado, algo pressionado,
e eu vou clicar em Executar
cena Veja, enquanto estamos sentados aqui,
tire um segundo para correr. Lá vai. Se eu apertar qualquer botão no meu
teclado, pressionarei J, pressionarei
alguma coisa e ele será
acionado cinco vezes, estando exatamente onde está
no processo Se eu bater em L, lá vamos nós. Podemos ver esses
números aumentando. Se eu me livrar da pilha, você pode ver que toda vez
que eu pressiono os botões aqui, você pode ver nosso número aqui
embaixo no canto Preenchendo, certo? Então, mesmo clicando nele, porque isso é entrada,
isso é alguma coisa. Clique esquerdo, clique direito, qualquer um desses botões
no teclado, certo? Sempre trabalhe. Todas essas
coisas são acionadas porque qualquer coisa pode desencadear.
É qualquer coisa pressionada. Agora, que outras
opções temos? Nós temos é, e temos a
ação que acabou de ser pressionada, ação recém-liberada, a
ação pressionada. E então temos um pouco de alegria. Então, esses botões de alegria,
é claro, serão seus
controles, certo? Então, ele
solicitará um dispositivo
e, em seguida,
solicitará um botão de alegria. Agora, eu não tenho um plugue de
controle, mas isso é que você pode fazer algo específico
para controladores, não é o
que
vamos fazer aqui,
mas é algo
a ser destacado para nós, assim como temos o rótulo da tecla, o
pressionamento da tecla, a tecla física
, o botão do mouse Então você pode ver, você
tem uma série de coisas que você pode fazer aqui Então, vamos com o
mais fácil, o simples. Vamos dizer, desculpe, apenas
tome uma bebida. OK. Portanto, se a entrada for uma
ação, basta pressionar. Agora, você obviamente não vai
ter muitos desses. Você provavelmente
verá muitos desses botões de interface
de usuário aqui embaixo. Exceto algumas dessas interfaces de usuário, acredito que seja a tecla
enter por padrão. E você vê que estamos
transmitindo uma sequência de ações. Sim, então
vamos colocar isso. E agora você verá que, quando eu o executo, lembre-se de que essa
é a ação pressionada. Então, se eu pressionar o botão, estou segurando, ele só está
sendo pressionado uma vez, certo? Só está
aparecendo uma vez. Não tem problema. E eu
desisto, nada acontece. Agora podemos ter
outro sistema configurado, então podemos dizer que o ponto
de entrada é ação, podemos dizer liberação. Vamos usar o
mesmo botão aqui. Eu aceito, e vamos imprimir e vamos divulgar
algo. Pressionamos
e acabamos de soltar, e estamos usando a
tecla enter para ambas. Então, se eu pressionar esse botão, ele diz que algo foi pressionado. Se eu mantiver
pressionado, nada acontece. E assim que eu levanto a chave, algo é liberado. Então, dependendo do
que você está fazendo, você pode querer que algo
aconteça na imprensa, ou você pode querer que algo
aconteça no lançamento. Agora, alternativamente, há outra opção
que você viu lá. Será que se a
entrada for pressionada com ação, então não apenas pressione, mas pressione. E eu vou dizer que aceito. Ótimo. Então, podemos ver
a diferença aqui. Imprimir. Isso é o que vai ser acionado quando algo
é pressionado. Então, algo se manteve. Então você vai ver,
eu vou apertar. Vamos ver nosso
algo pressionado. Vou mantê-lo
pressionado por um momento, então veremos um spam
nesse console de saída algo pressionado,
algo retido. E então, quando eu lançar,
veremos algo lançado. Certo? Eu fiz isso só por um momento lá.
Eu pedi isso. Podemos ver algo pressionado
e, em seguida, algo retido
por todo esse tempo. E então algo
se soltou quando eu tirei o botão Eles veem que você tem três situações
diferentes que você pode usar aqui. E dependendo do tipo de
sistema que você está fazendo, do tipo de entrada
que
você está fazendo, você pode usar qualquer um
deles para sua finalidade Agora, eu mencionei
que também tínhamos tecla pressionada. E então isso vai
exigir um código-chave. Então, no nosso caso, com o que
estávamos fazendo agora,
será a tecla Enter, certo. E vamos seguir em frente
e imprimir Enter, pressionar. E executamos isso, seguramos e podemos ver que entendemos isso. Portanto, não somos apenas pressionados e liberados
quando se trata de teclas. Portanto, tenha isso em mente. Agora, se você quiser
configurar suas próprias ações aqui, vou apenas confirmar isso. Mais. Lá vamos nós. Como eu
aceito, como temos aqui. Vamos fazer
isso na parte de jogos. Mas você simplesmente acessa as
configurações do projeto, acessa o Mapa de Entrada
e, em seguida, pode
adicionar uma nova ação, certifique-se de estar
na caixa certa aqui. Vou dizer que novo vamos prosseguir
e chamar essa ação de teste. Clique no botão adicionar. Agora, se eu rolar para baixo até
aqui na parte inferior, posso clicar nesse ícone de adição e colocar o
botão que eu quiser. Então, digamos que eu coloque
o botão K, certo? Eu cliquei em OK. E eu posso
entrar aqui e dizer, ação acabou de pressionar, testar a ação. Agora eu executo isso. Agora, se eu apertar o botão K, temos aquela coisa
pressionada sendo acionada. Então, adicionar novas entradas ao seu projeto é tão
simples quanto isso E há algumas outras
coisas nas quais você pode se aprofundar. Então, terão ou
terão mais detalhes palavras de ação, coisas
como força de ação Então, a força da ação é onde obteremos os números
reais. Então, insira, obtenha a força de ação. E se dermos uma
olhada, veremos se vamos
levar um golpe Vamos recuperar
um número de 0-1. E isso é o quanto ou com que força um botão
está sendo pressionado. Então, em um teclado, é
basicamente zero ou um, certo? Ou é imprensa ou não. No entanto, se você lida
com controles, é
aqui que você pode criar coisas como segurar um botão até a
metade para mirar e pressioná-lo até
o fim para atirar Por exemplo, havia
alguns jogos antigos que tinham esse tipo
de sistema com isso. Metal Gear Solid
tinha onde você
pressionava . Acho que era o
botão quadrado dos jogos antigos. Você pressionaria para mirar e pressionaria até
o fim ou soltaria para fazer o tiro. E obter força de ação é como realmente
conseguiríamos isso. Tudo bem, então há muitas opções que você pode fazer para
obter informações, mas eu mostrei todas as
principais para lidar com isso E eu ainda tenho a
entrada aqui configurada, e isso porque o evento de
entrada de evento é qualquer coisa. Então, isso pode ser um clique do mouse,
pode ser um clique do teclado. Pode ser apenas mover
o mouse na tela
porque o movimento do mouse é
um evento de entrada, certo? Então, se eu fosse
em frente e imprimisse o evento, aqui. E você dá uma olhada. Veja, quando eu acabo de mover isso, você pode ver que o movimento do mouse
vem com muitas coisas. A posição é relativa, você tem caneta, pressão e inclinação, ou se quiser
fazer suporte para tablet Você entendeu isso. Você
tem a velocidade, que é a velocidade com que
o mouse está se movendo Tudo bem. Deixe-me ver
o índice do botão. Então, o clique esquerdo será
o Índice um, clique
direito será o Índice dois. Então, se você vai
usar algo como entrada, você vai ter que
restringi-la. Então, por exemplo, faríamos
algo como VR digamos que o evento I
seja um evento de entrada. Então, podemos dizer tecla se
você quiser que seja um teclado, botões do JoyPad Se você quisesse que fosse um botão, ação de
evento, mouse, botão do
mouse, movimento
do mouse,
arrastamento da tela, toque na tela. Essas são coisas que
você usaria para criar um
botão de tela sensível ao toque, por exemplo. Evento de entrada, atalho. Então você tem todas essas
coisas aqui, mas digamos apenas um evento de entrada. Vamos embora. Chave de evento de entrada. E então podemos dizer que ar
EV é igual a evento como chave de entrada do evento E vamos imprimir EV, ver o que obtemos daqui. Vemos que nada está
acontecendo aqui. E assim que eu aperto um
botão no teclado, podemos ver agora que estamos
recebendo botões, certo? Estamos recebendo códigos-chave. Estamos recebendo os mods, sejam eles físicos,
a localização, se estão pressionados
e, claro, o
echo, que, é claro, o
echo será verdadeiro se
o botão for pressionado Então, temos essas chaves
de eventos de entrada agora. Tudo bem. Então, agora
podemos seguir em frente e podemos dizer que eu pressiono EV, certo? Então, se o botão
estiver sendo pressionado, podemos usar a
palavra aqui ou você pode usar dois e comerciais
e apenas aprimorar Portanto, estamos verificando se as duas condições
foram encontradas e se o código EVP é igual a P ED, E eu posso ir em frente e
imprimir algo como D, E, pressione. Agora, se eu tivesse qualquer outro
botão no teclado, nada aconteceria,
mas assim que eu pressionar
a tecla D,
isso é reconhecido Agora, se você realmente quiser, você pode simplesmente entrar aqui
e entrar na sua entrada, apenas dizer I insiro
action press, Film. Você pode fazer tudo isso
aqui. Mas quando estamos recebendo um evento,
você também pode usá-lo, e esse é o tipo de
situação que você pode fazer agora, se quiser usar
o evento também, bem
como a ação aqui. Tudo bem. Podemos dizer se o evento é a tecla de entrada do evento, se quisermos, e o evento é o pressionamento de ação , e agora podemos escolher algo que testamos. Eu realmente não me lembro
qual foi a ação de teste. Eu não vou ter
ideia sobre isso. Mas eu vou dizer Action Press. Não me lembro o que era isso. Acho que foi o
KK. Espero que eu esteja certo. E eu apertei, e
vemos a Action Press. Tudo bem. Então, vamos lá. Então, temos isso funcionando para nós. Tudo bem, então
espero que isso lhe dê uma boa ideia de como podemos obter informações
do jogador. Existem algumas outras formas pequenas. Por exemplo, se tivéssemos
uma caixa de texto na tela, poderíamos extrair a
propriedade de texto dela. E acredito que,
se
bem me lembro veremos
isso em nosso primeiro projeto. Tudo bem, espero que isso
esclareça qualquer confusão
que possa haver, e espero que você possa entender algumas das maneiras pelas quais podemos
obter informações do jogador
17. 17 Loops enquanto: Tudo bem, vamos dar uma
olhada em while loops. Agora, já usamos um
loop de quatro no passado, e agora temos um
segundo tipo de loop. E em quatro voltas,
como você se lembra, percorreremos um conjunto de itens que está dentro de outra
coisa, seja dentro de um intervalo de números ou dentro de uma lista. Um loop Wile é algo
que se
repetirá para sempre, desde que uma
determinada condição seja verdadeira Então, vamos dar uma olhada em como
podemos usar um loop Wile Nesse caso, vamos usá-lo
para fazer uma contagem regressiva. Tudo bem, então
vamos criar Vou salvar myNum, definir isso como
zero por padrão E vamos
dizer que Wile biNum é menor ou igual a cinco Vamos apenas
imprimir MyNum. E nesse ponto, se
tentarmos isso, nosso loop ficará preso e todo
o programa falhará. Vamos ficar presos
na tela inicial. E, como você pode ver no console
de saída lá embaixo, ele simplesmente não
enviará spam porque
isso é tudo que ele sabe fazer. E, na verdade, isso
nem vai fechar, então eu tenho que apertar o botão de
parada na parte superior. Portanto, com um laço
selvagem, é perigoso
ficar preso nele Você tem que ter uma maneira
de sair o tempo todo. Se não houver nenhuma saída
codificada, você falhará. Agora, há muitas maneiras de
fazer uma saída e, nesse caso, estamos verificando se M NUM é
menor ou igual a cinco, então a maneira mais fácil de
corrigir isso seria criar essa declaração
para se tornar falsa. Agora, podemos fazer isso simplesmente definindo M
NUM agora igual a seis, o que o quebrará. Não vamos fazer a contagem regressiva
, mas ela vai quebrar. Isso sairá do circuito. Mas o que preferimos já que estamos usando um loop curinga, podemos supor que queremos fazer uma contagem regressiva então
vamos chamar myNum, digamos que mais é igual Agora, isso é exatamente a
mesma coisa que dizer M NUM é igual a myNUM mais um É apenas uma forma mais curta de escrever isso fazendo
mais é igual Então, agora, se o
executarmos, veremos que ele
conta a partir de zero, um, dois, três, quatro ,
cinco e, quando
chegarmos a seis, isso não estará mais
dentro da nossa condição. Então, isso
fará com que nossa condição retorne como falsa e
sairemos desse ciclo. Então, essa é uma maneira bastante sólida de
romper isso. No entanto, essa não é a única
maneira de avançar. Como você viu, quando tínhamos apenas um número impresso,
causamos o acidente. Mas o que podemos fazer é usar uma
palavra-chave aqui chamada freio E isso quebrará o
loop, não importa o que aconteça, não importa se a condição
é verdadeira ou falsa, ela simplesmente sairá desse loop, como você pode ver aqui. Mesmo que zero seja
definitivamente menor que cinco, porque usamos essa palavra-chave, podemos
sair desse loop, independentemente de a
condição ser verdadeira ou falsa. Agora, podemos usar while loops com coisas como dicionários, listas
e uma lista Então, vamos dar
uma olhada. Então, vamos dizer que são novos usuários. E tudo isso significa
que, desde haja usuários dentro
dessa lista e ela não esteja vazia, ela será retornada como verdadeira. E quando a lista estiver vazia, ela retornará como falsa. Então, o que vamos
fazer dentro
desse loop é dizer que nosso usuário atual é igual ao ponto POP de nossos novos usuários
e podemos aparecer na frente. E vamos continuar
imprimindo lá. Verificando o usuário, podemos fazer nossa porcentagem S e simplesmente
repassar nosso usuário atual Tudo bem. Então, agora, se
prosseguirmos e executarmos isso, podemos ver que
vamos passar. E uma vez que tudo tenha
sido encerrado ou depois de você ter retirado
todos os nomes, isso agora é falso e
saímos desse ciclo E você pode ver
na saída que imprimimos essa declaração para cada usuário que
exibimos. Agora, se você quiser remover
coisas de um loop, certamente também
podemos fazer isso de
uma maneira muito fácil. E, claro, isso não conta
apenas para remover coisas, mas daremos uma
olhada em nossos animais lá e veremos que temos
lagartos lá dentro três vezes Então, o que podemos fazer para outra verificação de declaração
aqui é que podemos dizer, se lagarto, lá vamos nós Ou lagarto selvagem em animais. Então, enquanto o lagarto for uma das chaves
dentro dos animais de lá, isso
continuará funcionando Se você se lembra do que eu
disse antes ou anteriormente quando estávamos
examinando listas, eu disse: se você tivesse vários itens
em sua lista dos
quais
quisesse se livrar, digamos, duplicatas,
teria que ligar para removê-los ou
apagá-los constantemente até que todos
desaparecessem Bem, agora que
sabemos sobre o Woloops, podemos simplesmente
verificar se o lagarto está
dentro E embora exista um
lagarto nos animais, vamos removê-lo Tão simples,
vamos chamar Animals Dot. Remova-o, não remova-o. O que você chama de apagar Lezard. Veja aqui,
vamos seguir em frente e imprimir animais depois. Toda vez
que o removemos e damos uma olhada. E vemos que temos
dois lagartos agora. Começamos com três.
Em seguida, adicionamos um lagarto e depois não temos lagartos Então, você pode ver que essa
é uma maneira
fácil percorrer um loop e, por exemplo, remover todas as
duplicatas Tudo bem, então vamos explicar
o que são loops selvagens e como podemos usá-los em
alguns cenários diferentes
18. Funções e argumentos: Vamos seguir em frente e
entrar nas funções. Agora, funções, já
vimos e usamos duas delas. usamos o processo e Até agora, usamos o processo e estamos
prontos durante todo o
curso. Mas você pode
criar completamente suas próprias funções. E, como exemplo, podemos ter um que
seria algo parecido com o
seguinte que você vê aqui. Então, poderíamos ter uma chamada
saudação que dá as
boas-vindas a tudo o
que estamos fazendo, certo? Livros, se pudermos soletrar
isso corretamente. Agora, você notará algo
em comum com tudo isso. Agora, apenas observando tudo isso, você verá algumas semelhanças e verá que essas têm sido a estrutura
básica que usamos
esse tempo todo, e elas compõem a estrutura
básica de qualquer função que você já escreveu Na primeira linha, começamos
com a palavra-chave Bunk FNC, que diz ao GDScript que
queremos definir ou criar uma função E isso é seguido por outra palavra ou série de palavras, mas não podemos ter
espaços nela. Que então é precedido por
um par de parênteses, e isso Obviamente, temos que
terminar com dois pontos e depois ir para a
próxima linha e marcar uma Agora, a partir dessa
segunda linha está o trecho de código que queremos escrever ou
executar dentro de nossa função
e, claro, só
executaremos dentro de nossa função. Então, se fôssemos fazer isso
agora , nada aconteceria. Mas o que podemos fazer é
acessar nosso
ready para que, quando esse
script for carregado, possamos realmente chamar greeting à função que
acabamos de criar E isso significa que a
função será
acionada sempre que o
ready for acionado. Portanto, embora não precisemos escrever tudo dentro
da função pronta, podemos organizar tudo em funções individuais
separadas e chamá-las. Isso ajudará a manter nosso código
mais limpo e com melhor aparência. E o nome da sua função deve
seguir os mesmos padrões, suponho que você deva
dizer como suas variáveis. Então, por exemplo, eu
expliquei como suas variáveis
deveriam ser preferencialmente mais curtas, bem definidas e dizer exatamente quais
dados elas contêm. Bem, uma função também deve
fazer exatamente isso. Uma função deve conter ou
dizer exatamente o que está acontecendo dentro da função apenas
lendo o nome. E não só isso, mas uma função só deve fazer uma
coisa e apenas uma coisa. Essa função não deveria estar fazendo quatro
coisas diferentes dentro dela. Agora,
examinamos ou usamos algumas
dessas funções que
receberam argumentos ou parâmetros. Algumas delas, como
remover isso e apagar onde precisamos adicionar
outra informação Bem, também podemos fazer isso com
nossas funções. Então, digamos que queremos
criar um programa que dê as
boas-vindas a alguém Já fizemos isso
antes. Fizemos nossas porcentagens. Nós colocamos isso. Mas em vez de criar
uma variável na parte superior, vamos criar uma
dentro dos parênteses de nossas
funções Agora, podemos deixar coisas
assim e
usar qualquer tipo de dados, mas também podemos declarar que tipo de
dados devem ser Podemos até dar um passo adiante e podemos
informá-lo ou declará-lo, bem
como fornecer um parâmetro
padrão Agora, quando algo tem
um parâmetro padrão, isso significa que é opcional. Não precisamos colocar um argumento quando chamamos a função
aqui e pronta. Não precisamos digitar
nada aqui
e, se não digitarmos nada, o parâmetro padrão será o
que será atribuído a ele. No entanto, se digitarmos
alguma coisa aqui, ela será sobrescrita Então, vamos seguir em frente e
dar a ele o padrão de Bob. E podemos seguir em frente e
adicionar uma porcentagem de usuários. Até, sabemos o que preencher. E você verá que, se
ligarmos para cumprimentarmos e não colocarmos nada,
recebemos Welcome Bob Mas se prosseguirmos e
digitarmos algo aqui, vamos com Jim. E nós digitamos isso. Veja bem, somos bem-vindos. Jim
Jim entra e sobrescreve o
padrão predefinido de Bob Agora, o que acontece se
tentarmos colocar algo que seja do tipo irrelevante?
Então, vamos colocar isso em zero. O que examinamos, EC, imediatamente
recebemos um erro e ele nos diz que deveria
ser uma string, não um int. E esse é o benefício
que você
obterá ao declarar que tipo
de variável ela deve ser Se não tivéssemos
isso e simplesmente,
Ei, o usuário fosse igual a Bob,
agora poderíamos sobrescrevê-lo E dizemos, bem-vindo, zero , o
que não faz sentido Quando você precisa
de dados
específicos em sua função, provavelmente também precisará que sejam de um
tipo específico Então, assim como as variáveis, será uma boa
ideia preencher
exatamente o tipo de informação ou
declarar o tipo de argumento Mesmo que você não
queira definir um padrão, agora, também
é importante notar que podemos ter vários
argumentos aqui, e é aí que
as posições começam a importar. Então, já fizemos isso
antes, onde
tínhamos indutor ou nome e trabalho Então, se fizermos uma vírgula
aqui para separá-la, pudéssemos colocar job lá, e simplesmente colocarmos uma string E, novamente, podemos chamá-los em qualquer ordem quando se
trata de preenchê-los em nossa impressão, como se
fossem variáveis normais, e você provavelmente está
percebendo esse erro aqui Agora, funcionalmente, não
há nada de errado
com o código aqui Mas o que está dizendo é algo que você
deve ter em mente, seja, qualquer coisa com
um parâmetro
padrão ser colocada no final, porque todos os
parâmetros opcionais devem estar no final da sua
lista de argumentos. É do jeito
que é no script GD. Portanto, você precisa colocar todas as
obrigatórias no início e depois
as opcionais no final Então, você vê que tudo o que fizemos foi trocar de emprego
e usuário, e agora não
temos nenhum erro, embora funcionalmente
seja o mesmo Tudo bem, então isso bastará para nossa rápida
introdução aqui sobre funções e argumentos, também conhecidos como parâmetros aqui para preenchermos,
além de
mostrar nossos padrões
ou como atribuir padrões e a ordem em que todas
essas coisas devem estar
19. 19 Função: Tudo bem, então vamos
juntar tudo o que estamos
fazendo neste momento Então, vamos continuar e
eu vou
abrir a entrada que fizemos antes apenas clicando duas vezes no script do meu sistema
de arquivos. E eu vou pegar tudo o que
eu tinha aqui pronto. E poderíamos colocá-lo pronto. Mas o que vamos fazer
em vez disso é
colocar tudo isso em uma função totalmente nova que
vamos criar. E vou ligar para o
meu texto de processo. Processar texto. Vamos lá embaixo,
e lá vamos nós. E agora podemos dizer
passe para dentro do nosso pronto. Tudo bem, agora
temos nossa função dentro do texto do processo. E o que eu vou fazer,
na verdade, minhas desculpas. Não vamos
fazer isso lá. Isso estará
dentro do nosso prontidão. Na verdade
, o processo de texto será feito em
um estágio separado, e isso
exigirá um argumento que podemos chamar de novo texto e atribuiremos a ele um parâmetro
padrão de nada. Tudo bem. Agora,
vou apenas destacá-los, segurar Alt e usar a tecla de
seta para cima para movê-los para cima. Tudo bem, então no texto em processo, o que vamos
fazer é pegar esse texto
como está inserido e podemos verificá-lo, semelhante ao que fizemos
aqui no processo aqui Então, vou copiar o que
tínhamos na entrada
e
movê-la aqui para o texto do
nosso processo. Pegue-os e puxe-os para trás
segurando a tecla Shift e pressionando a tecla tab Agora, o que
vamos fazer é manter isso o mais rápido possível, mas
vou alterá-lo para Q. Então, se meu texto for igual a Q, não precisaremos obter
o campo de texto, porque usaremos
nossa nova propriedade Então, agora vamos passar um pedaço de texto para nossa função de
processo de texto. E vamos
verificar se o novo texto é Q, então vamos
chamar o Quit exatamente como fizemos em nossa entrada, e vamos
criar uma variável chamada My Name, se não houver. E vamos
atribuir isso a qualquer que seja o novo texto que passamos para esse argumento ou passamos para essa função
como um argumento. E então podemos
preenchê-lo novamente, assim como fizemos com nossa entrada. Não estou fazendo nada extravagante aqui. Vamos lá, precisamos
obter nossa opinião. Então, vamos entrar em nosso processo e fazer nossa declaração if, então vamos dizer que a entrada I é actina e vamos
continuar com apenas release E nós vamos com o Enter. Agora, se você colocar agora, se não tiver
nenhuma ação aqui, poderá usar a interface do usuário,
exceto que, acredito, é a padrão pois é espaço ou
Enter ou a tecla enter. Mas se você não criou um
antes na seção de entrada,
basta acessar o projeto
e as configurações do projeto, acessar a guia do
mapa de entrada na parte superior adicionar uma nova ação
chamada Mind Enter. E, ao lado dessa
ação, depois de adicioná-la, você verá um botão de adição. Você pode clicar nisso e
selecionar qualquer tecla ou botão que
quiser. Então, tudo o que vamos
fazer aqui quando liberarmos a entropia é
chamar nosso processo de texto, e podemos realmente passar
esse campo de texto que tínhamos Então, vamos pegar esse campo de texto e pegar
a propriedade de texto de. Agora você verá que, quando
chegarmos aqui, podemos digitar
o que quisermos. E ele é preenchido exatamente como
fizemos anteriormente na seção
de entrada Então, tudo isso funciona da mesma e, fundamentalmente,
é o mesmo Mas, como você pode ver, quando estamos escrevendo
isso, é tudo o que precisamos agora. Temos a tecla I pressionada,
execute esta função. É muito mais curto, é
muito mais limpo e
agradável de se ver E, acima de tudo, podemos usar essa função
em qualquer lugar que precisemos, então não precisamos
escrever o mesmo trecho de código repetidamente. Agora, se você tem um código
longo, ou desculpe, não um código
longo,
um nome
de função longo para o qual você simplesmente não consegue pensar
em um nome melhor, o que podemos realmente
fazer é criar um alias para esse nome Agora, um alias é
como um substituto, certo? Então, podemos pegar esse nome curto e ele
representará essa função. Então, vai
representar esse nome longo, menos como uma variável faz. Temos um nome curto e ele representa esse
grande dado. Então, esse
será um nome de variável que representará
uma função inteira. Tudo bem, então vamos em frente e aqui no
topo do nosso script, podemos seguir em frente e
criar uma variável Vou chamar esse pseudônimo. E o que você vai igualar é que
podemos simplesmente definir isso com o
nome da nossa função. Tudo bem, processe
assim e funcionará. Então, se virmos até
aqui e
pressionarmos Enter, podemos seguir em frente
e usar o alias dot, Paul, e dentro
desses parênteses está
o que queremos Então, esse seria nosso campo de texto e nossa propriedade de texto dele. Você vai ver se vamos
em frente e executamos isso. Boom, tudo funciona
exatamente como era antes. É um pouco mais curto
e estamos usando um alias. Agora, como alternativa,
se você quiser criar um alias
para uma função que esteja dentro de um script
diferente em uma nota completamente diferente, a alternativa será semelhante a essa Então, vou
criar um alias também, chamado
de callable E uma chamada é uma função
psicológica, certo? Então, a única diferença é que
quando o criamos como um chamável, na verdade
temos que adicionar
dois argumentos lá Então, o primeiro é
onde está a função. Então, neste caso, está no
mesmo script das vendas. Então, podemos dizer eu. No entanto,
se isso estivesse em, digamos, nosso campo de texto, então faríamos nosso campo de texto em dólares, cel. Mas como isso está
no mesmo script, podemos digitar self
e, em seguida, é necessário um segundo
argumento, que, como você vê, é um nome de método ou função
na forma de uma string. Então, iríamos em frente e
digitaríamos assim. E agora você pode ver que
podemos fazer exatamente a mesma
coisa que fizemos alias to.com e
transmitir nossa arte Aí está. Então, essas são apenas duas
maneiras de criar um alias para uma função
20. 20 aulas: O que é a aula e
como podemos criar uma? Então, já usamos
classes. Nós simplesmente não nos referimos
a eles como classes. Nós os chamamos de objeto. E a linha de edição aqui, esta é uma classe, e todas as classes que existem estão na forma de nós aqui. Assim, você pode
navegar e dar uma olhada em todas as
diferentes classes. E há até mesmo algumas classes que não estão nessa lista, como JSON, que abordaremos
quando falarmos sobre como
salvar e carregar
diferentes tipos de arquivos Mas é isso que fazemos, certo? Você chama uma classe e
chama new para criar uma nova instância de
qualquer que seja essa classe. Agora, no caso de uma edição de linha, temos algo gráfico, mas no caso de
algo como JSON, em que não temos
nada gráfico, mas temos coisas
que podemos usar E veremos isso
em nossa próxima seção, também
examinaremos
as expressões regulares. Então, vamos seguir em frente e
nos dar uma ideia de
como essas coisas funcionam. Vamos em frente e vamos
criar nossa própria turma. Desta
vez, vou
clicar com o botão direito do mouse no meu sistema de arquivos e selecionar Novo script. Vamos herdar
de, neste caso,
sim, podemos herdar
do node. Isso é bom. E vou chamá-la de
minha aula de PET e jogar de graça. E agora vou encontrá-lo e clicar
duas vezes nele para
que possamos abri-lo. E vou
deletar tudo
nele , exceto nossas
extensões na parte superior. Agora, para criar uma nova classe, na verdade não precisamos
de nada do que
tínhamos antes. O que vamos
fazer é digitar nome do sublinhado da
classe com um espaço e podemos colocar o que
quisermos que seja o nome
dessa classe Então, mantendo o
nome do roteiro, vou chamá-lo de PET e essa
será nossa aula de PET. Agora, você adicionará um segundo argumento aqui
na forma de uma string, e isso seria um caminho para uma imagem dentro
do seu projeto. Um ícone, e esse ícone
realmente aparecerá aqui, semelhante a como o controle tem um pequeno círculo
aqui, um círculo verde. Sua função
substituirá esse ícone. Tudo bem Então, dentro do Pet, o que vamos fazer
é criar algumas
variáveis aqui, certo? Então, nome Savar, certo. E isso será igual
a uma string vazia. Teremos nossa idade do nosso PET. E então ele será
definido como zero por padrão, e podemos ter o tipo, que será definido como uma string. Agora, como essa será
sua própria classe, seria bom se tivéssemos maneiras de mudar algumas dessas coisas. Então, podemos seguir em frente
e criar uma função chamada nome. Vá. E vou definir isso com novos nomes para
que possamos evitar conflitos. Isso e faremos essa função chamada
change name. Nós vamos. Agora temos isso
e podemos fazer o mesmo nossa idade e tudo mais. Assim, podemos entrar e
criar nosso funk como um script normal ou
como normalmente fazemos em um
roteiro com uma idade diferente Vamos entrar em uma nova
era e
simplesmente definiremos Temos
esses dois Blackbird Sim. Então, queremos igualar a
idade à nova era. E podemos fazer a
mesma coisa com o PET, com t
você mudaria de tipo, o que realmente não
faria sentido, a menos que você
tivesse algum tipo de animal
muito estranho que pudesse mudar o tipo
de criatura,
acho que algo parecido
com o mesmo em Pokémon Então, vamos em frente e com um
tipo igual ao novo tipo. E podemos determinar
o que são. Vou dizer string, e
string dessa forma, não
temos problemas e estamos
transmitindo coisas. E agora que temos isso, vou prosseguir com a classe de função de
encerramento. Queremos adicionar um novo script
a um controle aqui. Teste de classe. Tudo bem Agora, o que vamos
fazer está dentro da nossa
linda função. Agora podemos seguir em frente e criar uma nova variável chamada PET e
podemos defini-la como PET dot new. E agora temos acesso
a todas as nossas funções, então podemos dizer PET, fazer um ponto. E agora você pode ver que
temos o nome da idade, a idade da mudança de
tipo, a mudança de
nome, o tipo de mudança
e, em seguida, todas as coisas padrão que teríamos em um nó
típico que
estamos estendendo Então, se quisermos, agora
podemos
imprimir que esta é a porcentagem
S. do meu animal de estimação . Ele é uma porcentagem S e é a porcentagem S O. E agora podemos facilmente
preencher isso. O que temos aqui. Então, a
primeira coisa do PET são os nomes. Eu vou dizer Etname alimentado por pet dot Type e pet dot H. Agora, isso está ficando
um pouco longo Você percebe essas
linhas claras aqui no editor
e, em seguida, uma linha muito
mais dura aqui. Tente não ultrapassar essas
linhas quando possível. E o que podemos fazer é simplesmente pressionar Enter, ele não vai
ver isso lá. Está no Oro? Então, o que podemos fazer é
algo assim e manter tudo
organizado em uma única linha. Podemos deixar tudo
claro assim, e quando escrevermos ou
inicializarmos isso, criaremos um novo animal de estimação, mas não vamos
adicioná-lo
à árvore porque não
precisamos, nesse caso, porque
só queremos acessar as
propriedades dele, certo? E nós podemos criar.
Este é meu PET. Temos essa frase e preenchemos com base
nas informações
que temos lá,
que, nas informações
que temos lá, os padrões estão todos vazios,
exceto o zero Então, a frase ainda
parece um pouco estranha. Mas o que podemos fazer é, antes de
fazer essa impressão chamar Pet dot change
Let's use Name, por exemplo, e
podemos passar um nome. Então, vamos dizer Billy. E agora você pode ver isso preenchido aqui
dentro do nosso console de saída E podemos fazer a mesma coisa
com a idade e o tipo. No entanto, se vamos tornar algo
assim obrigatório, será
um pouco chato
exigir que outro usuário faça isso
de forma consistente Então, o que realmente fazemos lá é chamar uma função int, e isso é algo que está
embutido em todas as classes. Então, o funk sublinha o INIT, abra e feche E é aqui que podemos ter uma lista definida de parâmetros
que precisamos inserir. E essas são todas as coisas
que serão definidas como padrão assim que nossa
classe for criada. Então, vamos
em frente e entraremos, vou dizer um novo nome. E então faremos nova
era e nova, certo? E então tudo o que vamos
fazer é dizer que o nome é igual ao novo nome. Vamos dizer que a idade é igual, igual à nova era, e o tipo é igual ao novo tipo. Agora, quando voltarmos
ao nosso script de teste, você verá que
temos um erro. Pelo menos devemos ter um erro que apareça. Aqui vamos nós. E isso é porque agora
temos que ter discussões. Então, dentro do novo interior
da nova chamada aqui, esses são todos os parâmetros que devemos preencher
para nossa função int. Então, precisamos de um nome,
uma idade e um tipo. E, novamente, podemos chamá-los
pelos tipos de sua string
e string que você vê quando
chegamos aqui agora, precisaremos preencher isso, então vamos prosseguir para que
possamos colocar um nome lá. Digamos morcegos. Nosso segundo argumento é nossa
idade, que podemos colocar em duas. E então precisávamos de um tipo. Digamos que cachorro está bem. Vamos em frente. Nós podemos executar isso. E agora
vemos tudo isso incorporado. Esta é minha bolsa de estimação. Ele tem
um cachorro e tem 2 anos Agora, tudo isso é preenchido. Nós
condensamos isso porque não precisamos fazer isso,
não precisamos escrever
três
funções diferentes para alterar isso de nosso animal de estimação Em vez disso, simplesmente
colocamos tudo dentro do
nosso in it ou da nossa função
inicializada que vem
reconstruída em todas as classes Certo. Espero que isso
lhe dê uma ideia do que são classes e como
podemos criá-las e como
podemos realmente usá-las
dentro do nosso código. Uma classe pode ser acessada para qualquer script, ou melhor, você pode criar uma nova instância
dessa classe a partir de qualquer script. E você pode criar
uma classe apenas para ter alguns utilitários e
economizar tempo Eu apenas o trago em um
utilitário e chamo algumas funções específicas
que você pode precisar em todos os lugares, ou você pode usá-lo para
criar um objeto, como, neste caso, uma classe de animais de estimação ou,
se você estiver criando um jogo, talvez uma classe inimiga, e então esse inimigo
teria sua própria saúde seu próprio ataque e seu
próprio conjunto de informações.
21. O que vamos fazer(espaço preenchido): Tudo bem, esta semana, vamos aumentar um
pouco as coisas e, em vez de
escrever apenas uma mensagem de texto,
como fizemos na semana passada Nesta semana, vamos
criar ou
recriar um antigo jogo de dois D
dos anos 80 chamado Agora, isso nos
dará a chance de
trabalhar com um controlador de dois
reprodutores D. Colisões. Talvez
entremos em algumas partículas. Podemos trabalhar com alguns geradores. E, como você vê, se você
nunca jogou Frogger antes
ou nunca ouviu falar dele, veja aqui,
vamos trabalhar
com a interface do usuário para heads-up display Temos pontos que
precisaremos acompanhar. Encontre meu mouse lá
por um segundo. Mas não só isso, mas também vamos ver se vai
mostrar isso aqui? Ok, então temos uma certa
quantidade de sapos por jogador. Obviamente, não
precisamos colocar moedas. Mas esse é essencialmente
o jogo aqui. Portanto, temos duas pequenas zonas seguras nesta pequena área roxa. Temos uma estrada
no meio que tem cinco faixas de tráfego
alternando para frente e para trás E se o sapo for
atropelado por um desses carros, eles morrem e o jogador perde uma vida. Eles
chegam ao topo. Eles podem pular nas
tartarugas e nos troncos para
entrar na zona segura Se eles pousarem na água,
isso também é uma falha. que eu acho que agora que
você pensa sobre isso, meio que não faz muito sentido,
já que é um sapo Mas aí está. Essa é a ideia do que
vamos criar, e é isso que
Frogger é, se você nunca jogou ou ouviu falar dele
22. Criando o livro de histórias: Tudo bem, bem-vindos,
pessoal. E hoje, vamos começar a criar
nosso primeiro jogo. O que vamos
criar hoje é, na verdade o livro de histórias do nosso MadisGame E esse livro de histórias conterá
todas as nossas histórias , bem como as instruções que
pediremos ao jogador Agora, se você quiser,
pode ir em frente e criar isso em um projeto totalmente novo. Vou
seguir em frente e excluir nossos pequenos exemplos aqui
que estávamos usando. Quando você estava aprendendo
o idioma aqui, basta
selecioná-los e excluí-los. Dessa forma, posso
começar do zero. E como vou
manter todos os nossos projetos dentro desse
único projeto aqui, vou criar
uma nova pasta e chamá-la de MDLibs Novamente, eu
recomendaria que você criasse um projeto totalmente novo Dessa forma, você pode exportar
tudo individualmente. Tudo bem, então seguimos
em frente e temos isso. Temos nosso MadIpsFolder,
para o seu projeto. E eu vou seguir
em frente e clicar na minha pasta. Se você estiver iniciando
um novo projeto, basta
clicar com o botão direito do mouse
em um espaço vazio. E eu vou
criar um novo script. Vou
criar um roteiro aqui,
e vou
ligar para essa turma de contos e clicar em Preate Tudo bem Agora posso prosseguir e a minha não caiu na minha pasta porque
cliquei do lado de fora,
então vou
clicar com o botão direito do mouse e movê-la para
onde eu gostaria E eu o tenho dentro da
minha pasta aqui, certo? Eu vou abrir isso.
Podemos estender Não, tudo bem. Não precisaremos de nada disso porque
essa aula só
vai conter
algumas informações para nós. Então, vou
colocar um livro de histórias com o nome da classe, e
precisaremos de extensões para isso Não, acho que não estamos. Então, vou seguir em frente e mudar tudo isso para
que tenhamos um
recomeço completo aqui. Tudo bem, então é aqui que
vamos criar nossas histórias, e nossas histórias serão mantidas dentro de uma variável que é o tipo
up dictionary Tudo bem, então eu vou
criar uma variável chamada Histórias. E isso vai
ser um dicionário. E como é um dicionário, vou usar
Enter para abrir isso. Lembre-se de
que o dicionário é indicado
pelas chaves que cercam E para eles,
posso apenas dizer a história um e dois pontos,
essa será a nossa chave E agora precisamos de um
valor para isso. E esse valor também será um dicionário porque
precisaremos de
duas informações
aqui dentro da história. Vamos precisar
da história real. A e isso será
apenas uma string vazia por enquanto. E então também terá um
para nossos adereços. E isso vai
ser apenas uma matriz. Então, vamos ter
colchetes aqui. E esse é o
modelo que
vamos usar para
todas as nossas histórias. Então, vamos
ter a história um, história dois, história três, história quatro, etc E tudo o que vamos
fazer é seguir em frente e incorporar isso. Então, por exemplo, para a história ,
diremos: vamos
ver o que queremos colocar aqui? Tudo bem, então eu fui em frente e criei minha
pequena história aqui Então, um dia, a porcentagem S. Agora, porcentagem S é apenas um
espaço reservado para qualquer string E podemos substituir isso mais tarde por qualquer coisa que
o usuário insira. Então, esse percentual S, nesse caso, funcionará como
nosso espaço em branco em nossa história. Então, um dia, o espaço em branco foi para o espaço em branco para receber uma missão. Essa missão era ir até Blank
para recuperar Blank, certo? Então, temos essa
pequena história aqui, e lá vamos nós. Se você quiser dividir a
história em várias linhas, podemos facilmente fazer isso. Então, ao fazer isso colocando
nossa barra aqui no final e depois na próxima
linha, temos um sinal positivo Ele vai adicionar essa
string a essa string, e agora podemos ter tudo
junto em um só lugar. Mas não só isso, é
muito mais fácil ver quando está
tudo embutido ou
em um site como este Agora, eu fui em frente e imprimi isso com um int apenas para fins de
teste,
apenas para ter certeza que não há problemas
acontecendo, nem bugs estranhos Lá vamos nós. Estamos prontos. Agora, para nossos prompts, essas
serão cadeias de caracteres dentro
dessa matriz dentro dessa E à medida que avançamos,
um dia, o espaço em branco. Então, esse espaço em branco faz
sentido se for um substantivo, então podemos seguir em frente e
simplesmente digitar o substantivo E o que vem a seguir?
Fui para o espaço em branco, então este vai ser um lugar. Nosso próximo a receber uma missão. Essa missão era ir
até o caminho para onde ir, e esse será outro
lugar para recuperar algo Isso seria apenas mais um substantivo. Tudo bem? Então, é
basicamente assim que vamos trabalhar com nossos prompts. Então, continuamos.
Temos um substantivo, depois um lugar, depois outro lugar
e depois um substantivo, e isso preenche todas as nossas opções
aqui Isso nos dará
coisas suficientes para preencher nossos espaços em branco. E tudo o que precisamos fazer agora para mais histórias é colocar
uma vírgula aqui no final, ir para uma nova linha, colar uma cópia do
que acabamos de ter, mudar a história um para a história dois E agora podemos seguir
em frente e criar outra história com mais
algumas instruções, e podemos simplesmente seguir em frente
e fazer isso repetidamente Para termos um
bom livro de histórias completo para usar. Tudo bem, então temos uma
segunda pequena história aqui. Certa manhã, D Baker foi até
Eu fui até Blank U na loja. Para sua surpresa, no entanto, havia um espaço em branco
parando em branco. Agora, eu continuei com o verbo substantivo e Pronow, mas agora
pensando nisso, pronome provavelmente
não faz sentido, porque já
dissemos que era Sua loja, sua surpresa. Então, vou mudar
isso de volta para ser apenas um substantivo, então pare de ser Blaine E você pode simplesmente seguir em frente e
fazer isso continuamente, criar máximo de pequenas histórias divertidas que
puder e realmente
preencher seu livro de histórias E depois de ter seu livro de histórias completamente criado e pronto, podemos passar para
a próxima seção e começar a criar a interface com
a qual nosso
usuário interaja E então vamos realmente começar a criar o código e
fazer com que tudo funcione.
23. Crie a interface: Tudo bem, então vamos
começar a criar a
interface de que
precisaremos para nosso jogador realmente
jogue o jogo Então, agora, temos
apenas uma cena vazia aqui, e vamos
precisar de uma nova. Então, vamos ver o que queremos? Bem, precisaremos que
o player seja capaz digitar algum texto, acordo com
as instruções fornecidas Obviamente,
precisaremos exibir texto na tela para que o usuário saiba quais
solicitações ele precisa, além de ler
a história no final E podemos ir em frente e colocar
um botão lá também. Dessa forma, se o usuário
não quiser pressionar Enter, ele pode clicar no botão
e ainda enviar o texto. Então, essas são três coisas
que
precisaremos , no mínimo, aqui. Então, vamos em frente. Podemos criar. Vou
continuar e clicar em Interface do usuário aqui na
seção criar nó raiz, no lado esquerdo, e isso nos dará
um nó de controle para iniciarmos. Tudo bem. E vou renomear isso para Maine, pois essa
será a principal
fonte aqui do nosso jogo Vou apertar este
pequeno botão de adição logo acima dele com a opção
Principal selecionada, e isso vai
me solicitar a criação de um novo nó. Agora, aqui você está
apenas fazendo todos os objetos diferentes
que poderíamos criar. E lembre-se de que também podemos fazer
isso em código. Estamos apenas fazendo, por exemplo, que vamos
entrar no Controle. E você sabe que eu
vou seguir em frente e pesquisar. Estou procurando por isso. Então, o equivalente a
selecionar isso e
adicioná-lo aqui
seria o mesmo que se tivéssemos um script
em nosso script principal aqui, e apenas disséssemos edição de
linha ponto novo e o
adicionássemos à cena. É exatamente a
mesma coisa que acabamos de fazer aqui, só que estamos fazendo
as coisas visualmente, só porque isso será mais rápido
no final do dia E se tivermos as ferramentas
para acelerar a produção, podemos muito bem tirar
proveito delas. Vou pegar
a pequena alça
laranja
da laranja aqui e pequena alça
laranja
da laranja aqui esticá-la E eu vou continuar
e, enquanto isso estiver selecionado, vou para
o topo da minha tela. Clique. Lá vamos nós. Este pequeno ícone
ao lado da âncora, e você verá um
pop-up para predefinições de âncora E vou selecionar
o
que está no centro
da minha tela. Lá vamos nós. Dessa
forma, sei que meu campo de texto sempre
estará bem no meio. Tudo bem. Então, agora esse objeto
tem um monte de propriedades ou você também pode
chamá-las de variáveis,
certo, que estão nelas que podemos acessar. E um deles é o texto do
espaço reservado. E podemos ver isso se dermos
uma olhada no
lado direito do inspetor Podemos ver o texto do
espaço reservado aqui. Agora, podemos digitar aqui, e isso dará ao nosso usuário uma ideia do que ele
deve digitar. Assim como você acessa um
site e ele pode dizer e-mail no campo de e-mail
e senha nesse campo. Então, vamos dizer enviar
prompt, ponto, ponto, ponto. Dessa forma, nosso usuário
sabe que é aqui que ele envia
sua solicitação. E vou renomear minha edição de linha usuário
que você deseja
chamá-la de prompt de usuário Não, vamos chamá-lo de prompt,
você quer ir para prompt de texto, campo de
aviso. Envio imediato. Pronto, porque enviamos nossa fonte aqui ou não
, desculpe Então, vou continuar com isso e ligar para o envio imediato. Agora, eu
mencionei que queria um botão, então vou selecionar Principal novamente. Eu quero que esse seja o dono. Vou digitar o
botão na parte superior. E agora eu tenho um botão, e vou definir o texto desse
botão para dizer apenas: Ok. E eu vou fazer a mesma
coisa com o botão selecionado, vou selecionar o botão
na parte superior ao lado da
âncora e selecionar o centro Dessa forma, ele pode ser centralizado. E eu vou
segurá-la com um clique esquerdo, depois vou
segurar a tecla Shift e deslizá-la para a direita se
eu conseguir pegá-la aqui Aqui vamos nós. Assim
mesmo. Lá vamos nós. Agora, acho que algumas histórias
podem ficar um pouco longas. Então, vou pegar
os
dois, meu prompt e meu botão o. E para isso, eu simplesmente
prossegui e você pode clicar com a tecla Shift
ou Control Click. De qualquer forma, trabalharemos por aqui. Vou pegá-lo na minha interface de usuário e segurar a tecla Shift para que possamos
mantê-lo em uma linha reta, e vou movê-lo um pouco para
baixo para que tenhamos um pouco mais de espaço
na parte superior, caso nossas
histórias fiquem um pouco longas. OK. Então, essas âncoras mostram
onde nosso objeto estará em relação
a esse ponto na tela Portanto, essa âncora está no
ponto morto da nossa tela. Portanto, independentemente do
tamanho da janela, esse campo de texto, essa edição de linha e esse botão OK estarão sempre nessa distância, aproximadamente do
centro. Então, isso quase atualizará
automaticamente sua posição com base nas
âncoras e no tamanho da janela O que é ótimo para nós, é porque nunca
sabemos o tamanho de uma tela Vamos ver. Partindo daqui, o que
mais precisamos? Bem, precisaremos
exibir algum texto. Vamos ver. Poderíamos usar um rótulo para solicitar ou mostrar
nossas informações. Também poderíamos usar um Rich Text, que eu acho que
vamos usar um thad Então, vamos
adicionar outro em nossa cena, e esse
será um rótulo de rich text. E eu vou tirar essa caixa
laranja, essa alça. E acho que vou
colocar as âncoras
no centro para que tudo
fique relativo aqui Clique em segurar a tecla Shift
e abra a tecla. E acho que
isso bastará para muitas de nossas informações.
Qual é o tamanho desse texto? Sim, acho que vai ficar bem. Tudo bem, vamos ver. Etiqueta Rich Text, vou
renomeá-la para
o meu texto de exibição Tudo bem. Então eu acho que isso é tudo que
vamos precisar. Vou clicar em
Controles e salvar minha cena. Aqui está dentro da minha pasta. E agora, se fôssemos executar
isso, não teríamos problemas. Podemos ver que tudo
funcionou perfeitamente bem aqui. Tudo parece bom. Podemos
digitar dentro de nossos livros. E eu vou
procurar a janela, para que eu
possa te mostrar isso aqui. Agora, será
importante que você veja
a janela. Aí está. Você pode ver que podemos digitá-lo e excluir coisas dele. Incrível. Podemos
apertar o botão OK. Fantástico. Agora, esse plano de fundo é um pouco insípido.
É um pouco chato. Então, o que
eu vou fazer é ir até o
Google e ir em frente
e pesquisar o Blackboard Aí está. Procure
por quadro-negro, quadro-negro, o que você
quiser procurar E vou
seguir em frente e escolher uma imagem
aleatoriamente e salvá-la. Agora eu só tenho que descobrir
onde estão minhas pastas. Aqui. Salve,
volte para Gato. E aí está. Podemos
vê-lo salvo aqui. Dentro da minha pasta.
Então, vou adicionar mais
um objeto ao meu
principal aqui na minha cena. E essa será uma textura reta que eu
simplesmente renomearei E vou
arrastar
aqui a imagem do Blackboard que eu criei ou, desculpe, não criei e que
encontrei no Google E com o fundo
selecionado, a textura reta, vou arrastá-lo até
o slot de textura no lado direito,
dentro
do inspetor, e soltá-lo E se precisar, você alterará o tamanho
da expansão aqui e o alongamento, se necessário, para alterar
o tamanho e ajustá-lo Por exemplo, se definirmos isso para manter o aspecto, ele
não se moverá, mas se mudarmos nosso
modo de expansão para ignorar o tamanho, por exemplo, vamos lá. Podemos ver que podemos continuar com isso. E se apenas mudarmos o
aspecto de manutenção para a escala, vamos lá. Agora podemos
ampliá-lo para atender às nossas necessidades. Agora, o importante é que você
veja esse contorno azul aqui. Tudo dentro dessa caixa é o que poderemos
ver dentro da nossa janela. Então, vou
torná-la um pouco maior do que a nossa janela só para ter certeza de que está
completamente coberta. E nossas âncoras
no canto superior esquerdo. Agora, como pano de fundo, isso não vai funcionar. Então, vou ajustar minhas âncoras e selecionar a
que está totalmente destruída E isso vai colocar
um pino em cada canto. Isso
garantirá que, independentemente do tamanho da nossa janela, esse plano de fundo sempre
a preencherá. Tudo bem. Então, agora temos um problema. Nossa experiência está
acima de tudo. Não podemos ver nosso botão ou
qualquer coisa que fizemos antes. Bem, isso é apenas por causa
das camadas, essencialmente. Se você trabalhou em
algo como o Photoshop, você estará familiarizado
com as camadas aqui Tudo o que precisamos fazer é
pegar nosso plano de fundo
e, na verdade, temos que
separá-lo. Porque o que está
no topo estará por trás
de todo o
resto na parte inferior. Eu sei que é o
contrário no Photoshop. Na parte inferior geralmente está
o que está por trás de tudo. Entre aqui, dê uma olhada, algo que você tem que
lembrar. Mas lá vamos nós. Com isso, temos nosso visual todo configurado aqui e
estamos prontos para começar a usar parte
do código para fazer nossos botões
e tudo mais funcionarem e começar nosso jogo
24. Selecione a história e dê inspiração para o jogador: Tudo bem, vamos
começar a fazer parte do nosso código agora Vamos colocar nosso script
em nosso nó principal aqui. Então, vou apenas
adicionar um script. Vou deixar o meu
chamado Min e clicar em Criar. Tudo bem, então vamos ver.
O que precisamos fazer? Bem, precisamos acompanhar qual é
a nossa história atual. Então, vamos
criar uma variável para isso. História atual. Isso vai ser tudo. Vai ser uma
matriz no nosso caso? Vamos selecionar uma história, e isso vai nos dar Não, isso vai
nos devolver um dicionário. Mas podemos realmente esconder isso e
transformá-lo em um
dicionário. Lá vamos nós. Precisaremos acompanhar
as palavras de nossos jogadores, certo? As palavras que eles
enviaram. Então, vamos
dizer as palavras dos jogadores, e essa será uma
matriz à qual podemos adicionar. Agora, vamos usar uma
palavra-chave aqui chamada de pronto. E na versão 4.1 aqui, na verdade, temos que usar isso no símbolo para
usar essas palavras-chave. Coloque isso no símbolo e
use quando estiver pronto. Então, podemos seguir em frente e criar
nossa variável normalmente. E esse
será o texto do nosso jogador. O que será igual ao nosso envio imediato que
queremos receber Então, para obter esse nó, existem
algumas maneiras de fazer isso. O mais fácil é
usar esse cifrão, que
significa simplesmente obter um nó. E a partir daqui, temos um acesso fácil ao nosso envio
imediato. Como você vê, só
precisamos descer um nível aqui. E se começarmos a digitar, veremos o preenchimento automático
aparecer para nós e
clicarmos nele, pronto Sempre que quisermos
acessar esse objeto, podemos simplesmente digitar o texto do player. Agora, vamos
fazer isso também para nosso texto de exibição e nosso botão. Então, vou dizer que o texto exibido é igual ao que acabei de
chamar de texto exibido. Incrível. E teremos mais
um para o nosso botão. Precisamos do botão?
Não, na verdade não temos. Não vamos
precisar de um para isso. Não vale a pena usar esse botão
padrão aqui. OK. Então, vamos prosseguir e remover o
processo de lá. Então, o que vamos
precisar, vamos ver. Precisamos selecionar
uma história, certo? Então, temos que atribuir
nossa história atual
e, para manter as coisas organizadas, vamos criar uma função para manter nossa história atual definida. É uma
história atual ambientada no funk. É assim. E como essa é uma função
separada, vou colocar duas
linhas no meio. E como definimos como vamos definir
essa história atual aqui? Bem, não retornaremos nada no
final disso porque
vamos atribuí-lo diretamente
à nossa variável. Então, para conseguir isso, precisaremos
obter um número aleatório ou selecionar uma história aleatória. Então, vou criar uma
variável chamada Stories, e essa será uma matriz,
que será igual
à nossa classe de livro de histórias dot StresOH E olha, não podemos acessar isso. Então, vamos voltar para
nossa aula de livros de histórias
e, para evitar a criação de
um novo objeto para isso, já que tudo o que precisamos é
acessar as histórias
que estão nela, usaremos a palavra-chave estática
que mencionamos na primeira semana No momento, voltamos
ao nosso script principal e podemos fazer Storybook dot STRS Não
consigo atribuir um valor do
tipo dicionário à variável, então queremos obter nossas E neste dicionário, vamos usar as chamadas teclas de ponto, parênteses abertos e fechados E o que isso
fará com que essas teclas chamem aqui, que podemos
chamar em um dicionário, ele retornará uma matriz
ou uma lista da história um, história dois, história três, história quatro, etc Então, isso vai ter todos os nomes
de nossas pequenas histórias aqui. Tudo bem. Agora, a partir daqui, temos que selecionar um aleatório. Então a questão é:
qual deles queremos? Bem, vamos
criar uma variável chamada história selecionada aqui. E, claro, isso
vai ser apenas uma sequência porque todas as
nossas histórias são cordas. Então, faz sentido. E vamos
acessar nossas histórias aqui, certo, histórias de Ray. E na versão 4.1, podemos simplesmente
selecionar uma escolha aleatória. Isso é tudo o que temos que fazer,
e ele
selecionará aleatoriamente uma história para nos
devolver E isso é tudo o
que precisamos fazer para isso. Agora, tudo o que precisamos fazer é seguir em frente e definir nossa história atual. Então, podemos contar a
história atual. Vamos ver. Acabamos de configurá-lo para
isso. Então isso deve nos dar um
dicionário cheio. Ambos, isso
deve ficar bem. Então, vamos apenas dizer que a
história atual é igual à história selecionada. A força não pode ser atribuída
a um tipo de variável. Ah, isso mesmo. Tenho que
escrever isso de forma diferente. Storybook dot Storys e depois vou usar
esses colchetes aqui porque queremos acessar a
história que está dentro dele E a que queremos acessar
é a história selecionada, certo? Então, novamente, vamos
repassar isso. Estamos criando uma
variável chamada histórias, que é uma matriz ou uma lista. E isso está sendo atribuído a todas as diferentes histórias, certo, às chaves do
nosso dicionário. De todas as nossas histórias
dentro do nosso livro de histórias. Então, agora as histórias contêm todos os
nossos títulos de pequenas histórias. E então a história selecionada é
uma sequência de caracteres que está sendo definida como uma história aleatória de
lá, fora da nossa lista. E então estamos configurando
a história atual que
já criamos no topo,
que é o dicionário. Estamos igualando isso
à história que está dentro
do nosso livro de histórias, a história que
selecionamos. Tudo bem. E podemos ver isso funcionar facilmente se simplesmente subirmos
até nosso bloco pronto aqui, e precisarmos realmente ligar e
definir a história atual, porque obviamente você
fará isso
no início do jogo. E então eu
vou continuar e imprimir nossa história atual. Dessa forma, podemos
ver se está funcionando porque
já está vazio por padrão. Então, se eu imprimir isso antes,
definimos nossa história atual, devemos ser capazes de ver isso, e eu vou apenas
interpretar essa cena. Vamos lá, para que possamos ver
que está vazio na parte superior. E depois de prepararmos nosso serviço, temos a única manhã em que
o padeiro ficou
em branco para abrir sua loja,
para sua surpresa, no entanto Parece que
temos a primeira história. Vamos fazer isso de novo.
E aqui vamos nós. Temos uma história completamente
diferente aqui agora. O céu vazio era um
lindo tom de branco, assim como o espaço em
branco exibia o espaço em branco E podemos ver que também temos todas
as nossas instruções aqui. Isso é fantástico. Estamos todos aparecendo aqui.
Tudo está funcionando muito bem. Agora temos uma história com
a qual trabalhar. Nós os selecionamos aleatoriamente. Agora temos que nos preocupar em como
avisar o jogador, certo? Bem, não precisamos
mais
dessas declarações impressas porque sabemos
que estão funcionando bem. Então, nossa história foi definida. Como podemos avisar nosso jogador? Bem, simples.
Vamos descer criar uma nova função. Vamos
chamá-lo de prompt player. E o que vamos
fazer é ver. Vamos direto ao
nosso texto de exibição. E queremos acessar
a propriedade
de texto disso para que possamos defini-la. E para remover qualquer confusão em
potencial, vamos dizer: vamos
usar mais iguais aqui e ver como isso se parece com
a nossa E eu vou dizer, May, eu tenho o que
vamos acrescentar a
isso, que serão nossos bailes de formatura
atuais E a solicitação que perguntaremos sobre como sabemos qual delas queremos será baseada nas palavras
de nossos jogadores que criamos aqui em
cima, certo? Palavras dos nossos jogadores. E vamos
basear isso no tamanho porque lembre-se, quando estamos trabalhando com uma lista, começamos a contar em zero, um, dois, três, certo? Então, se o tamanho do nosso jogador for zero, isso significa que ainda
não temos inscrições Então, vamos pegar o
primeiro item dessa lista. Se um item do
jogador tiver enviado uma palavra
, receberemos o
segundo item e assim por diante. Tudo bem, então podemos avisar
o jogador dessa forma. E eu sei que está
ficando um pouco longo
desse lado , mas vamos ver. No momento, isso é tudo o que
precisamos para
alertar o jogador. Tudo bem. Então, o que
vamos fazer a partir daqui, depois de selecionarmos
a história atual, já
voltando,
podemos ligar para o prompt
player a partir daí. E isso deve ser tudo o que precisamos. Então,
vamos experimentar. Oh, parece que me
deparei um problema aqui,
e o que é isso? Vamos dar uma olhada. Ah,
sim, eu vejo o erro aqui. Diga-me instruções não existem porque
usei
um P maiúsculo dentro
do meu livro de histórias Então, se eu fizer
disso um P maiúsculo, isso deve resolver meu problema. E lá vamos nós. Então está nos
perguntando, posso ter um verbo E então eu posso ir em frente
e digitar aqui. Você pode pressionar Ok, pressionar Enter. Nada vai mudar
aqui no momento. Mas você percebe como
eu tive que clicar nessa caixa quando começamos. Então, se eu simplesmente reiniciar isso, e agora eu tiver que vir até aqui, eu mesmo terei que clicar nele. Bem, por que não
automatizamos isso? Vamos
pegar o texto do jogador. E vamos chamar
algo chamado Grab focus. Agora, quando executamos
isso, pronto, já está lá,
e podemos
começar a digitar imediatamente Portanto, não precisamos
perder tempo. Tudo bem. Então, para continuar
alertando o jogador, temos que dar uma olhada em nossas palavras
enviadas, certo? Na verdade, temos que
enviar essas palavras. Então, para isso, teremos que
conectar alguns sinais para sabermos
quando as coisas estão acontecendo. Então, vou clicar no meu envio imediato
na minha cena. Em seguida, vou passar para
a direita e clicar
na guia que diz node. E aqui podemos ver todos
os sinais padrão que estão aqui. E o que estamos
procurando é o texto enviado na seção de edição de
linha. E, basicamente, sempre que
pressionarmos a tecla enter, ele enviará
qualquer pedaço de texto que o usuário tenha digitado Então, vou seguir em frente
e clicar duas vezes nele. Tudo bem, então você deve
ver uma tela como essa, e tudo isso é
ótimo porque
não temos nenhum
script nelas, e essa é azul porque é disso que estamos tentando conectar
o sinal. Então, vamos selecionar nosso principal porque
tem nosso script nele, e vamos clicar em Conectar. Se você quiser renomear
a função aqui, você pode, eu não vou Vou deixá-lo
com o nome padrão aqui e vou
clicar no botão Conectar. E você o verá adicionado aqui na
parte inferior do nosso script. Vou apenas
segurar a tecla Alt e usar a tecla de seta para cima para
movê-la alguns espaços. Pronto, tire
isso do caminho. Vá. Isso está fora do caminho. Mas lá vamos nós. Então, vemos
no nome dessa função, que será acionada a
partir desse sinal, ela executará
esse bloco de código. Agora podemos ver que temos um novo texto, que é uma string que
é passada para nós. Então, esse novo texto é
o que foi digitado dentro dessa linha. Tudo bem. Então, quando um pedaço de
texto é enviado, o que precisamos fazer é adicioná-lo
às palavras do jogador. E como precisaremos
fazer isso potencialmente várias vezes ou pelo menos
em vários locais, vamos
criar uma função para isso. Funk, pai, vamos ver como
eu chamei isso? Adicione palavras ao jogador para que
possamos manter as coisas limpas. Aqui vamos nós. E tudo o
que vamos fazer dentro dessa função é
acrescentar nossas palavras, certo Palavras dos jogadores. Anexar. Agora, anexe Essa chamada aqui só nos permite
adicionar coisas à nossa matriz, adicionar itens à nossa lista. Então, tudo o que
digitarmos aqui será adicionado e tudo o que adicionaremos é texto do
jogador, texto com pontos Agora, poderíamos tornar isso
possível de forma mais limpa, mas isso pode causar alguns problemas
em potencial posteriormente. Quem sabe? Então, vamos
fazer isso dessa maneira por enquanto. E o que seria bom é
se ele exibir texto, se
apagarmos isso da nossa tela, então o tornarmos uma string vazia e
vazia, eu
acho que você poderia dizer. Vamos dizer
exibir ponto de texto. E vamos ligar de forma clara, e isso só vai
esvaziar tudo. E o que isso vai
fazer é
remover o aviso que
está na nossa tela,
solicitando um verbo
ou um substantivo ou qualquer outra coisa remover o aviso que
está na nossa tela,
solicitando um verbo
ou um substantivo ou E para mostrar visualmente ao nosso player que nosso texto
foi enviado, podemos seguir em frente e
fazer isso com o texto do nosso player também. Vamos dar uma olhada em
como isso está acontecendo agora. Temos que ligar de volta para
cá antes que esqueçamos. Então, em nosso texto enviado, chamaremos adicionar palavras ao
jogador. Tudo bem. Então, se prosseguirmos e executarmos isso
e dermos uma olhada agora, você diz: “Posso ter um verbo”
e diremos “correr” E eu apertei Enter. E
você vê que nosso texto aqui embaixo foi esvaziado e nosso quadro no topo
aqui também foi vazio Então isso é ótimo. Parece que nosso texto foi enviado e estamos prontos para atualizá-lo
com uma nova solicitação. Fantástico. Tudo bem. Então, para continuar
nossa solicitação, vamos
configurar parcialmente o que precisaremos
para configurar o final
e reiniciar o Então, vamos deixar essa parte de fora e voltar para essa
função no futuro. Então, agora,
vamos usar isso apenas para verificar ou chamar de verificação das palavras
do jogador Lang Então eu não quero que você se
confunda com esse nome. Fará mais
sentido quando
adicionarmos quando estivermos verificando
se o jogo acabou. Então, vou dar uma
olhada nas palavras dos jogadores, Lang Tudo bem. Então, o que
vamos fazer é a maneira como podemos expressar isso. Vamos ver. Podemos dizer se vamos
usar uma declaração if aqui. Então, vou dizer se as palavras dos
jogadores têm tamanho. E lembre-se, isso só
vai nos dar a quantidade de itens que estão dentro das palavras do
nosso jogador aqui. Então, a quantidade de palavras que já
enviamos. E vamos
dizer que isso é igual
à nossa história atual, as instruções, os potes do baile Pronto, ponto avisa. Tamanho do ponto porque lembre-se de que
nossas instruções são uma lista. E, claro, temos
um erro aqui até
colocarmos nosso cólon lá
no final da linha Então, vamos dizer que
se o jogador
enviou a mesma quantidade de
palavras que recebemos as instruções
, podemos fazer alguma coisa Mas não queremos
fazer isso, certo? Porque queremos dizer,
se não, assim. Porque queremos dizer: Ah, se o jogador ainda não
enviou palavras suficientes
, precisamos
avisá-lo novamente, e é exatamente isso que
vamos fazer. Vamos ligar para o
Prompt Player. Tudo bem. E quando
chegar o próximo vídeo, voltaremos e
reescreveremos essa função Mas, por enquanto, isso deve funcionar para nós. Vamos
dar uma olhada. Então, posso ter um adjetivo? Claro. Vamos escolher bonita. Você pressiona Enter e
a coisa é atualizada. Mas, na verdade, não estamos verificando tamanho do
nosso player em nenhum lugar, então você vê por que isso é um problema. Então, vamos ver onde
fazemos isso? Fazemos isso quando adicionamos palavras
aos nossos jogadores. Então, depois de adicionarmos a palavra e realmente enviarmos
essa palavra para nós, verificaremos o link e veremos se podemos continuar
jogando e, em caso afirmativo, solicitaremos ao usuário
a próxima. Vamos ver. Posso ter um verbo Sim, vamos com RN ou Run. Lá vamos nós. Posso
ter um substantivo, cachorro Posso usar um adjetivo? Bonita. Posso ter advérbio. Sim, rapidamente. Posso ter um substantivo Espero que tenhamos
muitas coisas aqui. Vermelho. Posso ter um
verbo terminado em ING Roubando. E aí está, nossa coisa acabou.
Estamos sem avisos. Ainda não temos nossa história, mas temos todas as nossas
instruções acontecendo lá Agora, podemos ver que
nosso texto exibido na verdade não foi
apagado, o que é interessante. Então, em vez de chamar clear dentro de nossas palavras
para adicionar ao player, vamos pegar a propriedade text e defini-la como uma string vazia. E vamos ver como
isso funciona aqui. Eu tenho um verbo, correr. Lá vamos nós. Então, agora
nós o atualizamos dessa forma. Não sei por que o
clear não está funcionando. Talvez haja um bug lá
agora. Eu não sei. Mas podemos simplesmente
limpá-lo manualmente configurando-o para
uma tela vazia. E se você quiser manter isso
funcionando como um em cada linha, se quiser continuar assim, um em cada linha,
tudo o que precisamos fazer
é adicionar um mais igual igual e fazer esse back-end Ou é um atacante? Acho que
é o atacante aqui, e essa será uma nova linha. Então, se dermos uma
olhada dessa maneira, ela pode ter uma execução b, e na verdade não
vai acontecer dessa maneira. Eu sempre misturo esses dois para saber em qual direção
ele deveria ir. Adjetivo. Bonita. Lá vamos nós. Agora podemos ter um novo otorrinolaringologista
em cada linha para perguntar a você. Então, se você preferir
que seja assim, é assim
que você pode fazer esse
pequeno ajuste. Tenha um substantivo. Sim, cachorro terminando com ED. Estou desenhando um
espaço em branco aqui agora. Não sei por que, mas
você entendeu. Assim, podemos ter uma nova linha qual você pode
esclarecer
completamente na qual você pode
esclarecer
completamente a
forma como deseja que seja apresentada. Tudo bem. E acho que isso é suficiente por hoje, porque
acho que tudo o que precisamos agora é basicamente
terminar nosso jogo, agora é basicamente
terminar nosso jogo,
seja
terminá-lo completamente, contar nossa história, ver se o jogador
quer jogar novamente e todas essas coisas divertidas. Então, uma nota rápida aqui
antes de decolarmos. Em vez de avisar o
jogador aqui no topo, o que podemos fazer agora é verificar o
tamanho das palavras do jogador em nosso menu pronto, e isso deve nos
configurar da mesma forma visual Sim, lá vamos nós. Tudo bem.
Então aí está. Temos muitas das nossas configurações de
jogo aqui. É simples em termos
de videogames e oferece a chance de realmente usar as coisas que
abordamos na primeira semana, independentemente de qual versão
você fez as duas. Então, estamos trabalhando com variáveis, diferentes tipos de dados, certamente trabalhando com funções para manter tudo
limpo e limpo. Estamos usando
programação orientada a objetos aqui, com nosso livro de histórias, estamos
incentivando nossos jogadores Você está aprendendo algumas coisas novas. Se você não usou
a versão alternativa, você aprendeu sobre acrescentar Você aprendeu sobre o Grab focus.
Independentemente de qual deles
você já passou, você aprendeu sobre
escolher aleatoriamente e teclas. Então, você aprendeu
muitas coisas
além do que
aprendemos na primeira semana, seja qual
for a versão pela qual
você tenha passado, talvez tenha passado pelas Mas vou parar de
divagar por aqui
e nos vemos na
próxima, onde encerraremos este jogo para que possamos
ter uma versão totalmente jogável
25. Terminando e tocando novamente: Tudo bem, pessoal,
vamos encerrar isso. Vamos terminar nosso jogo. Precisamos verificar se
nossa história está pronta. Precisamos realmente
contar nossa história, e vamos usar nosso botão OK para
ter dois usos aqui. Portanto, funcionará
tanto jogar novamente
com uma nova história quanto enviar nosso texto. Então, vamos começar com
isso com nosso botão aqui. Então, vou
selecionar meu botão, e vou conectar
o sinal, pressionar e novamente, vou conectá-lo à minha rede principal, e vou deixá-lo
com o nome padrão aqui. E só para deixar
as coisas um pouco claras, acho que quero
aumentar um
pouco e colocar meus dois
espaços entre eles. Dessa forma, você pode ter meus dois sinais aqui um
ao lado do outro. Tudo bem, então agora, quando nosso botão for pressionado, podemos
usar apenas adicionar palavras ao jogador, e isso funcionará
da mesma forma que se pressionássemos Enter no teclado Isso deve funcionar perfeitamente
bem, exatamente da mesma forma. Então, verbo, Ron, clicamos em Ok, vamos agora, Dog, ok Tudo bem, então tudo está sendo enviado, tudo está
funcionando bem. Excelente. Então, temos
que saber quando nossa história termina. Dessa forma saberemos se é hora de
contar nossa história e terminar nosso jogo, ou se você continua jogando
e continua pedindo outra mensagem
ao jogador. Bem, para fazer
isso, vamos
criar uma nova função, chamaremos de I story done. E todo o propósito
dessa função é apenas nos dizer se ainda temos mais
instruções para adivinhar Então, vamos
retornar um valor aqui. E o que vamos retornar é se é verdadeiro ou falso. Serão palavras do jogador, o
tamanho é igual às instruções da nossa
história atual Lembre-se de que queremos
usar dois iguais aqui porque estamos
fazendo uma comparação E isso é tudo o que
vamos fazer. Vamos apenas devolver isso, e isso vai
ser verdadeiro ou falso. Tudo bem, agora, em nossa verificação do tamanho das palavras dos
jogadores, em vez de escrevê-las assim, podemos realmente reformatar E podemos dizer, se eu terminar a história. E, por enquanto, estamos
apenas digitando a palavra pass porque é quando
terminaremos o jogo e adicionaremos um bloco
else aqui Aqui vamos nós. Então, diremos que,
se a história terminar, encerraremos nosso jogo quando escrevermos essa
parte do nosso código. Caso contrário,
avise o usuário novamente. Então, vamos ver o que acontece
se fizermos isso agora. Entramos em adjetivo,
prontos, apertamos o botão de pagamento Fantástico. Nosso texto
ainda capta o aviso Tudo ainda está
funcionando. Incrível. Ainda não quebramos
nada. Isso é ótimo. Tudo bem, então como
terminamos nosso jogo? Bem, se a história terminar, temos que terminar o jogo. Então, vamos criar uma
nova função chamada final de jogo e observar como estamos
criando uma função para tudo aqui, que possamos manter
tudo organizado. E dizemos: Ok, bem, estamos tendo um problema
quando o jogo termina, sabemos que devemos vir aqui e ver a função final do jogo. Ou talvez nossa história não esteja
sendo mostrada no final e teremos que ir para
a função que
criaremos aqui em um segundo
chamada Tell Story. Portanto, isso nos ajudará a
restringir quaisquer bugs que
possamos encontrar em nosso projeto. No futuro, sendo
organizado e preparado agora. Tudo bem, então como
terminamos nosso jogo? Bem, o que eu
vou fazer é pegar nossa tela. Você quer usar
nosso texto de exibição? Não. Queremos pegar meus envios
imediatos, certo? Então, queremos obter
o texto do jogador. E o que vamos fazer aqui é, na verdade,
usar o quarto. E o que isso deve fazer é voltar à nossa cena
aqui em dois D, é pegar essa linha e simplesmente
excluí-la completamente da tela. Então, dessa forma, ele não existe mais. Isso é basicamente o que ele
faz. Exclui completamente e remove da memória Então, isso libera essa memória, e é importante fazer isso, não necessariamente neste jogo, mas em outros jogos Digamos que você continue criando
esses novos objetos, mas eles nunca sejam excluídos. Basicamente, você
começará a chegar a um ponto em que
criará vazamentos de memória Então você tem que se lembrar de liberar tudo o que não
precisa mais E, neste momento, não precisamos
mais do texto do nosso player. Tudo bem. Então, o que
vamos fazer aqui a seguir é, na verdade,
alterar o texto em nosso botão. Então, vou pegar nosso botão, aquele cifrão, lembrar
daquele pequeno nó de obtenção, certo? Então, queremos obter o
nó no nó
que queremos obter é o nosso botão. E a razão pela qual estamos apenas
escrevendo a palavra botão é
porque é assim que ela é chamada
aqui em nossa cena. Então, se eu renomear isso
para outra coisa, precisaria
ter certeza de que isso corresponde Então, neste botão,
queremos obter a propriedade de texto dele, e vou configurá-la para
dizer play novamente. E já que estamos nisso, devemos garantir que esteja escrito OK quando se trata de avisar nosso jogador. Tudo bem. Então, vou
colocar isso dentro da
nossa função de prompt player e definir o
texto para dizer: Ok. Tudo bem, agora, a última coisa que
temos que fazer em
nosso final de jogo é contar uma história E isso vai nos dar um erro até criarmos isso, então vamos em frente e,
pelo menos, criar esse nome, contar uma história, e isso agora
é uma nova função. Para contar nossa
história na tela,
tudo o que precisamos fazer é esvaziar
completamente o texto. Portanto, exibir texto com pontos
é igual a uma string vazia. E vou
colocar isso aqui na história de
Side of Tell, caso você
opte pela nova abordagem de linha
ao
convidar seu jogador para cá Então, caso
você esteja fazendo isso, vou limpar
o texto aqui também. E tudo o que fazemos agora é definir nosso texto de exibição e a propriedade de texto daquilo
que podemos ver. E igualamos isso
à nossa história atual. E queremos a propriedade da história. Vou me
certificar de soletrar isso diretamente no meu livro de histórias, história com E temos que preencher todos
esses espaços reservados. Então, a maneira de fazer isso
é apenas fazer um sinal enviado e adicionar o que quisermos. Então, por exemplo,
podemos usar banana, e isso preencherá
nosso primeiro espaço em branco com banana. Agora, temos vários itens. Então, por causa disso,
teríamos que fazer isso na forma de uma lista como essa e entrar em
coma e fazer nosso próximo, certo, tomate e fazer
o próximo e assim por diante. Mas nós já fizemos isso. Já temos nossa lista ou
matriz de todas as nossas strings. Essas são
as palavras para nossos jogadores que criamos e às quais adicionamos todos os nossos envios de texto Então, podemos simplesmente vir aqui
e dizer as palavras dos jogadores. Tudo bem. Então, agora vamos
verificar as palavras do jogador Link, dizemos que a história está concluída e vamos chamar Endgame Tudo bem. Agora, precisamos chamar isso
para outro lugar? Não, mas precisaremos apertar nosso botão de reinicialização
aqui em um momento, vamos continuar e
garantir que isso funcione.
Tudo bem. Então, pode ter um adjetivo. Sim, um substantivo bonito,
rock, um verbo terminado
em ED, Um advérbio, rapidamente,
um substantivo plural floresce.
E lá vamos nós. Podemos ver que nossa linha
foi excluída. Nosso botão agora diz jogar
novamente em vez de OK. E temos nosso
prompt no topo. O lindo céu tinha um
lindo tom de rocha enquanto os alunos se educavam rapidamente
através das flores Agora, eu tenho dois Ss lá. Esse foi meu erro, possivelmente. Isso era algo que eu tinha na minha história? Também é
possível. E não,
parece que isso não estava na história, então a culpa foi totalmente minha. Devo ter atingido S duas vezes. Mas aí está.
Essa é a nossa história, e nosso botão de jogar de novo
não funciona aqui. E a razão para isso é que estamos tentando adicionar as palavras de nossos jogadores. Isso nos trouxe a essa
função por nosso erro. E se
olharmos para isso, parâmetro, novo texto nunca é usado,
tudo bem. Mas o problema que isso está
nos causando é que o
texto do jogador não existe, certo? Não podemos usar as palavras do nosso jogador. Não consigo fazer nada disso. Bem, tudo bem. Nosso problema está na verdade, aqui com
o pressionamento do botão. Porque, com base no fato de
nosso jogo estar pronto ou não, determinaremos se você
deseja
ou não reiniciar o jogo ou avisar
o usuário novamente, correto? Então, estou apenas preenchendo isso. Só não se importe comigo aqui. Se você está seguindo usando
as setas
porque quer,
eu conto, vou devolver
uma piscina porque estamos
devolvendo alguma coisa, e isso
nos dará uma ideia verdadeira ou falsa Todo o resto, estamos
apenas retornando um vazio. Então, estou
passando rapidamente por lá
e preenchendo-os. E eu acho que são todos
eles. Tenho todos eles, certo? Tudo bem, então quando nosso
botão é pressionado, tudo o que precisamos fazer é verificar
se nossa história está concluída Então, se eu terminar a história, e quisermos reiniciar o jogo. Caso contrário, agora toque nele. Vamos chamar
adicionar palavras ao jogador. Então, como reiniciamos o jogo? Bem, para
reiniciá-lo completamente, neste caso, tudo o que precisamos fazer é pegar uma árvore, e
isso vai pegar toda a nossa árvore. E tudo o que precisamos fazer é
chamar recarregar a cena atual, e será a mesma
coisa como se tivéssemos acabado de clicar em Executar
cena atual aqui no topo Se tivéssemos apertado aquele
botão pela primeira vez. Então, quando a recarga da
cena atual for interrompida, devemos estar nessa
situação novamente. Então, adjetivo, então vou
examinar isso para que possamos
ver que temos algo
completamente novo:
advérbio educado . Certifique-se colocar apenas um lá
desta vez, flores Lá vamos nós. OK. Isso é legal. E jogamos novamente. Posso
ter um verbo. Substantivo ranqueado. Biscoito. Outro substantivo, Brownie Certa manhã, o Padeiro saiu
correndo, deveria dizer Corra. Para sua
surpresa, no entanto, havia um biscoito parando,
oh, eu disse Brownie
em vez de Brownie Eu coloquei um R no final. Meus dedos
me traíram na ortografia hoje. Mas agora podemos jogar novamente e começar outra
história. Então, agora podemos continuar jogando isso pelo tempo que quisermos. E esse jogo
funciona totalmente para nós. E se você quiser
adicionar uma história, podemos simplesmente acessar nosso
livro de histórias e você pode continuar adicionando mais
histórias e sugestões, e ele continuará funcionando Não precisamos ajustar nosso
código por nenhum motivo. Acabamos de adicionar outra entrada, história cinco,
história seis , história sete, e podemos continuar com quantas
histórias quisermos incluir. Agora, se você está curioso
sobre esse erro aqui que está em amarelo que
você viu anteriormente, está apenas nos dizendo que o
novo texto não está sendo usado para o sinal M,
e tudo bem. Não precisamos nos
preocupar com isso. É só um erro amarelo, que está apenas nos avisando. E poderíamos desligar isso. Há algumas coisas
que podemos fazer, mas a mais fácil
é colocar um sublinhado aqui no
início. Isso é tudo. Agora, se prosseguirmos e
executarmos
isso, esse erro não aparecerá mais. Portanto, esse sublinhado
no início do seu
parâmetro apenas diz, ignore se não for usado, basicamente Mas aí está,
agora estamos contando nossa história e temos o fim do nosso jogo. Estamos contando
a história ou solicitando que o usuário
continue jogando, e temos ou solicitando o usuário preencha mais
espaços E temos um botão de jogar novamente, caso
queiramos continuar. Tudo bem, então isso bastará
para Mad Libs. Este é um jogo
bastante curto pelo qual passamos. Provavelmente passamos
cerca de uma hora para analisar isso, e você começou a
montar funções,
esses retornos. Se as declarações Else foram usadas algumas vezes,
estamos usando booleanos Estamos usando dicionários,
matrizes, classes. Estamos usando muitas
coisas aqui, embora
seja um
jogo muito simples, eu diria. Bem, com isso,
você o completou. Parabéns. Dê a
si mesmo um tapinha nas costas E estou empolgada em
ver as coisas que você
criará no futuro e estou empolgada em
seguir para o próximo projeto.
26. O que vamos fazer(espaço preenchido): Tudo bem, esta semana, vamos aumentar um
pouco as coisas e, em vez de
escrever apenas uma mensagem de texto,
como fizemos na semana passada Nesta semana, vamos
criar ou
recriar um antigo jogo de dois D
dos anos 80 chamado Agora, isso nos
dará a chance de
trabalhar com um controlador de dois
reprodutores D. Colisões. Talvez
entremos em algumas partículas. Podemos trabalhar com alguns geradores. E, como você vê, se você
nunca jogou Frogger antes
ou nunca ouviu falar dele, veja aqui,
vamos trabalhar
com a interface do usuário para heads-up display Temos pontos que
precisaremos acompanhar. Encontre meu mouse lá
por um segundo. Mas não só isso, mas também vamos ver se vai
mostrar isso aqui? Ok, então temos uma certa
quantidade de sapos por jogador. Obviamente, não
precisamos colocar moedas. Mas esse é essencialmente
o jogo aqui. Portanto, temos duas pequenas zonas seguras nesta pequena área roxa. Temos uma estrada
no meio que tem cinco faixas de tráfego
alternando para frente e para trás E se o sapo for
atropelado por um desses carros, eles morrem e o jogador perde uma vida. Eles
chegam ao topo. Eles podem pular nas
tartarugas e nos troncos para
entrar na zona segura Se eles pousarem na água,
isso também é uma falha. que eu acho que agora que
você pensa sobre isso, meio que não faz muito sentido,
já que é um sapo Mas aí está. Essa é a ideia do que
vamos criar, e é isso que
Frogger é, se você nunca jogou ou ouviu falar dele
27. Tilemap vs nova camada de Tilemap: Tudo bem. Sou eu de novo aqui. E eu só queria intervir
aqui antes de
entrarmos no Frogger.
Você notará que, se
estiver usando uma nova versão, o Tao Map tem esse triângulo
amarelo aqui, e isso
nos dá uma notificação aqui de que esse nó será descontinuado, que significa que será removido do motor Portanto, dependendo de quando
você está assistindo isso, o nó do mapa de blocos
pode não existir mais. E se eu tiver que adivinhar, ele será removido em 5,0 de Gato. É só meu palpite.
Não tenho ideia quando ele realmente será removido. Mas vou mostrar a
alternativa que foi adicionada caso você queira
começar a usar a alternativa. Agora, em vez do Tilemap, bem, se você estiver
assistindo no futuro, você sabe o que usar
para esclarecer qualquer confusão Agora, com o mapa de blocos, temos nosso
conjunto de blocos configurado aqui, certo? E temos todos os nossos
nós, desculpe, não nós, nossas texturas, nossa estrada, água,
o canteiro central e nossa casa E você vê que vamos em frente
e pintamos aqui, certo? Podemos entrar e simplesmente
pintar na tela. E temos várias
camadas aqui em uma
lista suspensa no lado direito, que ainda está aqui
na parte inferior. Agora, isso é o que é diferente. Essas camadas serão
seus próprios nós agora, em vez de terem tudo
dentro de um mapa de blocos. Então, tudo o que faríamos em vez
desse mapa de blocos é adicionar uma camada de
mapa de blocos, certo? Vá até nosso inspetor, conjunto de ladrilhos, abra esse conjunto
de ladrilhos, certifique-se de que ladrilho esteja colocado
aqui embaixo E podemos seguir em frente
e adicionar nossa mediana. Podemos adicionar nossa estrada e
podemos adicionar nossa água. Então, qualquer outra coisa
seria exatamente a mesma, acho
que não tocamos nada, como
colisão ou qualquer coisa aqui Então você não deveria ter que
fazer mais nada lá. E então, assim como no mapa de blocos, você
pode entrar e pintar para poder seguir em frente e ter
certeza de entrar, selecionar seu nó, selecionar
o ladrilho que deseja usar. E, claro, você pode
entrar e começar a pintar, assim como faz com
o mapa de azulejos, certo? Para que possamos entrar.
Podemos ir, bum, boom, colocá-lo,
pegar nosso roxo. Troque meu ladrilho,
pegue nossos roxos, apareça,
preencha os pedaços da estrada Certo. Então você pode vir e
tomar uma cerveja de neve normalmente Agora, o que temos
em uma camada separada é essa seção inicial. Então, o que
faríamos é ir até lá e adicionar uma
segunda camada de mapa de mosaico agora. Pegue outro conjunto de ladrilhos, selecione o conjunto
de ladrilhos na parte inferior e nós traremos aquele ladrilho
inicial. E aí está. Agora, deixei que o meu seja meio que padrão
aqui, de tamanho padrão, então eu provavelmente quero entrar e alterar o tamanho do ladrilho aqui
especificamente para este. Mas dito isso, certo? Eu posso simplesmente entrar, pintar, mapear
ladrilhos, selecionar tudo isso, e eu posso entrar e
simplesmente pintar, certo? Eu apenas carimbo
como fazia antes. Então, usar uma camada de mapa de mosaico e um Tilemap não é
muito diferente. Você só precisa se lembrar de que
cada camada terá
seu próprio nó para baixo, em vez de apenas selecioná-la em um
menu suspenso. E quando se
trata do código real, se eu entrar e dermos uma
olhada, damos uma olhada aqui. Normalmente, obtemos nosso mapa de blocos. Chamamos de Get Cell source ID. passamos o número da camada e Neste caso, passamos o número da camada e,
em
seguida, a posição do mapa, para que possamos ter uma ideia do
que estamos em cima. Agora, essa função existe tanto
na camada tilemap quanto na camada tilemap Vou selecionar Tilemap
aqui e você pode ver aqui, o ID da fonte do Gell Vou usar a
lupa para você aqui. Deixe-me ver isso. Obtenha o ID da fonte
celular. A primeira é a camada,
depois as coordenadas
e, em seguida, temos uma
bandeira opcional lá. Nós temos isso. Mas se você quiser usar
a camada Tilemap, a camada mapa de
mosaico tem exatamente
a mesma coisa, exatamente
as mesmas funções aqui A única diferença é que
não passamos em uma camada. Nós apenas passamos as coordenadas. Então, se meu mapa de mosaicos aqui, meu
mosaico fosse uma camada de mapa ,
neste caso, seria a
camada zero que estamos usando. Então eu pegaria esse que tem minha linha mediana de água nele, e tudo que eu passaria é apenas a
posição do mapa, e pronto Então, você só
precisa se lembrar de que todas as camadas serão nós
individuais da camada do mapa de mosaico no futuro. E qualquer função que solicite
uma camada de mapa de mosaico, você simplesmente não coloca nada
nela. Apenas pule essa discussão Tudo bem, espero que isso esclareça qualquer confusão que você possa ter
dependendo de quando estiver E essa é a principal diferença com a qual estamos trabalhando. Tudo bem, cuide-se. Have
yourself é uma boa opção, e espero que você goste do Frog
28. Criando o fundo: Tudo bem, então
vamos começar
a criar o Frogger E a primeira coisa que
você vai fazer é baixar os ativos e
mover a pasta de sprites
para o seu projeto Novamente, acabei de criar
uma pasta vazia, especificamente para o Frogger, mas eu recomendaria que você
criasse um novo projeto para Dessa forma, você pode exportá-lo
sem problemas no futuro. Tudo bem. Portanto, a primeira coisa que
precisaremos fazer é, especialmente porque nossos
spreads são muito pequenos, precisaremos reduzi-los ou não,
mas
reduzir nossa tela para um tamanho maior do tamanho do
gabinete de
fliperama maior do tamanho do
gabinete de
fliperama E para fazer isso, vamos
simplesmente ir até projeto e entrar nas configurações do
nosso projeto. Tudo bem E então eu deveria começar assim com as
configurações avançadas desativadas. E você verá
no lado esquerdo, vamos
descer até a
seção de exibição e entrar na janela. E vamos
definir a largura 336 e a altura em 240 Tudo bem? Esse é o tamanho da tela de um
gabinete de fliperama, a resolução da tela para isso, e será perfeita
para nossos pequenos sprites Tudo bem. Depois de definir isso, você pode ir em frente e fechar, e verá que nossa pequena caixa
azul ficou muito menor do
que costumava ser. Tudo bem, então a primeira
coisa que vamos fazer aqui é
criar o plano de fundo Então, vamos criar
toda a estrada, a água,
a mediana roxa,
que eles chamam, e a área de pontuação para a qual
temos que levar nosso sapo Então, vamos configurar
todas essas coisas. Dessa forma, podemos
começar a configurar e executar nosso jogo e
tudo mais. E os próximos vídeos a seguir. Tudo bem, então vamos
precisar de uma cena em dois D aqui. Então, vamos clicar em dois D, e isso nos dará um nó
dois D para nosso nó raiz. E se você quiser
renomear isso, você pode. Você pode chamá-lo de
Principal, se quiser. Gerente de jogos.
Realmente não importa. Se você realmente
quiser, pode simplesmente
deixá-lo como nome padrão. Vou deixar o meu
como padrão por enquanto. E para criar isso
em nosso pequeno plano de fundo, vou criar
um novo Tilemap Então, vou apertar
o botão Mais. E vamos seguir em frente e selecionar o mapa
de blocos no menu suspenso. S em nosso nó de criação. É como o Tilemap. Basta
clicar duas vezes nele e selecioná-lo. Agora, eu tenho o meu configurado aqui. Vou prosseguir e
excluir tudo isso. 1 segundo. Tudo bem, então você deve ficar assim quando
tiver o Tilemap selecionado Se você não tiver selecionado,
vá em frente e selecione-o. E o que vamos
fazer é ir
para o lado direito. E vamos ver o conjunto
de peças aqui. Ele permanece vazio no momento. O que vamos fazer
é clicar nele e ir para o novo conjunto de peças e , em seguida, clicar nesse conjunto de peças,
e isso nos trará aqui. Agora, o que precisamos aqui é que
precisaremos da
pequena área da meta, da água, da estrada
e da mediana Então, se entrarmos em nossos
sprites e rolarmos para baixo, veremos a casa, o canteiro
central, a estrada e a água Se você apenas segurar o controle,
poderá selecionar todos
eles de uma vez, desta
forma, e arrastá-los
para a
nossa caixa de blocos. Tudo bem. Então, antes que possamos
realmente usá-los aqui, como você pode ver, não podemos
clicar em nada do que queremos fazer. Vou
rolar até lá com minha roda de rolagem ou
você pode adicionar um sinal de menos A primeira coisa
que precisamos fazer é ter certeza de que estamos
na guia de configuração aqui, selecionar nossa água e
clicar nela, e agora temos essa caixa
laranja ao redor dela. Isso significa que temos um bloco
que agora podemos usar. E eu vou fazer a
mesma coisa com Road, Median e meu
irmão do outro lado Agora, a casa é um pouco maior. Então, acho que pode ser
um brinquedo, não maior do que isso. Vamos ver. O que nós temos? Oh, 26 é muito grande. Como é isso? Acho
que vai funcionar perfeitamente. Tudo bem Eles já foram? Eu tenho um 16 por 24
aqui para este azulejo. Tudo bem. Então, agora, se clicarmos
no Tile Map na parte inferior da
tela aqui embaixo, agora poderemos
clicar e começar a desenhar
nossos sprites Então clique na minha mediana, clique no meu ladrilho roxo aqui, arraste uma linha
na parte inferior, vá para a minha estrada e temos
cinco camadas de tráfego Então, precisamos de cinco linhas
de nosso preto aqui, três, quatro e cinco. E se nos referirmos
à nossa imagem, teremos outra
camada roxa, cinco camadas de água. Um, dois, três, quatro, cinco, e então temos uma camada de água que vai
por baixo da nossa casa Então, vamos fazer
mais uma camada lá. Vamos pegar nossa casa
e
clicar em um sprite
e clicar em um sprite arrastar o mouse
para que você possa selecionar os três E vamos colocá-lo. Oh, olha isso. Parece que temos esse problema. Bem, o que está acontecendo? Bem, estamos substituindo nossos ladrilhos de água aqui. Nós não queremos fazer isso. Então, precisamos realmente desenhar
isso em outra camada, e eu vou continuar
enchendo isso com nossa água até
o topo
nas duas últimas linhas. Então, vou clicar em
nossa seção inicial aqui e não queremos substituí-las. Queremos
construí-lo no topo. Então, você notará aqui
no lado direito
dos nossos mapas de blocos, temos algo
que diz camada zero, e se tivermos uma lista suspensa, não
há mais nada lá. Então, o que queremos fazer é entrar em nosso inspetor do nosso mapa de blocos, abrir a seção de camadas, clicar em Adicionar novo elemento e agora
temos uma segunda camada Então, de volta aos mapas de blocos
com nossa linha inicial selecionada, podemos ir para a
camada suspensa e clicar na camada um. E agora podemos realmente desenhar diretamente em
cima dela sem afetar nosso final
Aí está. Conseguimos transmitir isso a sete. E só para ter certeza de
resolver nossas linhas um, dois, três, cinco, certo? Parece bom para mim. Se clicarmos novamente em nosso sem TD, então nada está ótimo. É com isso que estamos trabalhando. E se você se lembra quando analisamos a configuração
do Alfoger, qual é a aparência Na verdade, temos nossa pontuação, e essa informação está
configurada bem no topo aqui nesta área azul vazia, nesse espaço vazio de água. Temos nossos troncos, tartarugas que saltam e nos
ajudam a pular aqui Dentro dessas
pequenas áreas vazias em casa é onde podemos marcar
pontos pegando nossos sapos O roxo é seguro, e nossa estrada preta é onde nossos
carros vão aparecer Mas certo, agora temos nosso
plano de fundo configurado. E, sem mais nem
menos, é muito fácil começar. O novo mapa de blocos é muito bom
para começar a usá-lo rapidamente. Não costumávamos ter
camadas, e agora que temos,
isso torna a configuração de coisas
assim muito mais fácil. Tudo bem. Esse é o nosso histórico.
Vamos seguir em frente e pular para a próxima parte.
29. Criando o jogador: Tudo bem, vamos criar nosso player, mas antes disso, vou
salvá-lo Vou clicar em
Control para entrar na minha pasta Froger e salvar
minha cena bem rápido Tudo bem. Então, para nosso jogador, nosso jogador realmente
terá sua própria cena que trazemos. Então, vamos clicar na guia de adição
no topo aqui ou adicionar um novo SEM.
Vamos para O. E como esse é um jogador sobre o qual precisamos
ter controle, esse será o corpo dois de um
personagem D.
Isso costumava ser chamado
de corpo cinemático,
e em outros motores, e em outros motores, você pode ouvir as pessoas
se referirem a ele como tal Mas aqui, agora é chamado de corpo
de personagem dois D. Tudo bem. Agora, esse corpo de
personagem, temos esse triângulo amarelo aqui que nos dá
um pequeno aviso, e ele apenas nos diz que nosso nó não
tem nenhuma forma. Não consigo colidir com nada. Não tem colisão.
E, por enquanto, tudo bem. Pode flutuar lá. E o que vamos fazer
é, na verdade adicionar outro
nó aqui. E o que queremos
adicionar é um sprite two D. Queremos adicionar
um sprite animado Bem, queremos que nosso
sprike seja animado. Temos duas molduras para isso. Então, vamos fazer
um sprite animado dois D. E no
lado direito do inspetor,
vamos abrir a seção de
animação onde diz Sprite Vamos clicar nele e
criar novos quadros de sprites. E então vamos abrir esses
quadros de sprites apenas
clicando neles Tudo bem. Então, temos nossa animação
padrão, que vou
renomear para ficar inativa Em seguida, adicionaremos uma nova animação com esse
pequeno ícone de adição aqui embaixo. E eu vou
renomear isso para pular. Tudo bem. Então, com o Idol selecionado, vou trazer
o Boger Idol E com o salto, podemos trazer Boger Idol e depois nosso ícone de
salto, E agora devemos ser capazes
de ir entre os dois. Sempre que quisermos jogar contra
esses inimigos, tudo bem. Areo, veja se
jogamos lá. Estamos pulando. Estamos fazendo nosso
pequeno salto saltitante. E você pode notar
que o sprite está um pouco embaçado
aqui em nosso renderizador,
mas aqui embaixo, podemos ver que ele deveria estar bonito e nítido Bem, para corrigir isso, podemos seguir em frente e podemos
simplesmente selecionar todos os nossos sprites aqui ao mesmo
tempo em nosso sistema de arquivos ir para o
lado esquerdo da importação Na verdade, isso não vai ser uma importação. Você moveu isso. Então, deixe-me ir em frente e dizer
onde está essa parte. Tudo bem. Então, se
você entrar nas configurações do
seu projeto, Whoo. Para onde eu fui? Acesse as
configurações do seu projeto e localize a seção de renderização e
textura aqui para ver as configurações avançadas Ou precisamos disso? Não, não precisamos
dele ligado para isso. Queremos um filtro de
textura padrão aqui. Mude-o de linear para o mais próximo e vá
em frente e feche-o, e você verá seus
sprites ficarem muito nítidos Então, se você vai
fazer arte em pixels dessa forma,
esse é o padrão que você deseja
fazer nas configurações do seu projeto. E agora temos um bom broki
afiado. Tudo bem. E, por enquanto, isso é
tudo o que realmente precisamos. Não precisamos nos
preocupar com a colisão detecção
ou algo
parecido por enquanto Vamos nos preocupar com isso quando
chegarmos a essa parte, então vou
passar o
Control S para salvar isso, e vou ligar
para esse jogador. Agora, se eu entrar na minha cena principal com meu nó dois D selecionado, posso clicar em No This
plus para ver um novo nó, mas a cadeia ao lado dele. E isso nos permitirá
exemplificar uma cena que já existe. E para nós, essa será
a nossa cena de jogadores. E agora podemos ir em frente e
pegá-lo e trazer esse garotinho para cá.
E podemos colocar. E podemos fazer o que
quisermos com esse
garotinho. Vamos ver. Vamos transformar. Então, sabemos que
isso está em valores de 16. Então, 172 não funcionaria. Seria 176 se
estivéssemos em valores de 16. Eu só vou trazer meu
sapinho para cá. Aqui vamos nós. Seja um pouco
mais centrado nisso E agora eu tenho meu sapinho na minha cena principal com meu plano de fundo, e
ele está pronto para começar Tudo bem,
isso bastará para este. Temos nosso player
configurado o quanto
precisamos no momento. E com isso, passaremos
para a próxima, onde abordaremos realização de alguns movimentos do jogador.
30. Movimento do jogador: Tudo bem,
vamos em frente e
vamos criar o movimento para que nosso sapinho possa se mover
para
cima e para baixo na extremidade esquerda, Então, para começar,
precisaremos de algumas entradas. Agora, se você quiser
usar as teclas de seta, então I up, UI down, UI left e UI
right já existem. Mas eu quero usar o WASD. Vou entrar
no meu projeto e acessar as configurações do meu projeto. E eu vou entrar no mapeador de
entrada na parte superior. Adicione uma nova ação e eu vou
digitar para cima, adicionar para a esquerda e para a direita. Agora, para cada uma
dessas ações aqui, vou
para o lado direito e aperto o botão de adição. E para cima, vou
atingir o ponto positivo. Vou apenas pressionar
W no meu teclado. E eu vou te mostrar
o que isso parece. O que você verá
a partir daí, vamos ver. Essa janela está aqui? E vou mencionar isso
acima. Aí está. Então eu apenas apertei a tecla W, e
temos que clicar em OK. Vamos para baixo, apertamos o
sinal de mais, pressionamos a tecla. E novamente, A para a esquerda e D para a direita. Tudo bem, agora temos cima para baixo, esquerda e direita para nossos controles, e podemos sair daí Nosso jogador vai
precisar de um roteiro, e eu vou fazer uma anotação aqui no
meu sprite animado no Jump Eu não me livrei
do primeiro sprite, então vou comer esse
com as pernas abertas E eu coloquei um roteiro ao lado do corpo t2d do nosso personagem
na cena de nossos jogadores E nós só temos um
vazio, assim. Agora, o que vou
fazer é
criar uma função
chamada movimento. Assim. E isso é só para que possamos
manter tudo limpo e organizado e manter todo o nosso
movimento em um único local. Tudo o que vamos
fazer para obter informações aqui é
usar a instrução if. A mesma declaração
IF que estamos usando muito. Então, vamos se, e então
queremos acessar o objeto de entrada ou a classe
de entrada. Então, insira. E então pontilhe porque
queremos verificar sua ação. E queremos continuar
lançando este jogo. Ou apenas liberado
ou apenas pressionado. Qualquer um deles funcionará especificamente para
este jogo. Se continuarmos pressionando, ação
é pressionada, isso é enquanto o
botão é pressionado. Basta pressionar e soltar significa que você
pressionará assim que
o botão for ativado.
Quando você
pressioná-lo e soltá-lo, Quando você
pressioná-lo e soltá-lo significa que o bloco de código será executado quando você
levantar o dedo. Eu vou com J
Press. Vamos tentar isso. E eu vou usar o botão, e essa é uma string que deveria ter aparecido
automaticamente E isso com
dois pontos, para que possamos
entrar nele e
criar o bloco de código E tudo o que vamos
fazer é fazer duas coisas. Precisamos mover
nosso pequeno sapo. Precisamos
movê-lo para cima na tela, e vamos
subir em um bloco, e tudo é dividido em
16 blocos ou 16 blocos ou 16 blocos. Então, neste caso, vamos
mover nosso sapo 16 quarteirões
para cima Então, vamos
conseguir nossa posição. E se isso fizer um pouco
mais de sentido para você, você pode dizer a
posição do ponto automático porque você está se movendo ao qual
esse script está anexado. E agora isso nos
dará as coordenadas X e Y. Isso tem dois números
associados a ele. Então, se clicarmos no corpo do nosso
personagem e olharmos dentro do inspetor
em transformação, você verá que temos um X e um Y. E eles correspondem
à localização em que eles
estão na tela Então, se clicarmos em
nossa cena principal e formos até o corpo do nosso personagem, você verá que sua posição é
169 e 233, no meu Então é daí
que estamos começando, e vamos
adicionar ou subtrair
isso do X ou
do Y para obter nossos movimentos Então, como queremos
subir ao pressionar para cima, afetaremos o número Y. Então, vamos
dizer ponto de posição Y. Tudo bem, estamos em nós mesmos, queremos obter a propriedade de
posição
e, em seguida, queremos obter
o número Y dela E para subir na tela, na verdade
temos que subtrair. Então, vamos
dizer menos é igual. Que possamos dizer que isso é igual à posição Y, o número é igual à posição Y menos o número da soma, que é o número da soma, neste
caso, será 16 Então, se
deixássemos as coisas assim e corrêssemos nossa corrida, pena
que nosso
sapinho não se mova Por que não se move? Espero que você entenda
ou entenda isso antes de eu
apertar Nunca ligamos para nenhum lugar para
nosso movimento, então nunca estamos realmente
verificando se há nada disso. E para isso, vamos
simplesmente colocá-lo dentro
da função de processo aqui. Movimento. E agora
está sendo chamado. Opa, pelo menos seria se
pudéssemos soletrar corretamente. Lá vamos nós. E se
tentarmos executar isso agora, aperte o botão para cima,
que para mim é W. Você pode ver que estamos
avançando e movendo nossos 16 blocos por vez. Um dado que vencemos. Temos um
pequeno sapo lá em cima. Agora, é claro, o problema
é que ainda estamos nos movendo, mas não podemos retroceder Não temos animação
nem nada. Então, vamos fazer nossa
animação funcionar. Então, como reproduzimos nossa animação? Bem, se olharmos para a cena do
nosso jogador, podemos ver em nosso script, podemos descer, podemos seguir
essa linha facilmente, apenas um nível até
o Sprite
2 animado D. Então, vamos pegar esse nó E da forma como mostrei que antes era usar
esse cifrão, seria a maneira mais fácil. E assim que você começar a digitar Sprite
animado, ele
aparecerá E lembre-se, isso é apenas Sprite two D
animado porque esse é o nome dele Então, se eu fosse dar um nome a essa banana e uma
grafia muito ruim de banana, seria isso que eu teria que
digitar aqui para acessar Vou apenas redefinir
esse nome para o padrão. E tudo o que vamos fazer
é
chamá-lo de play. Então, não jogue. E você verá as animações
que criamos aparecerem. Então, vamos usar o salto. E se tentarmos isso agora com
apenas uma adição
de nossos chicotes de linha, você tem que realmente jogar essa
cena e não nosso jogador Aí está. Você pode ver que entramos em nosso salto, mas estamos meio
presos em nosso salto agora. Então, isso é um pouco
decepcionante. Então, como podemos consertar isso? Como
podemos voltar ao normal? Bem, podemos configurá-lo para que,
quando nossa animação for concluída, retornemos
à nossa forma ociosa Então, para fazer isso,
teremos que
acessar o
sprite animado do nosso player, ir para o
lado direito até a guia do nó e
conectar um sinal que diz que a animação terminou Então, se clicarmos duas vezes nele, veremos um pop-up para
conectar um sinal aqui, selecionaremos o corpo do personagem TD no qual nosso script está ativado
e apertaremos o botão Conectar. Vou aguentar tudo
para usar minhas teclas de seta para trazê-lo à tona. Sim. Então, sempre que nossa animação
terminar de ser reproduzida, esse bloco de código
será executado agora E o que queremos que aconteça
aqui é que queremos voltar
ao nosso estado ocioso, onde nosso
sapo está sentado lá Então, a mesma coisa,
vamos comprar nosso Sprite two D. Vamos chamar play,
e isso vai ficar inativo Se tentarmos isso agora, o que
faremos? Novamente, se reproduzirmos
a cena certa, como
fazemos agora, vemos que agora temos isso, como um pequeno salto que aparece quando pulamos
pela água. Isso é incrível. Agora, o problema é que nosso
ídolo estará tocando
constantemente neste momento, nosso ídolo toca, e
depois termina, e porque termina,
vai Então, embora isso não seja
realmente um
problema com este jogo, isso pode ser algo a se ter em
mente daqui para frente. Então, para resolver esse problema, podemos realmente corrigir
isso com uma escolha de TI. E, como você pode ver, na minha
pequena saída, eu estava verificando as coisas e
vou te mostrar como fazer isso. Vou limpar isso. Tudo o que precisamos fazer
é verificar se o Animated Sprite grita Você quer o cifrão lá. Se animado, Sprite, dois pontos d. Ainda assim, animação. Não, não é assim que se chamava? Bem, se entrarmos em nosso
Sprite Animado, a propósito, você pode acessá-lo,
basta segurar a tecla Control e
clicar no Sprite Animado
dois D aqui em nosso código Em seguida, abrirei a página de
documentação do. E aqui está o que estamos
procurando aqui. Obtenha animação. Então, queremos obter animação. Como você vê, isso não
estava aparecendo. Então, às vezes, é
útil
verificar a documentação de qualquer maneira. Queremos fazer I animated
sprite tod dot get animation. E se formos
dar uma olhada nisso, a animação atual,
o recurso Sprite frames, o valor é alterado,
o contador de quadros, o
progresso do quadro ou o reset Mas o que queremos fazer é conseguir o que é
essa animação. Então, isso
basicamente retornará para nós qual animação está sendo reproduzida
ou selecionada atualmente. Então, vamos usar o duplo igual
porque queremos comparar o que
é devolvido para E queremos escrever jump. E então, quando interpretamos nosso ídolo, vamos simplesmente
colocá-lo em um para que
ele possa estar dentro
do nosso bloqueio I. E agora
vamos basicamente verificar nossa corrente quando nossa
animação terminar, se a atual for pular, então vamos jogar inativo Se executarmos isso, lá vamos nós. Temos nosso pequeno Bing e
ele parece exatamente o mesmo, mas não vamos
ficar
reproduzindo constantemente a animação ociosa
repetidamente É quando a
animação ociosa é reproduzida, lembre-se de que ela é reproduzida uma vez
e depois está pronta Não está girando. E se o seu, por exemplo, estiver em loop por qualquer motivo, vá em frente, selecione
seu sprite animado
e, se estiver em loop, você
pode Isso porque está ativado, então basta
clicar nele para desligá-lo. Então é branco
assim. Se for azul, então está ligado, se for
branco, está desligado. Então, agora, quando nossa animação
terminar, depois de
pularmos, vamos verificar se nossa animação
atual é pular
e, em caso afirmativo, jogaremos inativo E quando a inatividade terminar, essa afirmação if não será verdadeira porque, quando
obtivermos a animação, ela ficará inativa, Então, como isso não é mais verdade, não vamos
fazer mais nada, não
vamos continuar repetindo inatividade dessa vez Portanto, é uma pequena diferença,
uma daquelas coisas que estão no back-end que
o jogador nunca notará. E, como eu disse, em um jogo
pequeno como esse, não fará
uma grande diferença,
se houver, que seja perceptível. Mas é algo que vale a pena
conhecer daqui para frente, mas quando você quiser criar
jogos cada vez maiores. Tudo bem, então vamos
em frente e agora podemos apertar nosso botão para baixo. Então, se apenas copiarmos
e colarmos isso, podemos obter if em vez de I. Queremos nosso
pressionado para baixo em vez de para cima, e queremos mais
16 em vez de -16 Porque se o menos está subindo, então o positivo vai
nos derrubar, então agora podemos subir
e podemos descer Agora, nosso sapinho
não se vira de jeito nenhum, o
que é um pouco decepcionante que é um pouco Mas podemos corrigir
isso facilmente adicionando
mais uma linha aqui, e podemos fazer isso
falando sobre sua rotação. Então, antes de saltarmos, podemos
obter a rotação automática de pontos. E se dermos uma
olhada em nossos jogadores, voltaremos à cena
do jogador, como no corpo de
um personagem
dentro do inspetor Se descermos, vemos
que temos rotação aqui. E a rotação é em radianos em
vez de graus. Então, o que podemos fazer é dizer que rotação é igual, e podemos usar essa
função embutida chamada Dg two RAD, e que pode ter E parece que sim. Parece que
foi renomeado aqui,
então, deg two Agora tem os
sublinhados. E então vamos usar um argumento
na forma de graus. Então, se dissermos 180, isso vai ser uma reviravolta
completa, certo? Porque se virarmos à direita, serão 90 graus. Se virarmos à esquerda,
seremos -90. Então, de qualquer forma, temos que chegar a 180
positivos ou 180 negativos. Então, eu vou
usar 180 graus aqui. E essa função
vai converter esses 180 graus em
brilho para que possa ser
atribuída à nossa rotação aqui Agora, uma rotação completa
em radianos é 3,14, e é daí que i vem Então, isso seria o mesmo aqui,
180, como se simplesmente copiássemos essa rotação igual a
Pi dividido por quatro Então isso
nos dará uma rotação. Então, se quisermos fazer
Pi dividido por dois, isso nos dará metade da nossa
rotação aqui em radianos Então, se eu fosse te mostrar
que com Pi dividido por dois, Oh, nós nos dividimos
de outras maneiras. Então, talvez seja um
pouco mais do que dois. Agora, eu normalmente não
uso radianos sozinho. Nós, podemos ver dividido por quatro, nós meio que temos esse
pequeno ângulo estranho Como você vê, às vezes pode ser um pouco estranho lidar
com radianos Então, qual é
uma das razões pelas quais eu prefiro usar graus em radianos, só porque é algo que eu
posso resolver
um pouco mais rápido E como você vê, lá vamos nós. Nós viramos o rosto para baixo. Só que agora não estamos
voltando para cima, então agora temos
que corrigir isso dentro do nosso código. E faremos a mesma
coisa quando pressionarmos para cima. Definimos nossa rotação para zero. E se fôssemos jogar agora. Lá vamos nós. Agora podemos pular para
cima e podemos pular para baixo. E agora, e se quisermos pular
para a esquerda e para a direita? Bem, podemos obtê-los
com mais dois LCFs aqui. E vou
espaçá-los para ficarem um pouco mais legíveis aqui Lá vamos nós. Então, começando com nosso
segundo SIF aqui, vamos dizer que resta a ação
I. E em vez de
modificar o valor Y, vamos realmente modificar o X da nossa posição
porque X está à esquerda e à direita E se formos para a esquerda, temos que -16 aqui E diplomas para ler. Bem, poderíamos definir isso para 270, apenas para ficar no lado
positivo aqui, o que significa que nosso último
Elsev aqui, quando pressionamos para a
direita, vamos modificar a posição
em vez do Y, vamos mais 16 E se estivermos nos movendo para a direita,
vamos girar a 90
graus. Então, se tentarmos isso agora, veremos
que agora podemos
pular em todas as quatro direções. E podemos nos locomover. E se seu sapo for colocado
no local correto, você poderá
pousar em todas essas pequenas metas domésticas aqui Não tem problema sem passar por cima. Aí está. E agora nós meio que temos que
manter nossa posição. E bem, na
tela seria bom. Mas podemos nos preocupar com todas essas
coisas mais tarde, por enquanto. Nós apenas temos nosso
movimento circulando, e esse vídeo está
ficando um pouco longo, então eu só queria
manter o movimento em sua própria pequena seção aqui. Lá vamos nós. Podemos correr por aí como nosso próprio sapinho indo, vaiando,
boando, vaiando Mas certo, e
aí está. Agora podemos seguir em frente e passar para a próxima seção do nosso código. E acho que, em seguida, vamos criar
nossos veículos e fazer com que eles comecem a
atravessar a rua aqui.
31. Como criar os veículos: Tudo bem. Hoje, vamos
seguir em frente e criar os veículos
para atravessar. Agora temos
alguns diferentes. Vamos ver quantos temos
aqui dentro de nossos sprites. Temos cinco
carros diferentes. Lá vamos nós. E alguns deles vão para a esquerda,
alguns vão para a direita, e eles já estão voltados para a direção que querem. Então, isso é ótimo. Tudo o que precisamos fazer é
criá-los e fazer com que eles se movam
pela tela. Tudo bem, então
vamos criar uma nova cena com nosso botão de adição aqui
na parte superior de nossas guias Vamos para outro nodo
e, assim como nosso jogador, vamos usar o corpo do
personagem dois D aqui. E vamos
dar a ele um sprite, neste caso, já que não
temos animações para ele, vamos usar apenas
um Sprite dois D normal, e podemos atribuir
um de nossos sprites Agora, nesse caso,
fui em frente e selecionei o pequeno caminhão. Mas é claro, você pode escolher
o que quiser. Especificamente, estou usando
um que está se movendo para esquerda no momento, então
isso é digno de nota. E eu vou
mudar esse nome de corpo de personagem para D para ser Truck e vou salvar
isso como minha cena de caminhão. E eu vou
precisar de um pouco mais. Agora, não vamos
usar uma forma de colisão, embora possamos fazer
com que algum tipo de colisão possa acontecer
aqui porque, obviamente,
nosso sapo precisa ser esmagado de alguma
forma se conseguir Então, para me preparar para isso, vou criar
uma área dois D. E isso vai
praticamente me permitir ter uma área redefinida
que eu possa verificar E para obter essa área com a
área dois D selecionada, agora é onde posso trazer a
forma de colisão Agora, a forma de colisão tem esse pequeno triângulo
, nos dando um aviso Então, forma de colisão selecionada. Nós nos movemos
para a direita até nossa seção de formas e criamos uma nova. E essa
será apenas uma nova forma de retângulo. Agora, não usamos formas
complicadas, como usar os ganchos poligonais Em vez disso, use
polígono ou, desculpe, você
usará formas com algumas
dessas formas básicas aqui Como quanto melhor for
sua forma, melhor será
em termos de desempenho No entanto, quanto mais
complicada for uma colisão, mais precisa
ela será Portanto, é uma espécie de equilíbrio que você mesmo
teria que encontrar. Mas neste caso,
felizmente para nós, podemos simplesmente usar esses
retângulos e isso será encontrado, especialmente porque
estamos recriando um jogo antigo Tudo bem. Então, agora que temos nossa forma de colisão
como essa, novamente, se você não percebeu
isso, certifique-se de que seu retângulo esteja
cobrindo tudo, todas as partes do caminhão E agora nosso caminhão realmente vai precisar de um roteiro nele. Vou adicionar um
a ele. E em vez de chamá-lo de script de caminhão, vou chamá-lo
de script de veículo. Agora, a razão pela qual
vamos chamá-lo script
do veículo é porque
poderemos
usar esse script em
todos os nossos veículos. Agora, para fazer isso, Bruni
exporta uma variável para nós. E o que isso vai
fazer é que essa palavra-chave
de exportação nos permitirá
alterar isso dentro
do inspetor Então, vamos usar
a exportação com sinal de arroba e criaremos uma variável e chamaremos essa direção. Vai ser um número inteiro
e, por padrão,
podemos simplesmente defini-lo
como zero ou, desculpe,
podemos configurá-lo como um Realmente não
importa nesse caso. E se você salvar isso e
selecionar seu caminhão novamente, deverá ver a direção interna do inspetor
no lado direito Agora, no nosso caso,
precisaremos que seja menos um porque
vamos nos mover para a esquerda, o que significa que estamos indo
na direção negativa. Então eu fui em frente e
configurei isso para menos um. E agora, na função de processo, precisaremos ter
nosso personagem ou bem, personagem está correto,
mas nosso caminhão se move. E então, para nos
movermos, precisamos ter algo chamado mover e deslizar
ou mover e colidir Qualquer um deles funcionará
para que haja movimento aqui. No meu caso, vou usar
mover e deslizar. Moving Collide também é
bom. Isso basicamente
define o que acontece quando dois corpos físicos colidem um
com o outro, certo? Eles batem um no
outro e ficam lá ou podem
deslizar um ao lado do outro No nosso caso, isso realmente não
importa pois
vamos usar
a área para determinar se nosso sapo foi
atropelado pelo caminhão Então, agora temos o slide móvel. Não podemos simplesmente jogar agora
porque ainda temos que
controlar esse movimento. Então, eu vou ter outra
variável aqui chamada velocidade, que também será um número inteiro E acho que
vou definir isso. Vamos tentar oito por enquanto
e veremos o quão
rápido isso se move. Isso pode ser um pouco
rápido demais. Então você sabe o que? Na verdade, vou tentar com dois
agora que penso nisso. E tudo o que vamos
fazer é mudar
a velocidade e queremos
mudar o número X. Assim como a posição, temos um X e um Y
quando se trata de velocidade,
e a velocidade controlará nosso objeto se movendo Então, vamos para a velocidade
e, a partir de quatro, Interessante Talvez seja um V maiúsculo porque eu sei que
há um embutido. Tenho certeza aqui. Oh, não, está baixo aí. Devo ter acabado de colocar
um erro de digitação lá. Mas aí está, então podemos
simplesmente fazer o ponto de velocidade X. E desta vez
vamos dizer igual Não vamos
dizer menos ou mais porque isso vai
depender da nossa direção Então, vamos dizer velocidade
vezes direção. Então, vamos nos mover ao
longo do eixo X, então vamos nos mover para
a esquerda e direita na taxa de velocidade, que é dois
agora, vezes a direção. Então, agora estamos em menos um, então vai ser
duas vezes menos um,
e isso vai nos dar menos
dois e deve
nos mover Mas se entrássemos
no inspetor e mudássemos para um positivo, então deveria
ser duas vezes um,
trazer dois positivos
e fazer com que trazer dois positivos nos movêssemos
na direção certa Então, vou colocar o
meu de volta para menos um. E eu vou voltar para
minha cena principal e trazer um caminhão
para dar uma olhada nela. Vou colocá-la aqui, reproduzir essa cena e
ver se ela se move. Podemos ver que está se movendo, mas está
se movendo muito devagar. Então, vamos ter que
ajustar essa velocidade. Então, vamos voltar para oito.
Talvez oito fosse bom. Vamos tentar isso. Oito não é bom,
mas é muito melhor. Então, vamos ver. Queremos
nos mover em 16 pixels? 16 parece bom, embora pareça
muito fácil, então talvez queiramos
aumentar isso. E lembre-se de que
sempre podemos voltar a isso. E como estamos usando a
velocidade em todos os nossos veículos, podemos facilmente ajustá-la
e ajustá-la quando, na verdade,
tivermos todas as cinco faixas sendo
usadas por Então, vamos ver que com 32, 32
está mais bonito aqui. Acho que 32 é onde
vou
deixá-lo e ajustá-lo mais tarde Talvez você queira
ir para, tipo, 48, ou acho que não conseguiremos
chegar a algo como 64, mas nunca se sabe, eu acho. Então, vou
usar 32 como minha base. Tudo bem, então temos um caminhão
se movendo em uma direção. E agora também podemos criar nossos
outros veículos. Vamos ver. Temos mais
dois que se movem para esquerda e dois que
se movem para a direita. Vamos ver o que fazemos aqui e vamos para a esquerda. Então, vamos
praticamente repetir esse processo e usar o
script do veículo em todos eles. Tudo bem, então eu fui
em frente e, como você pode ver, fiz minhas outras
quatro cenas de carro aqui. Tudo o que fiz foi entrar, ajustar a
forma da coleira, se necessário, substituir o sprite por
outro de nossos carros E então, se necessário, envelheça a direção de
menos um para positivo E isso controla
todos os nossos carros. E eu fui em frente
e os coloquei aproximadamente
onde eles estariam aqui, só para que eu pudesse
testar e dar uma olhada. E como você pode
ver, enquanto o dirigimos, nossos carros seguem em frente e dirigem, atravessam a tela na direção apropriada e nunca colidem uns
com os outros Incrível. Agora, tudo o que precisamos
é de mais carros que apareçam,
e não queremos
colocá-los porque, se
tivermos que colocá-los manualmente, precisamos ter uma lista enorme de carros e não
temos ideia de quanto tempo
demorará para que eles
apareçam ou quanto tempo o jogador
levará para ficar sem vidas
ou completar o nível Então, o que vamos
fazer é criar geradores para esses
carros. Tudo bem. E esses geradores
basicamente vão, em um horário definido, gerar E poderíamos ter cinco geradores
diferentes se quisermos, um
para cada pista E vamos ver. Acho que é isso
que eu quero fazer. Acho que vou ter
cinco palanetas diferentes dessa forma, todas
elas podem ter
seus próprios horários E se você quisesse, você
poderia definir
um limite de desova ou um limite de tempo
para todos os veículos Isso também está perfeitamente bem. Vou seguir em frente
e criar um, e esse será
apenas um n2d básico Vou chamar esse
observador. Queremos
chamá-lo de SponTero? Aqui, sim. Vamos usar aquele patrocinador, e isso controlará
meus principais spawns E, você sabe, eu acho que vou usar isso como sua localização
base também. Eu só vou
conseguir um bom lugar, e como esse é o caminhão, vou trazê-lo de volta para
lá, e isso vai
me mostrar que se o
caminhão aparecer nessa posição,
ele estará lá OK. Então, no meu spawner, vou criar
um novo script Isso será apenas
um script spawner dotGD. E mais uma vez, vamos
usar isso muito
bem em todos os nossos
Swannas que criamos Então, o que precisamos
fazer? Bem, precisamos esperar um determinado período de tempo. Vou deletar esse
comentário de lá, bem
como o que
está aqui na linha nove. Opa. Yo. Tudo bem, então precisamos
esperar um determinado período de tempo. Esse horário deve ser aleatório. E então, com base
nisso, crie uma visão. Então, no nosso caso, vamos
carregar o caminhão. Então, vou colocar uma variável
aqui para o meu caminhão, que
será uma pré-carga aqui. O que significa que vamos
carregar a cena com antecedência Dessa forma, podemos usá-lo. Podemos instanciá-lo
a qualquer momento. Então, vou
pegar meu caminhão
do meu sistema de arquivos
e arrastá-lo para dentro. Dessa forma, temos a
localização correta aqui para a cena. E com isso,
vou mostrar a vocês o único veículo aqui,
porque então só
temos que entrar e
podemos ajustar isso Eu vou te mostrar como podemos
exportar isso também. Dessa forma, poderíamos realmente
usar esse script em
tudo em vez de
criar vários scripts, apenas por causa da diferença de uma
variável. Vou te mostrar isso. Mas primeiro, vamos colocar
isso em funcionamento. E o que vamos
fazer é que não vamos usar esse processo de forma alguma. Na verdade, vamos
criar uma função chamada spawn vehicle E aqui, vamos para Aqui é onde precisamos de
um número aleatório. Então, vamos continuar e
ligar, tempo de espera. Basta chamar isso de
tempo de espera. E vamos colocar isso à tona e definir
isso igual a, vamos ver,
e um número inteiro
aleatório, sem engano, poderíamos simplesmente fazer algo
assim e Não acho que precisemos
usar o intervalo rand, embora eu possa estar incorreto nisso.
Tudo bem, vamos lá E como eu quero
verificar isso só por segurança,
vou manter o controle, clicar em Randi, e isso vai
me abrir para esta página E sim, eu fiz isso corretamente. Então, usando a porcentagem 20, neste caso, como você
vê, vai nos
dar um número inteiro de 0 cento 100 nos daria 0-99, e se fizermos por cento
100 mais um, isso nos daria
um número de 1-100 Então, no meu caso, se eu fizer três, teremos
um tempo de espera de zero, um, dois, vou
adicionar um a isso. Agora temos que esperar pelo
menos 1 segundo entre as
aparições dos caminhões. Então, isso vai ser
entre um, dois e três. E podemos ver como isso parece. Sempre poderíamos
ajustar isso mais tarde. Agora, nosso tempo de espera,
temos isso. Agora temos que realmente
esperar esse período de tempo. Então, vamos dizer espere e temos que pegar a árvore
para fazer isso E a palavra-chave await
aqui significa que vamos apenas esperar por isso No nosso caso, será um cronômetro, mas também pode
estar aguardando envio de
um sinal Mas agora,
vamos dizer espere, obtenha um cronômetro de criação de três pontos, e esse
será nosso tempo de espera Nosso
tempo de espera aleatório que temos. Temos tempos limite. Vamos esperar pelo sinal
de tempo limite
que será enviado
quando nosso cronômetro terminar, que será baseado em
um número aleatório,
uma quantidade aleatória de segundos Tudo bem. Então, uma vez feito isso, podemos criar uma
instância de nosso caminhão de digamos, VT
para veículo ou VI para veículo Neste caso,
vamos dizer caminhão,
mas devemos
alterá-la para mas devemos
alterá-la Então, o Truck Dot instancia e, em seguida, vamos
adicioná-lo ao nosso Então, vamos dizer self dot, add child para adicioná-lo
à cena e VI. Tudo bem. Vamos ver
como isso funciona agora. E não vai acontecer
porque não ligamos para ele. Vamos entrar em nossa função
REDI aqui
e chamar nossa função de veículo de desova que
criamos Vamos tentar agora. Lá vamos nós. Então, tivemos outro
caminhão surgindo, e não teremos
mais porque só o
geramos uma vez. Então, o que podemos fazer
a partir daí é depois adicionarmos uma criança, certo? Depois de adicionarmos o
caminhão à nossa cena, faremos com que ele se chame
recursivamente Então, isso vai causar
um loop infinito. Ele vai gerar um
veículo e não fazer nada, e então gerar um E quando terminar
, gere
outro veículo .
Pronto, crie um veículo E sempre
será um número aleatório toda vez que tivermos que esperar
ou entre os spawns Então, se dermos
uma olhada agora,
podemos ver que eles são bastante
consistentes em seu espaçamento, e então esse era um espaçamento
muito maior E dissemos, Oh, temos um
espaçamento muito próximo nesse Então, parece que
por cento três mais um pode ser o menor
que queremos fazer Mas aí está. Então, depende de você, se
quiser , que haja muitas pessoas
próximas umas das outras. Portanto, cabe a você
decidir se quer twittar um pouco, brincar com isso e decidir como deseja
que eles sejam distribuídos Agora, a razão pela qual
não precisamos definir sua posição é porque adicionamos quando
criança ao meu observador, e o observador está aqui Então, como o caminhão aqui está
em 00 em sua posição, Opa. Este é o caminhão aqui em
00 em sua posição aqui. E podemos ver isso se
formos transformar 00. Será exatamente
o mesmo que seu pai, que neste caso, será o
SpoNoro Então, onde está meu SponOro aqui, ele vai aparecer
nesse local fora da tela o
suficiente Agora, como podemos
executar um script para poder usá-lo
em qualquer um de nossos veículos? Bem, o que precisamos fazer
para que isso funcione para todos os nossos criadores é que possamos ter o mínimo de
trabalho possível Bem, primeiro,
vou mudar nome da
minha variável de
caminhão para veículo, agora vamos usá-lo
para mais de um veículo, não apenas para o caminhão. E isso significa que vou
ter que alterá-lo aqui em nosso spawn de instanciação de ponto de caminhão para instanciação de ponto de
veículo E queremos ter essa
variável exposta dentro do nosso inspetor para que possamos
ajustá-la por nó aqui, então vamos fazer o sinal de arroba com
a exportação E agora, o que
vamos exportar aqui? Bem, poderíamos simplesmente
deixar como tal, e isso
funcionará se olharmos para o interior do inspetor Mas se você quiser ser específico, isso é chamado de cena lotada. É assim que você
exportaria isso. E então poderíamos até mesmo
excluir a pré-carga aqui. Então, basta assinar exportar nosso veículo e
declará-lo como uma cena de pacote Agora, se clicarmos em nosso
gerador e em nossa cena aqui, podemos simplesmente abrir o veículo e dizer novo
empacote-os ou podemos carregá-los Obviamente,
gostaríamos de carregar, mas para economizar tempo, podemos simplesmente entrar em nosso sistema de arquivos, pegar nosso caminhão, arrastá-lo e soltá-lo E se fizermos isso,
veremos nossos caminhões
aparecerem exatamente como deveriam,
assim como faziam antes Tudo bem? Perfeito. E se fôssemos pegar,
digamos, vamos ver, o carro um
também está indo para a esquerda. Então, vamos pegar um carro, substituir aquela cena lá dentro
e dar uma olhada nela. E aí está. Nós o fizemos funcionar aqui com um veículo
diferente. Então, tudo o que temos que fazer é
mudar essa. E há muitos
carros em fila lá. Então, novamente, isso pode depender
de você ajustar as coisas. Mas aí está. Vou substituir este por um caminhão novamente e
impedir que funcione. E agora eu posso seguir em frente e
criar mais geradores. Opa. E nós fazemos uma incompatibilidade
histórica Isso é interessante. Não estou
fazendo nada com a história. Vou usar o Controle D lá. E este é patrocinado por dois. Então, desça e
certifique-se de que está alinhado. Isso faz. E esse vai
ser o carro três. Então, vou procurar as três cenas do meu
carro e arrastá-lo para dentro. Vá em frente e dê uma
olhada nisso. Lá vamos nós. Temos nossos caminhões
e nosso carro surgindo em nossos diferentes intervalos Fantástico. E podemos fazer a mesma coisa com
nossa bunda aqui. Então, vou duplicar
isso mais uma vez. Estou apenas duplicando isso com Control D com spanor selecionado E eu vou puxar isso aqui para este veículo. E esse é só um carro. Então eu vou puxar o carro aqui.
E damos uma olhada. E vemos que todos os
nossos carros indo para a esquerda estão
surgindo corretamente Fantástico. E agora só temos que colocar os
dois à direita. E a mesma coisa,
vou duplicar minha extensão aqui e arrastá-la
para o lado esquerdo E então eu ajusto aqui para a posição,
isso deve ser bom. E essa é a cena do carro quatro,
minha cena do carro quatro, e a duplicamos mais uma
vez e a juntamos aqui para meu carro dois sne. Tudo bem. Então, agora eu deveria ser
capaz de vir aqui e deletar todos esses carros e caminhões
temporários. E se o executarmos, ele deve
estar funcionando perfeitamente bem, fazendo com que todos os nossos veículos
estejam lá dentro Agora podemos correr por aí
com nosso pequeno sapinho,
digo, aqui.
Aí está. E agora só precisamos de uma maneira pular por essa água
para que possamos entrar lá. E, claro, uma forma de nosso sapinho
ser esmagado Acho que vamos lidar com o
esmagamento na próxima vez, então faremos com que o jogador
morra
32. Morte e reaparecimento do jogador: Tudo bem, então como
vamos fazer com que nosso
pequeno sapinho pegue Gist se ele
for atropelado Bem, a primeira coisa que
fiz foi adicionar uma colisão em forma de dois D para
cobrir o tamanho do meu sapo E vamos usar isso
para determinar se ele foi atropelado por um carro em combinação com a Área dois D que
está em nossos veículos. E dentro do meu sprite animado, eu criei uma nova
animação chamada morte, e eu trouxe o sprite morto
Frogger E agora que temos isso,
que também precisamos em nosso veículo, teremos que adicionar
uma conexão de sinal aqui, e a que
queremos é inserir o corpo. E poderíamos
passar por aqui e conectá-los um
por um em todos os
nossos veículos ou poderíamos economizar
um pouco de nossos veículos ou poderíamos economizar tempo e conectá-los por meio de script,
por meio do código. E acho
que é isso que vou fazer aqui para economizar
um pouco de tempo. Agora vamos dar uma
olhada em como conectaríamos esse sinal por meio do código
em vez da interface. A maneira mais fácil de
configurarmos isso é, como você pode ver a seguir,
dentro do bloco pronto aqui, e esse erro ocorre apenas porque ainda não
criamos
essa função. Então, vemos que pegamos nossa área dois D porque é isso
que está enviando o sinal. Coloque pontos no nome do sinal, que é o corpo inserido. Você pode ver isso à
direita, e vamos conectar esse sinal com a função de
conexão. E então criamos
o que é chamado chamável e passamos um nome, e esse nome será o nome da nossa função
que queremos chamar Então, se um jogador acertar, um sapo bater, você
pode continuar com Player Hit é o que
vou chamar de meu. E agora tudo o que precisamos fazer é
descer e criar uma nova função para
ela, Bunk player hit Agora, essa função também
passa uma parte dos dados. Se dermos uma
olhada no
sinal do corpo inserido aqui no lado
direito, você pode ver que ele
passa pelo corpo, e isso é um nó dois do tipo D. Então, será um nó de
dois D de algum tipo. Então temos
que passar esse argumento, então corpo, nó dois D. E assim, agora
isso deve conectar o sinal para todos os nossos
veículos, e para testar a célula, podemos ir em frente e imprimir o
corpo, e veremos isso. E algo que eu
também fiz foi mudar meu jogador. Eu renomeei meu jogador de personagem
Body TD para camada E então eu tive que
entrar na minha cena principal aqui e substituí-la para que
o nome fosse atualizado. Agora, se prosseguirmos
e executarmos isso, devemos imprimir uma
carroceria toda vez que formos atropelados por um
veículo, teste de corte na pista 1 Sim. Pista dois. Sim. Pista três, correto? Pista quatro e nossa última pista, o caminhão. Aqui vamos nós. Então, todos os nossos veículos estão
detectando quando somos atropelados, e podemos ver que temos muitos veículos lá nesse momento Então, isso pode ser uma boa quantia, ou talvez você queira aumentar o intervalo mínimo entre eles. Novamente, depende totalmente de você e de como você
deseja fazer isso. E o seu. Mas com isso, todos os nossos veículos já
foram conectados e configurados para
esmagar nosso sapinho Então, a razão pela qual eu
disse que renomeei meu corpo de personagem para
TD de jogador para jogador, e estou usando P maiúsculo é
porque vamos usar esse nome na tela do nosso veículo Então, vamos
dizer se e depois passar uma corda aqui, um jogador. Então, se o jogador N. Então queremos ver se essa string está dentro de outra string, e a string que queremos
verificar é o nome do ponto do corpo. Agora lembre-se, corpo é qualquer objeto com o qual
acabamos de colidir, qualquer corpo que acabou de entrar na área
de
nossos veículos, e a propriedade do nome dele nos
dará qualquer
nome que esteja aqui, que no nosso caso é camada Então, basicamente, se nosso
nome for player
e, em vez do nome do ponto no corpo, poderíamos fazer uma dupla igualdade se quisermos que
seja um nome exato Depende totalmente de você. Nesse caso, isso não deve
afetar nada. Enrole nossa instrução if
com dois pontos, desça até a próxima linha e agora podemos executar
nosso PC de código Então, o que queremos fazer
quando nosso jogador conseguir? Bem, vamos chamar a função
DF em nosso player. Agora, essa função ainda
não existe, então vamos ter que
criá-la, mas body dot death. E se você quiser ter um caso
extra de segurança aqui, você pode dizer se body dot tem método e passar
na sequência da morte, e então podemos inserir body
dot death em mais uma. Nós podemos ir assim. E isso evitará um erro se
prosseguirmos e executarmos isso. Veja, não vamos
ter nenhum erro aqui porque estamos
basicamente dizendo: Ok,
estamos dizendo que se colidimos
com o jogador aqui, então se esse jogador, se esse corpo tem essa
função, então chame E, no momento, ele
não tem essa função. Então, se você quiser colocar
essa camada extra de segurança
usando o método HAS, você certamente pode fazer isso. E eu vou
entrar no meu player agora e criar essa função
funk Dak . E isso não acontece Não estamos
discutindo nada com isso. Então, o que vai acontecer
quando nosso jogador morrer? Bem, precisamos reproduzir
nossa animação de morte para que possamos corrigir nosso
sprite Então, vamos seguir em frente e fazer
isso. Sprite animado dois pontos d, la death. E vamos dar uma
olhada nisso agora. O que acontece quando somos
atropelados por um veículo? La Di Da, pobre sapinho
atravessando a rua, em. Ok. Então, vemos você morrer, e então nós, um dos
sprites, estamos no caminho errado Não está virado para cima
do jeito que deveria. Então, vamos corrigir isso. Depois disso,
vamos definir sua rotação. E já fizemos
isso quando pressionamos. Então, vamos adicionar isso à
nossa função de morte aqui. E damos uma olhada em que agora
deve estar agindo corretamente, plana ou em posição. Incrível. Agora, o que você não pode ver é que estamos constantemente sendo
colididos porque nossa forma de colisão continua
atingindo E não só isso, também
podemos continuar avançando. Então, vamos ser,
e estamos vivos novamente. Então, temos um sapo
impossível de matar. Sim. Tudo bem, então um
adereço importa cada vez, vamos impedir que nossa colisão E podemos ver isso. E eu vou te mostrar que, se
entrarmos em nosso player hit, eu vou
imprimir um sapo esmagado E você pode ver que, apesar estarmos mortos, ainda estamos
sendo esmagados Sapo esmagado, e
continuaremos sendo esmagados, mesmo que já estejamos mortos. Não queremos que isso
aconteça porque isso pode continuar
subtraindo vidas de nós, dependendo da
distância entre os spawns Então, vamos
corrigir isso em nosso player. E para fazer isso,
vamos pegar nossa forma de colisão
que criamos,
a forma de nossa forma de colisão
que criamos,
a forma colisão dois D, e adicionamos ao nosso player. E vamos
usar algo
chamado adiado nele E o que isso basicamente
fará se dermos
uma olhada é chamar o método no objeto
durante o tempo ocioso Sempre retorna Nou, não o resultado do método.
Então aí está. Nossa palavra-chave aqui é
chamá-lo durante o tempo ocioso. Então, vai chamar
isso de qualquer coisa que passemos. Quando tem a próxima
chance que tem, basicamente, em vez
de tentar ligar agora, quando talvez
não consiga. E as funções Sum
dirão que você deve fazer isso. Portanto, antes de chamarmos isso, você não precisa excluí-los. Eu só vou
te mostrar aqui o erro. Então, se entrarmos aqui e eu disser, desativado é igual a verdadeiro, vamos ver
se vamos
encontrar um erro E isso não impede que
nosso jogo rode, veja bem, fomos esmagados duas vezes, então nossa desativação não está
funcionando E segundo, se entrarmos em nosso
depurador e analisarmos os erros, isso
nos dirá que não
podemos mudar o
estado ao limpar as
consultas, use call deferred consultas Mas está nos
dizendo especificamente que devemos usar isso. É por isso que estamos usando a
chamada adiada aqui. Chamada adiada. E
aqui vai estar uma sequência do que queremos fazer. E, nesse caso, ele
será desativado. Se eu estiver desativado, será
necessário um segundo argumento, e
será para isso que vamos configurá-lo. No nosso caso, será definido como verdadeiro. E agora, se olharmos para
isso, esse erro desaparecerá e só seremos
eliminados uma E aí está. Não vai
mais aparecer dentro do nosso código. E se você está preocupado com o adiamento da
chamada quando somos atropelados por uma curta
distância de veículos, então quando são
três consecutivas, podemos dar uma olhada aqui, e ela já foi desativada
antes
mesmo do próximo veículo nos tocar Agora podemos realmente morrer aqui. Agora, o que temos que ver é como podemos nos recuperar, agora somos apenas um sapo que não pode ser morto porque não podemos
colidir com nada, então temos
que resolver isso com nossa morte, precisamos ter algum tipo de
reaparecimento, precisamos ter certeza de que só
podemos nos
mover se estivermos mover se Opa. Eu excluo um pouco
mais do que o pretendido lá. Tudo bem, então precisamos saber
se nosso sapo está
vivo ou está vivo E podemos fazer isso
com uma função simples que apenas verifica se
está vivo ou se está morto. E com base nessa variável, podemos nos mover ou não. E para isso, vamos
usar um conjunto de estados, que será um ENOM como você pode ver aqui no exemplo aqui
, podemos usar esses Enums para armazenar dados
específicos,
eu suponho que você poderia E é basicamente como uma lista de opções que
podemos selecionar. E isso torna tudo mais fácil quando se
trata de verificar as coisas. E você pode ver isso quando
se trata da forma básica de uma máquina de estado, que é usada para caracteres. Por exemplo, se você
jogou Grand Theft Ato cinco, por exemplo, você tem controles
diferentes
quando está a
pé em comparação com quando
está em um veículo. E isso porque você, com controles
a pé,
seria um estado. Nadar seria outro estado, e um carro seria um estado e uma aeronave seria
outro estado, etc E vamos
usar isso para saber quando estamos vivos e quando
nosso sapo foi esmagado. Então, para criar isso, em vez de usar
a palavra-chave var, usamos Enum, o
nome do Enum,
que, como vai funcionar como uma máquina de estado,
vou chamá-lo E então, em vez de
usar números iguais ou dois pontos, simplesmente
pulamos
direto para o colchete simplesmente
pulamos
direto para o E tradicionalmente, pelo
que eu sempre vi, eles sempre estarão nas capitais, então eu vou viver e depois cair em coma para
a próxima linha morta Então, esses são nossos dois
estados vivos e mortos. Alive será o estado
padrão aqui. E vamos criar
uma nova variável chamada estado
atual e
vamos declarar
isso como sendo um estado Então, será um
dos nossos estados aqui. Tudo bem, agora
com nosso movimento, tudo o que precisamos fazer é
verificar se o estado atual é igual a dois
iguais ao estado ativo
e, em seguida, inserir nosso movimento Então, agora só podemos nos
mover quando estamos vivos. Então, agora, quando morremos,
temos que dizer que nosso estado atual agora está
sendo definido como igual a deb. Então, se executarmos isso
agora, não
seremos capazes de nos mover depois de
morrermos e sermos esmagados E aí está. Estamos todos presos
e não podemos nos Então, agora tudo o que nos
resta é seguir em frente e criar o respawn Vamos criar uma
função de respawn, respawn. E uma vez que tenhamos vidas aqui, é aqui que
vamos verificar. Se o jogador ainda tiver vidas, chamaremos
isso. Tudo bem Então, vamos continuar,
como respondemos? Bem, precisaremos fazer com que nossa colisão volte a funcionar Então, precisaremos chamar deferred em nossa forma de colisão E em vez de
configurá-lo como desativado, precisamos defini-lo
como falso para que ele
não seja mais desativado. Precisamos mudar
nossa posição, certo? Posição autodidata, e
precisamos redefini-la para onde será nossa
posição inicial. E, no momento,
são 169 e 233. Vou copiar
esse valor bem rápido. E dentro da minha cena principal, vou adicionar um let's see. Como eles o renomearam
aqui? Ah, vamos lá. Foi renomeado para Marker two
D. E me dê 1 segundo. Vou preparar isso para
você. Aí está. Então, vamos
usar um marcador dois D. E eu vou configurá-lo
para transformar por enquanto Só vou colar
o valor. Vou colocá-lo na mesma posição em que
nosso sapo está começando E vou chamar esse
jogador de local de desova. E agora, quando respondemos, podemos fazer com que a posição do ponto automático seja
igual ao nosso jogador Isso não vai ser
preenchido para nós, então eu só vou ter que
digitá-lo em player,
spawn, localização, posição do ponto E isso deve
acontecer instantaneamente. Então, vamos seguir em frente e
retomar nosso processo aqui. E vamos
formar outra verificação estado atual de
LI é
igual ao estado ponto morto. Você pode chamar Respawn, e isso deve nos
levar de volta ao início de onde
começamos, se você for morto E parece que temos uma dica. O que é mito? Oh, isso é justo. local de desova dos jogadores, não
podemos
ter acesso a ele porque, na verdade, precisamos subir na árvore Lembre-se de que somos um jogador
e o jogador não tem acesso direto a esse local do
jogador aqui. Então, precisamos seguir
essa linha e subir um, e então isso
nos leva a esse número de D, e então nenhum outro D tem acesso ao spawn de
nossos jogadores Então, temos que subir um. E a maneira como podemos fazer
isso é de algumas maneiras. Podemos seguir em frente e
pegar o pai, obter o nó. E esse nodo G é apenas uma forma longa de
escrever esse cifrão. E então, dentro,
haveria uma string para o caminho diretamente para a localização
do espaço do jogador. Como alternativa, para manter
isso um pouco curto, podemos simplesmente obter o node e transmitir algumas coisas. Podemos usar um ponto, que é igual a escrever
self, ou podemos fazer dois pontos, que é igual ao get
parent que acabamos de excluir E você pode ver isso
como muito mais curto. Então, podemos fazer isso com G
parents player spawn location. Tudo bem, e isso
deve resolver isso. Agora, quando formos esmagados, deixe-me ver se
voltamos ao início Só que
ainda não podemos nos mover porque temos que definir nossa aposta atual.
Lembre-se de que não podemos nos mover. O estado atual é igual a State Live. E não só isso, temos que
fazer com que nossa animação volte a ser nosso ídolo Wops. Então, vamos pegar nosso
sprite animado dot twoB e jogar nosso Idol Sprite, voltando ao
normal E quando o executamos agora
, só que agora, não podemos realmente dizer
quando recebemos uma resposta Então, o que vou
fazer é, primeiro de tudo, usar
Caldeford e definir isso depois de todo o resto,
porque percebo que depois de todo o resto estamos
sendo esmagados duas vezes, então veremos se corrigimos apenas movendo
essa linha Isso não acontece, ok.
Não é um problema. Só precisamos
ter um pequeno cronômetro,
por exemplo, depois,
o que é bom Tudo bem, então vamos
ver o que precisamos? Precisamos. Nosso símbolo morto não está funcionando muito
bem porque jantamos e
reaparecemos instantaneamente Não podemos dizer nada do
que está acontecendo. Então, o que vamos fazer é que, dentro desse renascimento, criaremos um
await E faremos o que
fizemos antes de usar Get Tree e criaremos esse cronômetro. E vamos configurá-lo para 1 segundo. Parece muito tempo
e o sinal de tempo limite. Então, 1 segundo pode parecer muito tempo aqui em um jogo
antigo como esse, splat e depois reaparecemos Incrível. Agora estamos sendo
esmagados várias vezes lá, que é um Então, vou vir
aqui e criar outro pequeno cronômetro para 0,5, e vou ver
o que posso fazer ou quão pequeno posso
reduzir isso por meio Ok, 0,5, podemos
escapar impunes. Vou tentar 0,2. E eu posso escapar com 0,2, então talvez até consigamos
escapar com 0,1. Tenho esse atraso muito
pequeno aqui. Sim, lá vamos nós. Então, agora temos
aquele 1 segundo em que nossa imagem
de morte estará
na tela de nossa
pobre e esmagada Bronte E então a resposta
acontece. Incrível. Agora, se você quiser,
pode definir esse número em uma variável aqui para o
cronômetro ou o tempo de resposta, e esse será o tempo
entre as respostas Agora, para mim, acho que
vou deixar tudo por uma vez. Isso não é um problema.
Acho que nunca
vou querer me ajustar Agora, se você notar
aqui quando eu estava indo, se eu me sentar aqui,
eu poderia ser esmagado pelo carro embaixo Não, estou bem. Oh, mas eu fui esmagado lá
quando me virei para Então, talvez eu queira ajustar minha posição
Y um pouco mais. Talvez eu queira ajustar minha
posição Y um pouco mais lá, mas isso vai
se resumir a apenas brincar com a posição e um pouco mais Mas sem problemas. Mas isso bastará para isso. Agora temos nosso sistema de morte
e ressurgimento de jogadores acontecendo Não temos nenhuma vida
acontecendo no momento, mas chegaremos a essas
vidas quando chegarmos
à nossa seção de interface do usuário. Mas com isso, tome cuidado. Essa foi uma grande quantidade de informações
que examinamos. E eu espero que você esteja pronto.
Estamos passando para a próxima seção
do jogo, ou seja.
33. Morte por água: Tudo bem, então vamos fazer com
que, quando pularmos
na água, morremos e tenhamos que reaparecer Bem, para fazer isso, poderíamos fazer isso de
algumas maneiras diferentes. Mas a maneira mais fácil de fazer isso, já que fazer isso, já estamos usando um mapa de blocos, é
tirar proveito disso
e usar o mapa de blocos para nos
dizer em qual ladrilho
estamos. Se estivermos na
água, morreremos. Se não, ficaremos bem. Eu faço isso. Vamos ver o roteiro
de nossos jogadores. Feche nas outras guias. Então, vamos ver o roteiro de
nossos jogadores. E o que precisaremos
é de uma nova variável para
manter nosso mapa de blocos aqui. Agora, não precisamos
definir isso no topo, mas também não precisamos configurá-lo
constantemente em nossa função que
vamos criar. Tudo bem, então vamos ver isso e vamos usar
a palavra-chave on ready, e tudo isso significa que a
variável que vamos
criar seria a mesma que se a
definíssemos aqui no ready Então, se disséssemos, por exemplo, número em dez
é igual a dez, seria a mesma coisa que se
criássemos um número e
depois o definíssemos como criássemos um número e dez aqui
dentro do bloco Tudo isso está pronto. E isso é útil quando
queremos nos apossar de nós
específicos que estão
dentro de nossa cena E em nosso exemplo,
queremos obter esse
mapa de blocos aqui Então, vamos
fazer var Tilemap. E vamos definir o nó
igual ou parcial
e, claro, atualmente ele é chamado
apenas de Tilemap Agora, lembre-se do que eu disse, acho que foi
no último vídeo. Em vez de usar getParent aqui, poderíamos
encurtar isso e, em nosso get no, basta fazer uma barra de pontos e ter o mesmo
equivalente de Acho que vou fazer isso apenas
para manter as coisas novamente
um pouco mais curtas. Tudo bem Então, agora
temos nosso mapa de blocos. Agora, o que queremos
fazer é verificar em qual ladrilho
estamos de pé. Então, vou seguir em frente e
criar uma nova função aqui. Vou ligar para
esse cheque, ID do celular. Opa. Isso vai nos
dar uma reviravolta vazia E o que isso vai
fazer por nós
é basicamente usá-lo para primeiro obter a posição da célula em que
estamos. Então, vamos dizer pausa na barra, que será definida como nosso mapa de blocos local para
MAP E então isso
tomará uma posição, e essa posição será
a posição do nosso jogador. Agora, o local to Map apenas nos devolverá uma posição, que será
a posição da célula em que
estamos. E as células seriam cada um
desses quadrados alaranjados. Então, como estamos aqui, imediatamente quando
o jogo começa, ele nos dirá essa célula aqui, a localização dessa célula. E então a próxima variável
que vamos criar basicamente
entrará lá e dirá:
Ok, isso é feito
com esse ladrilho. Agora, qual é essa identificação, e ela
vai nos devolver uma. E para obter esse ID,
criaremos uma variável aqui. E isso
vai ser apenas o Tilemap. Aparência. Mapa de blocos. Ainda não. ID da fonte do Sell. E isso só vai
exigir os dois argumentos. A primeira será
a camada
em que está , que é a camada zero. E a segunda
será a posição, que já obtivemos da
nossa variável de pausa no mapa aqui Então, agora esse ID agora deve ser
o que estamos usando. Então, se
entrarmos e imprimirmos essa identificação e executarmos a verificação da
identificação da célula dentro do nosso processo, veremos imediatamente uma ser
impressa para a mediana, duas para a estrada e três para a água Aqueles que executam isso, podemos dar uma olhada na saída. Vemos um ser impresso para nossa mediana, dois para nossa estrada E se eu conseguir chegar
até a água aqui, podemos ter um para
a mediana novamente, e depois três quando
atingirmos a água Lá vamos nós. Agora sabemos que isso está funcionando perfeitamente, mesmo se viermos até aqui, porque
verificaremos a camada zero. Então, vamos ter
três que será nossa água, pois bem,
sabemos disso agora. Então, o que vamos
fazer é verificar se o ID I é igual a três, e é aqui que
mataríamos nosso jogador. Tudo bem, então entramos chamamos nossa função de morte aqui. Agora, quando tocamos na
água, devemos morrer. Lá vamos nós. Então, agora podemos morrer quando nosso jogador toca na água e espera
pelo ressurgimento Agora, isso pode ser
um pouco cansativo quando o
verificamos constantemente dessa
forma, não importa o que aconteça Então, a próxima melhor
localização seria ligar
para cá somente
quando estivermos vivos, mas ainda melhor, é que podemos ligar sempre que realmente
nos mudarmos. Então, vou adicionar isso ao final de todos os
meus movimentos aqui. Agora, quando estou me movendo em qualquer direção, é a
única vez que vamos verificar em vez de enviar spam Até agora, tudo bem. Pule, pai, espere o renascimento Agora, mova-se novamente. Tudo bem. Agora podemos afogar
nosso sapo na água e deixar nosso
sapo ser esmagado por um Tudo bem. Então, temos todas as nossas
mortes sob controle agora. Tudo o que
nos resta fazer é fazer
nossas plataformas
funcionarem e, em
seguida, obter nossos pequenos pontos de vitória no final, pulando para
os locais certos e, em seguida,
configurando nosso heads-up display
com nossa pontuação E então eu acho que
estaremos quase terminando. Acho que não vamos perder
nada depois disso. Pode estar errado, mas
aí está. Agora podemos afogar nosso
sapo na água, e agora você sabe
como obter a identificação de qualquer ladrilho em que seu
jogador esteja Tudo bem, fazer isso por este. R. Vejo vocês
no próximo vídeo.
34. Plataformas de água: Tudo bem,
vamos começar a configurar
nossa plataforma. Depois de configurarmos nossa
plataforma, a única coisa que podemos fazer ou
a única coisa que nos
resta para essas plataformas
é basicamente trocar os sprites e
torná-los cada vez mais
curtos Então, para minha plataforma aqui, vou usar apenas
uma configuração de três sprites aqui para que possamos usar
o log para este exemplo, o final, o meio
e a outra extremidade, direita, meio e início Então isso significa que estou
usando três sprites aqui com minha cena principal, a raiz da minha cena aqui é o corpo de um personagem que
eu renomeei Eu poderia renomeá-lo para
um registro, se quisesse. E isso tem uma área dois D com uma nave de colisão que
cobre meu registro aqui E eu
conectei o sinal de
entrada e saída do corpo Ok. Então, quando você tiver esses dois
sinais conectados, o script em sua plataforma
deve ter a seguinte aparência, e estamos prontos para adicionar informações ou adicionar
tudo a ele. Então, da maneira como
vamos fazer isso, também
vamos adicionar
coisas ao nosso script de jogador. E a maior parte
desse trabalho, na verdade,
estará no script do nosso player. Então, por enquanto,
vamos ao nosso script de player e adicionar algumas variáveis
que vamos usar. Primeiro, será
uma plataforma,
e isso será um booleano, e isso basicamente
dirá ou informará nossa água se estamos
seguros ou não porque estamos em uma plataforma ou se
não estamos em uma plataforma, a chamada
notificação de morte Vamos obter nossa
plataforma var atual, que é o corpo de um personagem em
dois D que passamos. Então, eventualmente, vamos
configurá-lo . Por enquanto,
vou enviá-lo para N e precisaremos de
uma direção de plataforma, que é um padrão inteiro Vamos definir como zero, mesmo que isso não importe. Tudo bem Então, novamente,
vamos usar a plataforma, a plataforma atual e a direção da plataforma como nossas três novas variáveis
em nosso script de player. Vamos
prosseguir e descer
até nossa identificação de célula de verificação e adicionaremos
à nossa declaração if. Então, vamos dizer
se ID é igual a três e a plataforma é igual a false Dessa forma, diremos que se estivermos
na água e
não estivermos em uma plataforma
, mataremos o jogador. Então, temos nossas
condições definidas lá. Vamos ver. Para um jogador, também vamos verificar enquanto estamos vivos. Se nossa plataforma atual não
for igual a null, o que não será,
só será igual a ela por enquanto Terá um objeto atribuído a ele quando nosso
jogador estiver em nosso registro. Então, digamos que a plataforma atual não
seja igual a nula, então podemos
seguir em frente e chamar
nossa posição de ponto mais
igual, vamos
fazer um pouco nossa posição de ponto mais igual, vamos
fazer um Precisamos abrir e fechar
nossos parênteses aqui porque vamos usar a ordem das
operações quando
se trata de operações quando
se trata Vamos dizer direção
da plataforma. Vezes 16. Então, vamos usar isso como mais um
ou menos um, assim como fizemos
com nossos veículos, e multiplicamos por 16 Então, ou
vamos mover 16 para a esquerda ou
16 para a direita, e vamos
fazer isso ao longo do tempo. Então, vamos
multiplicar isso por Delta. Dessa forma, não somos baseados em quadros, somos mais baseados no tempo. Tudo bem Então, a única coisa que nos resta
fazer é
definir a direção da nossa plataforma, e podemos fazer isso
por meio de uma função. Divertido. Queremos seguir, vamos seguir a direção definida. E isso pegará um argumento de um número inteiro, não retornará nada E tudo o que isso vai
fazer é definir a direção da nossa plataforma
igual a ter. Tudo bem Então, agora podemos
acessar nosso script de plataforma e não precisamos desse
bloco pronto. Nós podemos deletar isso. E dentro do nosso processo, queremos que nosso registro no meu
caso continue em andamento. Então, vou seguir em frente e
posicionar o ponto X mais
é igual a 16 vezes Isso o
moverá constantemente para a direita. I quando entramos quando nosso
jogador entra na área. Então, vamos definir a
plataforma aqui como verdadeira e vamos definir
nossa plataforma
atual nosso log aqui,
minha plataforma aqui. Então, vou pegar a plataforma
body dot e definir isso como verdade, porque agora estamos na plataforma e, no corpo, acredito que
era uma plataforma de meio-fio Sim, plataforma de freio é igual a isso. E quando o corpo sair, vamos fazer o oposto,
então vamos definir Em vez de verdadeiro, vamos
defini-lo como falso. Em vez de célula, defina-a como saber. Tudo bem? Então, o que
estamos fazendo até agora é pular no tronco, que atualmente está se movendo
para a direita o tempo todo Enquanto está fazendo isso, ok. Reinicie isso. Atualmente, nosso registro está
se movendo para a direita 16 ao longo do tempo e não é
baseado em cérebros Agora, quando nosso jogador entrar na área de nossa plataforma em
que ele pode ficar, vamos definir
a variável de plataforma em nosso jogador como verdadeira. Dessa forma, quando verificarmos o ID da célula para ver se
estamos na água, plataforma será verdadeira e nosso
jogador não será morto. E então estamos definindo a variável
curva da plataforma do nosso jogador para a
plataforma atual igual a self. Então, o
corpo do personagem aqui que está se movendo representa
nossa plataforma. E com base nisso, poderemos mover nosso personagem aqui. Portanto, a plataforma atual não
é igual a nula. Então, se estivermos em uma plataforma
atual, moveremos
nosso sapo na mesma direção e
na mesma velocidade Então, a última coisa que nos
resta é realmente
chamar essa função que
criamos para definir a direção. Então, ponto do corpo ou direção definida, e isso leva um número inteiro, o que significa que vamos nos
mover para a direita Usaremos um positivo. E agora, se adicionarmos a plataforma à nossa
cena e a executarmos, como você vê, lá está nosso registro, e se pularmos nele,
acabamos morrendo lá. Talvez seja necessário atualizar isso. Um momento lá. Traga
um novo de volta. Vá até lá,
dê outra chance ao papai. Ok, estou morrendo, então meus sinais talvez precisem ser reconectados Vou desconectar isso
e reconectá-lo. E farei o
mesmo com minha saída, desconectarei e
reconectarei a saída do meu corpo E veremos se
esse era o problema. Ok. Acho que vi
o que perdi aqui, e estamos recebendo essas
informações um pouco rápido demais. Então, antes de termos nossa
instrução if dentro de
nosso ID de célula de verificação, vou usar um peso e fazer o que fizemos
antes com Get tree, criar um cronômetro, e
vamos fazer
uma pequena pausa de 0,1 e obter aquele sinal de
tempo limite E isso deve resolver isso para nós. Aqui vamos nós. Agora podemos pular em nosso pequeno
tronco e estamos bem. Podemos pular para frente e para trás e ficar bem,
e estamos nos movendo. E assim que pularmos, podemos correr de volta para o
outro lado, se quisermos. E ainda assim, se
pularmos na água,
opa, seguimos em frente e morremos Tudo bem, então como podemos
tornar esse script um pouco mais? Acho que poderíamos
dizer modular de uma forma, uma
forma que seja mais
amigável, para que possamos mudar constantemente se
temos mudar constantemente se dois sprites,
três sprites,
um sprite, o tamanho da nossa forma de
colisão,
e ter tudo isso de qualquer maneira, bem
como, eu acho,
definir nossa direção para que possamos para a direita e alguns para a
direita ou outros para a esquerda. Bem, vamos prosseguir e
exportar
a direção
de um número inteiro Isso é zero por padrão. Oh, tenho a palavra bar
aí. Lá vamos nós. Agora eu quero ir para minha plataforma. Eu posso mudar isso para
um em vez de zero. Podemos pegar a direção e passá-la aqui quando
chamamos a direção definida. E mais é igual, e poderíamos fazer a mesma
coisa aqui, onde
temos direção Whoops E podemos ir em frente e
verificar se tudo ainda está funcionando. Não quebramos nada. Está bem? Os arqueólogos ainda estão se movendo Podemos pular nela e pronto. Está bem? Então, ainda não quebramos
nada. Isso é ótimo. E vamos ver, o que
mais precisamos? Bem, acho
que seria isso. E podemos seguir
em frente e definir ou criar todas as nossas plataformas
diferentes agora usando o mesmo script. E então criamos
um patrocinador para isso, assim como fizemos
com nossos caminhões Eu volto em breve enquanto
crio alguns desses. Tudo bem, então eu fui
em frente e fiz cerca de três tartarugas longas também, e só faço algumas
aqui na cena E como você vê, vá em frente
e jogue este tronco, pule para as próximas tartarugas Na próxima, pule para a direita. Suba na minha tartaruga,
espere, pule no tronco e estou pronto para pular no
que seria nosso espaço eólico Tudo bem Portanto, nossas plataformas certamente estão funcionando bem agora. É ótimo.
Quero observar que adicionei um await for 0.1 no corpo inserido antes de alterar a plataforma em nosso script de
plataforma Então, eu quero
tomar nota disso. E agora tudo o que precisamos
agora são nossos criadores. Tudo bem, então vamos
em frente e criá-los. E vamos
efetivamente torná-los iguais aos nossos
caminhões aqui. Em seguida, vamos
pegar nós mesmos ou adicionar um D não dois, que chamaremos de gerador de plataforma. E vamos
começar a alinhá-los. Então teremos um
lá. Eu tinha ido lá. Tem um que parece estar lá. Ok. Esse visual até faz isso. Na verdade, um
lugar um pouco estranho. Sim, vá lá. E então precisamos de um casal do outro lado para enfrentar nossos obstáculos Um agradecimento final e outro pelo nosso obstáculo Tudo bem Então, esses
parecem bons pontos de desova Esses são um pouco próximos. Ajude a recuar um pouco esses. E
teremos algo semelhante
ao nosso gerador de caminhões, então
vou copiar nosso gerador de caminhões. E vamos ver. Eles
vão ter o mesmo nome
diferente do veículo. Sim, praticamente. Então, provavelmente
poderíamos nos safar usando nosso script de
caminhão aqui. Nossas plataformas
seriam chamadas de veículo. Mas acho que quero
fazer uma diferente porque não
gosto do tempo de espera. Não acho que isso
seria bom para as plataformas. Eu só vou
usar isso como minha base. Vou clicar no gerador da
minha plataforma e
adicionar um novo script E aqui, vou seguir em
frente e colar os scripts do
veículo. Vou chamar essas plataformas. Opa. Não era isso que queríamos.
Vamos mudar isso para platform dot Instantiate PI para
platform Instance, self at Child Tempo de espera. Veja, é aqui que o
problema vai entrar. Então eu acho que vamos ver. Vamos de 1 a 2 e
adicionaremos três a isso. Então, veremos como isso funciona. Em seguida, mudaremos isso
de veículo de extensão para plataforma de desova Então, essa aqui será nossa cena de registro. Cena da plataforma. O próximo ,
novamente, será
o mesmo. Vou prosseguir e simplesmente
arrastar meu script para cima e anexá-lo a todos os
meus poners de plataforma E a segunda é minha cena de registro. Três é a plataforma de madeira, e então quatro e cinco
serão meu território. Tudo bem Então, se agora nos livrarmos
dessas plataformas, mova meu player para
baixo da coluna para que o sapo
possa Vamos ver se está funcionando. Sim, sim, eu chego
até o outro lado. Sim, aí estão minhas tartarugas. Bem, parece que precisamos
mudar esses tempos de espera. Isso fará com que
seja extremamente fácil para nosso jogador
simplesmente atravessar. E é por isso que queríamos
usar um script diferente do nosso caminhão, porque
precisaremos de tempos de
espera
completamente diferentes para as plataformas. Tudo bem? Então, vamos
tentar mais dez. Então, isso nos dará uma
variação de 11 e 12 segundos. Oh, o que eu coloquei
entre esses carros? R: Portanto, 11 e 12 segundos podem ser
uma lacuna muito pequena neste caso. Então, neste momento, estamos apenas ajustando para ver o que se encaixa melhor aqui Mas talvez
tentemos cinco e seis. E eu vou pular até
o outro lado e veremos como é esse
tipo de propagação. Mas, neste momento,
você está
praticamente ajustando seus
números para ver o que parece bom para suas
plataformas e o que parece bom para seus caminhões Eu só quero ter certeza de que
eles não
serão completamente consistentes
o tempo todo, e parece que não
estão, o que é ótimo. Como alternativa, se você
quiser
codificá-los um pouco mais ou
torná-los diferentes especificamente, venha aqui e
espere aqui e faremos com que seja
um flutuador, não um apartamento Como alternativa, você pode fazer isso aqui e excluir essa
linha completamente. Se você quisesse ter
uma quantia específica. Você queria ter controle sobre a quantidade exata
de tempo que esperou por respondente,
você pode fazer isso dessa forma Vou continuar com
esse pouco de randomização aqui. E você sabe o que? Eu
vou com o Ted lá. E acho que
isso bastará para nós, porque agora
temos nossos patrocinadores Temos nossas plataformas. Então, tudo
parece estar funcionando. Nós poderíamos atravessar. E acho que, a seguir,
podemos fazer nossa vitória, nossa pequena vitória lá em cima quando pularmos para
a zona correta. Vamos ver. Eu
gosto desses números? E pulamos na
água, morremos. Incrível. Acho que gosto desses
números, pelo menos por enquanto. Tudo bem. Então, é isso. Terminamos de criar e montar nossa plataforma
. Em seguida, cobriremos a
área em que pulamos em nossa zona de vento e desovamos em
nosso pequeno sapo doméstico Tudo bem. Te
vejo na próxima.
35. O espaço de vitória: Tudo bem. Para a zona de vento, você pode ver que eu
tenho uma nova cena aqui, que é apenas uma
área dois D com forma de colisão e um sprite dois D que só
tem meu sapo doméstico Como textura, e ela está desativada ou visível,
é desativada por padrão. Você pode fazer isso clicando
no pequeno globo ocular aqui. E o WindSpace tem um script, bem
como um
sinal inserido no corpo conectado a ele E para o script, simplesmente, o que vamos
fazer é definir
body dot Win Zone como verdadeiro. Win zone é uma nova variável que foi adicionada ao jogo. O estado atual do body dot é
definido como body dot sta dot win. Então, temos um novo
estado adicionado aqui, então agora temos
Alive, Dad and Win. Então, tudo o que fazemos é
pegar nosso sprite two D, pegar a propriedade visible e
defini-la como verdadeira E para nosso player
evitar problemas e
corrigir um pequeno bug, eu usei aqui. O estado atual do LF é
igual a stat dot dead. Coloquei nosso peso de 1 segundo aqui e o retirei
da função de respawn Costumava estar aqui no topo. Acabei de retirá-lo e
movê-lo para nosso estado e isso deve
ser tudo o que temos que fazer. Agora podemos voltar à nossa cena principal e
importar nossa zona de vento, nosso espaço eólico, e simplesmente encaixá-la em
cada um de nossos pequenos espaços. E talvez você precise fazer
alguns testes para
garantir que seu sapo
não o toque prematuramente para
acionar Você? Então eu tenho o meu
cobrindo todas as minhas áreas. E se você quiser verificar suas zonas de colisão
e todas essas áreas de depuração, basta acessar o menu de depuração na parte superior
e você terá a opção mostrar formas de colisão visíveis E se você fizer isso,
ao executá-lo, verá que podemos ver todas as nossas pequenas caixas
de
colisão aqui Para tudo. Lá vamos nós. Portanto, se você o estiver
acionando acidentalmente ou talvez esteja,
habilite-o habilite-o Dê uma olhada você mesmo. E você verá quando
subirmos. Deveríamos ter outro registro. Aí está. E podemos
desencadear nossa vitória. Yo. E observe que não ficamos totalmente
impressos em nosso
console lá embaixo. E quando nosso estado é nosso estado
atual em dot win,
reaparecemos e, em seguida, retornamos a zona de
vitória para falsa Agora, também estamos usando a zona de vitória
abaixo em nossa ID de célula de verificação. Então, adicionamos outra
condição aqui. Portanto, se o ID for igual a três
e a plataforma for falsa. Então, se estamos na
água, não estamos em uma plataforma e nossa zona de
vitória não é verdadeira, ou você poderia dizer que a
zona de vitória é igual a falsa. Essa seria outra
forma de escrever. Então podemos chamar de morte. Então, se não estamos
na zona do vento, não
estamos na plataforma e estamos na água,
então matamos nosso sapo. Caso contrário, nossa aposta de vento
deve ser acionada e podemos simplesmente responder
sem matar nosso jogador. Tudo bem O
espaço eólico é muito simples, muito fácil de fazer lá. Agora, se você deixar o sapo aqui ativado, o tempo
todo depende de você Se você quisesse, você poderia
entrar e adicionar um nó temporizador. Você poderia vir
aqui e adicionar um cronômetro. E então
defina isso para, eu não sei, vamos dizer 5 segundos. Então, podemos entrar, ou
melhor, podemos conectar sinal
de tempo limite ao nosso espaço
eólico e ao tempo limite Definiremos nosso sprite com
dois D visíveis para Voss
e, logo após transformá-lo em
Tro, poderemos começar a Assim, podemos pegar o
cronômetro e começar. Se fôssemos fazer dessa maneira
, depende de você. É aqui que um pouco de
design vai entrar. Quão autêntico você
quer e quão personalizado você quer tornar seu
jogo, etc Então minhas madeixas e aquelas
começam a desovar. Vá lá. Ei, então eu posso vir aqui e
esperar para atravessar. Então, se usarmos o cronômetro aqui, nosso sapinho, nosso
sapinho caseiro aparecerá para vencer
e, depois de alguns segundos, ele desaparecerá para que você
possa vê-lo lá em cima
e lá vai,
ele Então, se você quiser
que desapareça assim , é assim que
você faria. Podemos simplesmente adicionar esse
cronômetro ao seu espaço eólico configurá-lo no inspetor para o
tamanho que você deseja Inicie o cronômetro depois definir o sprite
para ficar visível E quando o cronômetro expirar, defina-o como falso. Tudo bem. Então, isso bastará
para nosso espaço eólico, e só precisamos dar uma
olhada em nosso heads-up display ou HUD ou Qu Wee e
criar um sistema de pontuação Tudo bem. Então é isso, e
nos vemos na próxima. Estamos quase
terminando de criar
um sapo ou um clone
36. Correção de vazamento de memória: Tudo bem, pessoal, hoje
não vamos adicionar nenhum recurso Na verdade, vamos consertar
o que seria um suporte crucial, especialmente em um jogo maior Agora, o que temos é um vazamento de
memória em nosso jogo. E temos isso a
partir de dois pontos. Quero dizer, tecnicamente
mais de dez, mas vamos dar uma olhada Se continuarmos jogando isso, jogue esse jogo, e eu
vou tirar isso aqui. É que vou ter que
passar isso para vocês. Então você pode ver
tudo surgindo fora tela, e eles vêm,
eles vêm, e basta olhar para aqueles carros subindo para as plataformas no topo, e
farão o mesmo Eles vão continuar e vão para sempre. Eles nunca vão parar. E isso é
chamado de vazamento de memória. Tudo bem. Então, vou deixar isso aí para que
possamos ver isso com mais facilidade. Mas se eu pausar isso e clicar
na guia remota aqui no topo
da nossa árvore de cenas, que só está disponível quando
o programa está em execução E se usarmos o controle remoto, dê uma
olhada em todos esses carros
em apenas um gerador
que ainda existe, mesmo que provavelmente não
precisemos da maioria deles E o mesmo com todos
os outros geradores. E nossos geradores de plataformas
Nossos geradores de plataformas não
são tão ruins porque têm uma taxa de
rotação muito mais lenta do que os carros,
mas durarão para sempre
e nunca desaparecerão e nunca desaparecerão Eles nunca se
livrarão da memória. Então, eventualmente, você terá esse pequeno jogo
que pode ocupar 128 GB de memória apenas
para continuar jogando Levaria muito tempo, mas eventualmente tudo se encaixaria. Então, vamos corrigir isso muito
importante, eu acho, chamamos isso de bug, e é
muito simples de fazer. Só precisamos colocar uma
instrução if dentro
desses dois scripts. Agora, os números que
você escolher aqui, é
claro,
dependerão do seu projeto. Mas, pelo que testei e com base em nossa visualização da janela, tenho um conjunto de números
que vou usar aqui. E o que vamos
fazer agora é que eu estou dentro do meu script de plataforma e dentro do processo aqui. Vou apenas verificar
se a posição global tem X, agora a diferença aqui
entre posição e posição
global é se
entrarmos em nossas plataformas aqui, por exemplo, essa será nossa posição local, certo? Então, apenas a propriedade de posição. Mas quando estamos em nossa
cena principal acima de tudo, isso será responsável por nossa posição global
que vemos na tela, independentemente de quem seja o pai. Por exemplo, se dermos uma
olhada em nosso espaço de vitórias aqui, podemos ver que sua posição na tela principal aqui
é em 24 e 45. E esse será um espaço mais
global, ao
passo que, se entrarmos aqui, podemos ver nosso espaço eólico, nossa posição local
aqui é 00. Então, esses são dois números
diferentes. Então, espero que isso faça sentido para você sobre o motivo pelo qual estamos
usando a posição global aqui E, claro,
queremos a propriedade X porque ela
controlará nossa esquerda e direita. Então, se nosso X for maior que 436, isso significa cerca de 100 pixels
fora da tela à direita E com base na localização de
nossos patrocinadores, isso ainda dá
espaço suficiente para superar isso Portanto, se nosso ponto de
posição global X for maior que 436 ou o ponto de posição
global X for menor que menos 100 Então, estamos saindo cerca de 100 pixels da tela e na direção
esquerda e direita. Então, se alguma dessas coisas for verdade, tudo o que vamos fazer
é ficar livre de pontos Qu Tudo bem. Então, agora devemos ver as plataformas de
personagens
se desativando ou
se excluindo de nossa memória E essa é apenas uma solução
potencial. Para algo
assim, outra solução, que se você
depende do seu jogo,
por exemplo, se estiver fazendo algo
como um inferno de balas, você vai
querer usar algo chamado agrupamento de objetos,
e podemos falar sobre agrupamento de objetos
em um vídeo especial, se
você estiver certo, então
vou até meu patrocinador, ponto
GD, aqui, Meus Veículos E vamos ver. Qual deles estamos
procurando aqui? No roteiro do nosso veículo. Lá vamos nós. Portanto, não estamos
no roteiro de um veículo, e
a mesma coisa, exceto no processo. Vou colar o mesmo código. Se o ponto X da
posição global do sublinhado for
maior que 436 ou a posição do
sublinhado global X for menor que menos
100, o ponto próprio q E agora, se eu seguir em frente
e executar isso opa, estamos na
cena certa, nossa cena principal aqui Vou fazer uma pausa
bem rápida, ir até
nossa árvore remota E podemos dar uma olhada em nossas peças de reposição
regulares aqui, onde
os carros estarão aqui está minha janela de jogo
para retirá-las E se eu continuar e
deixar isso tocar, certo? Então, temos alguns carros localizados na
rede aqui, e podemos ver isso aqui E eu vou apenas estender
a janela para a direita. Meu erro aí. Parece que eu pego Goto
em vez Vá. E aí está. Você
pode ver que eles estão no controle remoto e
também visualmente lá. Quando você vai longe o suficiente, eles estão se
excluindo completamente Então, agora nossos objetos
estão todos sendo gerenciados, e
potencialmente só podemos ter alguns em nossa
cena a qualquer momento. E você pode ver as plataformas
na parte superior fazendo o mesmo. E as mesmas coisas acontecendo
no lado esquerdo, fora da tela, o que não
podemos ver agora. Então, vamos lá com
aquela simples, tecnicamente duas linhas de código, consertamos nossa memória, nossa memória, oh, isso está
saindo da minha mente agora Vazamento de memória. É engraçado,
já que estamos falando sobre memória. Mas aí está. Com isso, corrigimos
nosso problema de vazamento de memória. E eu vou
te mostrar um problema aqui. Não é realmente um problema,
mas só para mostrar mais
um exemplo aqui.
Nós vamos para a plataforma. Se usarmos a posição em vez
da posição global, você verá
um exemplo aqui. Se dermos uma olhada,
você verá que, especialmente com as tartarugas, você verá as tartarugas
desaparecerem desaparecerem Tudo bem. Observe-os,
eles estão chegando. Então, quando estamos usando essa posição
local, aí está. Você vê que eles estão
desaparecendo muito cedo. Eles mal aparecem na tela, mal chegam aqui e desaparecem. É por isso que temos que
usar a posição global. Tudo bem. Então, eu só queria demonstrar isso um pouco
mais visualmente para você. Sem redesenhar. Gratuito. E são simplesmente, como
eu disse, completos, destroem o objeto e o
tiram da memória Tudo bem, então aí está. É assim que podemos
consertar essa memória tarde. Tudo bem. Em seguida, podemos passar para a pontuação e o HUD, adicionando vidas de jogadores
e tudo
37. Sistema de pontuação: R: Tudo bem. Então, no vídeo de hoje, vamos adicionar o sistema de pontos, como você pode ver aqui. Essas são
as regras dez pontos para cada etapa, 50 pontos para cada
sapo que
entra e 1.000 pontos para cada
vez que colocamos cinco sapos Então é isso que precisamos ter em
mente quando fazemos isso. E vou
começar criando um script global, também conhecido como Singleton
ou script de carregamento automático E para isso,
vou clicar com o
botão direito do mouse no meu sistema de arquivos. E crie um novo script, e vou
chamá-lo de meu .
Vou simplificar e me tornar global. E para ativar isso, acessamos
as configurações do nosso projeto. Vamos ver. Temos isso
capturado agora? Nós não temos. Aqui vamos nós. Pode
ser um pouco grande, mas vamos lá. E entramos na guia Carregamento automático. Clique em nosso botão de navegação e simplesmente fracasse e selecione
nosso script global Vou receber o nome
global por padrão. Você poderia alterá-lo, mas não
vejo por que precisamos adicionar, e pronto. Agora podemos usar esse script em
qualquer lugar do nosso código. E agora, acho que é aí que vamos
manter nossa pontuação. É aí que vamos
manter nossa pontuação. Então, se fecharmos isso, agora podemos abrir nosso script global
clicando duas vezes nele e dar um exemplo aqui. Nós podemos vir até aqui.
Criamos outra função aqui chamada Print SCORE. Eu tenho uma variável
aqui chamada SCORE. É um número inteiro, digamos que você tenha 50. E o objetivo dessa função é apenas
imprimir a escola. Então, sendo global, eu poderia entrar no script
do meu player aqui e escrever o nome que tínhamos para o
que eu deixei, chamado Global
para o ponto G maiúsculo,
e então poderíamos usar
a função
que e então poderíamos usar acabamos de
criar, imprimir SCR. E então, quando
executarmos isso, veremos essa pontuação impressa
aqui em nossa saída. Portanto, um script global contém variáveis e
funções que podemos alterar e usar em nosso jogo
em qualquer script em qualquer momento. Então, vamos em frente e
podemos remover todas essas
coisas e definir
a pontuação como zero por padrão. E vamos
seguir em frente e ter uma função chamada pontuação de atualização. Tudo o que vamos fazer
aqui é ir para onde vamos
imprimir nossa partitura. E precisamos exibi-lo?
Devemos exibi-lo na
tela neste vídeo? Agora, salvaremos
a exibição na tela quando começarmos a
cobrir o HUD. Então, aqui,
vamos imprimir
a partitura. Quando isso acontecer, a pontuação de atualização levará o novo valor a ser adicionado. Pode ser uma pontuação de int to do
plus é igual a uma nova quantia. E podemos fazer Bem, vamos primeiro garantir que
essas coisas funcionem. Então, toda vez que
pulamos, ganhamos dez pontos, certo? Então, teremos
que adicionar isso ao nosso movimento em
todas as nossas peças. Então, vamos usar global dot
Updates it Update score? Porque ainda não o salvamos. Yo. Atualize a pontuação e
passe em dez pontos. E vamos
copiar isso em todos os nossos movimentos e
entrar no jogo. E à medida que avançamos,
devemos ver dez pontos adicionados
constantemente. Lá vamos nós. Dez, 30, 40, 50, 60, 70, 80, 90, 100, um, dez, etc.,
então isso está funcionando Todos nós temos nossos
botões, fantásticos. Podemos simplesmente aumentar nossos
pontos assim. Então, os pontos aqui são incríveis. Eu simplesmente fui em frente e me livrei
das outras impressões
que estavam lá só para esclarecer isso, tornar tudo um pouco mais fácil para você. Então, à medida que avançamos e
corremos até lá e damos
voltas, você pode ver em nossa saída nosso número aumenta
toda vez que nos movemos. Então, vamos lá. Está funcionando. Fantástico. Agora, também temos que acompanhar
quantos sapos obtemos no total, caso sejamos total de sapos, não
parece a quantidade que queremos blá, blá.
Nós chamamos isso de combinação. Sapos em Um, eu não sei. Vamos chamá-lo de Multi Frog. Sapo múltiplo. Começa do zero. Toda vez que você adiciona
ao multisapo, certo? Nós fazemos vários sapos
mais é igual a um. Eu lembro que com
cada combinação de cinco, ganhamos 1.000 pontos Então é aqui que
vamos, eu multisapo, menos de cinco, então
vou tocar nesta linha aqui Então, vamos marcar
mais é igual a um novo valor. Caso contrário, marcamos
mais é igual a 1.000. Obteremos 100 se colocarmos cinco
neblinas , isso só acontecerá se entrarmos em
uma área de pontuação, então não podemos realmente
aumentar nosso sapo pi Então, para isso,
realmente temos que ir ao nosso WindSpace e entrar em
nosso próprio corpo inserido, e é aqui que vamos
aumentar esse número Então, vamos fazer Global
MultifrogPlus igual a um. Vou colocá-la
diretamente dentro do nosso WindSpace. E então também
vamos
chamar nossa atualização pontuação global de atualização de pontos, e vamos passar de
50 porque temos um sapo E como já estávamos aumentando
nosso Multi frog antes, atualizando nossa pontuação, certo Então, estamos atualizando nosso sapo múltiplo por um, depois verificaremos Basicamente, se esse
for o nosso quinto sapo ou se esse não for o
nosso quinto sapo, então faremos isso Vamos apenas adicionar esses 50. Caso contrário, adicionaremos 1.000
e, na verdade,
precisaremos reduzir o multi frog para zero porque
ele precisa ser
redefinido reduzir o multi frog para zero porque
ele precisa ser
redefinido Então, vamos ver se isso funciona. Tudo bem Estamos até
aqui. Vamos em frente e
entrar na zona. Divertido. Ei, estamos no registro. Agora vamos esperar que essas
tartarugas cheguem. Muito bem, pequena tartaruga. A tartaruga. O sapo
e a tartaruga Então, vamos ter 290. Então, devemos pular aqui. Agora, quando entrarmos na Zona, devemos pular para 340 E oh, subimos para 350
nesse caso porque
também nos mudamos ao mesmo
tempo. Tenho que lembrar disso. Hum, nós temos nossos dez pontos. Esse sapo funciona dessa maneira? Na verdade, já faz muito
tempo que não jogo, então não tenho 100% de certeza disso. Se for esse o caso, então, para
resolver esse problema, é claro, podemos simplesmente adicionar 40, e então contaremos isso mais dez a partir do nosso salto até lá. Então, se fôssemos em frente
e entrássemos
nisso agora, pareceria
um torque de mais 50. Como eu disse, não tenho
certeza se isso conta esse salto real ou não no jogo real. Talvez seja algo
que possamos dar uma olhada. Talvez você possa simplesmente deixar isso para uma escolha pessoal sobre
se
deseja ou não permitir que isso conte
efetivamente. Oh, meu sapo morreu. Triste. Oh, parece que sim, Rod Froggy Aqui vamos nós. Parece que se meteu em um pequeno inseto ao
pular em um lugar estranho Lá vamos nós. E agora meu
pequeno Fracki está E isso nos coloca em 5:50, então o próximo salto nos
colocará em 600 Então aí está. Depende de você se você
quer fazer 40 ou 50 aqui, o que basicamente se resume a se
você quer ou não contar isso como principal ou contar
esses dez como principal. E eu só lembro que provavelmente
deveríamos colocar cinco sapos lá para
realmente testar isso Então, eu poderia seguir em
frente e seguir em frente. Aqui está o vídeo desta parte,
só para que possamos inserir cinco. Eu estou bem. Eu já passei por isso. Eu fiz minha volta várias vezes com
cinco sapos e continuei, obtivemos 4.800 pontos Incrível. Parece estar
funcionando perfeitamente bem. Um sistema de pontuação funciona. Temos nossos mais 40 ou mais 50, dependendo de
como você configurou o seu se
você vai ou não contar
a etapa extra como parte de seus 50 ou se você
deseja fazer um adicional
de 50. Temos nossos dez
pontos por etapa aqui e temos nossos mais 1.000 toda vez que obtemos
cinco sapos múltiplos Toda vez que resgatamos
cinco desses gases de sapo. Tudo bem Então, configuramos
nossa pontuação. E acho que, a seguir, podemos dar uma olhada em como exibir isso
e começar a nosso heads-up display ou
Hud ou Gooey
38. Pontuação HUD de jogos: Tudo bem. Vamos começar a criar o jogo Hud for our Well, game Hoje, vamos
seguir em frente e colocar a pontuação aqui na nossa tela. E para isso, fui ao MNTD e adicionei uma camada
de Canvas Se eu pudesse entrar
aqui, a camada Canvas é o que estamos
procurando, não o Canvas grow. E a camada Canvas
basicamente
será tudo o que está
no topo do nosso jogo, não importa onde
esteja em nossa cena. Então, como você
imagina, é onde vão todos os seus elementos
quentes. Então, se você estiver jogando
como Dark Souls, é
aqui que seus quatro quadrantes
estão no canto inferior esquerdo,
por exemplo, se você estiver
jogando Sky Rim, seus três pontos de vida, resistência e Wallaby
matabar na parte inferior, e assim por E para nós, basta
fazer a partitura aqui, na minha camada Canvas, que eu renomeei para Gooey Significa interface gráfica
do usuário. Fui em frente e
adicionei dois rótulos, dois rótulos apenas normais aqui. E eu o chamei de rótulo de pontuação, que contém apenas a
palavra pontuação, e texto de pontuação, que tem
apenas cinco zeros Agora, os textos de
ambos eram grandes demais
para este projeto. Então, em ambos, fui até o inspetor até o tamanho do Monte
dos Filmes,
e minha partitura está no tamanho dez, e a etiqueta da partitura
está Agora, você pode notar
que eu tenho uma barra
preta extra na parte inferior. Entrei nas configurações do projeto
e na janela de exibição. Fui em frente e atualizei a altura da minha
janela de visualização 240-256. Aí está. Você
pode ver isso lá. Então eu adicionei mais 16 pixels, para que eu pudesse adicionar
o preto na parte inferior, porque é
aí que nossa barra de saúde vai
acabar ou nossa barra de vidas. No próximo vídeo. Tudo bem. Então, uma vez que temos nossos dois rótulos aqui em nossa camada
Canvas para a partitura, e você não consegue descobrir onde
alterar o texto para
isso, basta selecionar seu rótulo e entrar no
inspetor na parte superior Você verá a seção
lá para ver o texto. Basta digitar a pontuação
de um e colocar cinco zeros. Para o outro. Isso nos dará uma boa ideia da quantidade de espaço que
precisaremos. Tudo bem, agora
para fazer isso funcionar, tudo o que precisamos fazer
é adicionar uma linha ao nosso script global aqui. E fora do nosso
eu e do nosso quarteirão. Portanto, fora de ambos, independentemente da
quantidade de pontos que adicionamos, precisamos obter nosso rótulo de texto de
pontuação e configurar o texto para
realmente exibir nossa escola. Então, como estamos
vindo do nosso script global, se eu prosseguir e executar isso por um momento e
depois pausar,
mudar para remoto, mudar para remoto, você pode ver que o Global está aqui Ele não tem
acesso a nada. Então, temos que realmente
subir na árvore uma vez para criar raízes e depois descer até
nosso número dois D e depois
descer até nosso Dewey E então, a partir daí,
podemos pegar nosso texto de pontuação. Então, como temos que
subir e depois descer, podemos seguir em
frente e usar get node. E lembre-se de que isso usa
uma string como argumento. E, como você pode ver, poderíamos
simplesmente escrever o caminho inteiro, ShrootGlobal, slash root,
slash node two Mas mesmo assim, como subimos
apenas um nível, ainda
é mais rápido se
fizermos dois pontos apenas para subir um, e depois descermos ao nosso
nó dois D. E, a partir daí, acessamos nosso GY A partir daí, obtemos
nosso texto de pontuação. E se você está se perguntando, estamos apenas seguindo
essa linha branca para baixo. Então, do nosso global aqui, onde estamos escrevendo esse código, temos nossos dois pontos, que são o mesmo que
escrever, get parent, então subimos um até a raiz E então somos apenas
tapinhas seguindo cada
parada,
como esta linha branca Vemos essa linha branca
descendo e depois entrando, apontando para não duas D. Isso é
o que escrevemos lá. Em seguida, seguimos a
linha novamente, paramos e apontamos para o GY. Escrevemos isso para a próxima parada, depois descemos
e finalmente apontamos para o nosso texto quadrado
e terminamos aí. Então, sempre que tiver dúvidas, clique no
Node
que você está procurando e siga a linha branca para seu caminho. Tudo bem. Então, neste texto de pontuação, à direita, nesse objeto do tipo rótulo ,
acessaremos
a propriedade de texto dele e deixe-me tirar o
jogo da tela. Eu apenas olhei e
vi que estava coberto. Novamente, usamos dois pontos, mesmo que get parent,
que nos leva
até o nó raiz,
e simplesmente seguimos essa linha
branca que desce,
aponta para e simplesmente seguimos essa linha
branca que desce, o nó dois
D, desce, aponta Guy, depois desce
e aponta para o texto quadrado, e estamos apenas seguindo esse
caminho aqui até o E nós queremos a propriedade
de texto dela, e
vamos definir isso. Vamos
ajustá-lo à nossa pontuação. No entanto, se fizermos isso, todos esses zeros
desaparecerão E, como você vê, não podemos realmente fazer muito com a pontuação
nesse aspecto. Então, o que vamos fazer é transformá-la em uma string com STR
e, em seguida, dois parênteses, e podemos escrever nossa
partitura E essa pontuação
agora será tratada como uma string
em vez de um número inteiro Então, agora podemos fazer ponto, adicionar e
preencher com zeros E passamos o número cinco, teremos cinco dígitos, como vemos aqui, um,
dois, três, quatro, cinco Então, vamos
ter esses 50 slots. E nossa pontuação
vai mudar, mas mesmo
que diga apenas dez, ainda
teremos
todos
esses cinco slots disponíveis para nós. Então, visualmente,
ficará exatamente como seria em um fliperama e em um sistema de pontuação
típico Então, se
continuarmos jogando isso agora, podemos ver nossa pontuação
lá no topo. E se dermos uma volta, veremos nossa pontuação
aumentando como deveria. Há muitos carros lá em cima. Ooh. Lá vamos nós. Vamos acompanhar isso por muito tempo. Aqui vamos nós. Vamos pegar
alguns pontos. Monte no tronco, monte nas
tartarugas, monte no tronco. E podemos montar nas tartarugas, montar no tronco e
pular para casa livres Mas tudo bem, então nosso sistema de pontuação parece
estar funcionando perfeitamente bem. Está sendo exibido com precisão. É fantástico. Tudo bem. Então, a última coisa devemos fazer neste momento é, neste vídeo, nada,
mas no próximo vídeo, vamos seguir em
frente e configurar nossas vidas de forma que, quando
morrermos, perderemos uma vida, e isso será
refletido visualmente na tela, mostrando quantas
vidas realmente nos restam.
39. Vidas com HUD em jogos: Tudo bem, vamos continuar
e acrescentar nossas vidas. Agora, nossas vidas
terão no máximo seis vidas aqui. E vamos entrar em
nossa camada de tela Goey. Vamos adicionar um novo nó. E eu sei que isso não é visível, apenas 2 segundos aí está. E vamos
pesquisar a palavra textura. Estamos procurando a barra de progresso da
textura. Tudo bem, vou renomear o
meu para o bar Lives. Vou passar para a seção
de texturas
no inspetor E para o progresso, vou mover
o Healthbr dot PNG para esse slot Defina o valor máximo, novamente, no inspetor para seis Vou definir meu valor
atual para seis, e agora você deve vê-los. Vou pegar essa
pequena alça laranja
e puxá-la para cima para que ela ocupe
apenas o espaço que precisamos, e vou
trazê-la direto para o fundo, para aquele espaço preto
vazio. Yo. E essas vão
funcionar como nossas vidas. Então, você verá que, à medida que
ajustamos os valores de 6 a 5, divididos uniformemente, para que possamos determinar facilmente
quantas vidas ainda temos O seis, é
claro, será nosso padrão, e
precisaremos ajustá-lo
toda vez que realmente morrermos Então, no meu mundo global, novamente, talvez um nome de gerente de jogo
fizesse mais sentido, mas, por enquanto,
vamos sair com isso. Vamos para o
Livest, por padrão, seis. Vou criar
outra função, atualizar o Lives à toa. E vamos
seguir o caminho do Sad. Só que em vez de um Scortex, obteremos a barra do Live e
acessaremos a propriedade value aqui que
podemos ver no inspetor E vamos dizer que mais é
igual a quantidade. Um valor será um
parâmetro que passaremos, que
será um fim, certo? Então, quando perdemos uma
vida, vamos adicionar menos um a ela, que fará com que ela
caia para cinco. E também nos dá a
capacidade de adicionar vidas no futuro simplesmente
colocando uma vida positiva
para ganhar uma vida. Mas também atualizando isso, na verdade também temos que
atualizar nossas vidas, a mesma coisa mais
igual E agora podemos ir até nosso jogador. Podemos procurar nossa
morte. Aí está. Sobre a morte. Também precisamos
acessar nosso script global, atualizar Lives e passar
um negativo, e isso deve bastar. Coisa muito simples e pequena de se fazer. E agora, quando morremos na tela, devemos perder uma vida, e devemos ver nossa guerra de
vida lá embaixo, cair para cinco. E eu preciso puxar
isso para cima porque vocês não conseguem ver o
fundo lá embaixo. Aí está. E vamos ver se
caímos para cinco. Lá vamos nós. Nós respingamos. Eu corri para a traseira daquele carro. Além disso, eu estava
vendo e você só ganha pontos quando
avança em Frogger, e perdemos vidas quando
entramos na água também Assim, podemos prosseguir e atualizar
isso, se você desejar. Se você quiser que seja um
pouco mais preciso. Só vamos atualizar a
pontuação quando pressionarmos para cima. Abaixo, para a esquerda e para a direita,
não nos darão nenhum pino. A única pressão para frente, o
que faz
sentido,
porque muitos pontos que
você pode ganhar rapidamente. Dom, d d, d m. Onde estão
meus registros? Onde eles estão? Aí estão eles. Indo. Agora, nós os
montamos com as tartarugas Doi, doomy, doom. Salte sobre a tartaruga. Eu
ia pegar o tronco, mas senti que
ia perdê-lo, então fiquei, pulei
no tronco aqui. Então não pule sobre
essas tartarugas e chegaremos em casa
livres neste tronco Nós somos bons. Vá bem. Incrível. Lá vamos nós. E,
novamente, podemos perder calor vivo. Legal. Portanto, nosso sistema ao vivo funciona. Ele é atualizado visualmente na tela e temos a capacidade de adicionar algo em nossas vidas no futuro. Tudo bem Então, acho que
isso bastará para esta seção, a menos que você queira adicionar ao
vivo quando começarmos a estudar. Você quer fazer
isso? Tudo bem Então, se você quiser
ganhar vidas extras ao atingir uma determinada quantidade de pontos, aqui está o que vamos fazer. Vamos criar uma
variável chamada multiplicador. E dentro da nossa pontuação de atualização, vamos realizar
um novo I check aqui. Então, vamos dizer que eu pontuo dividido pela pontuação dividido por, podemos dizer 10.000, você quer? Vezes que nosso multiplicador é
maior ou igual a um. Então é aqui que
vamos adicionar algo às nossas vidas. Então, precisaríamos viver vidas. E normalmente
diríamos que mais é igual a um, mas como
queremos tocar em seis, o que realmente vamos
fazer é dizer vidas iguais e vamos usar uma
função chamada Agora, o grampo permite que você
tenha três argumentos aqui. O primeiro argumento é
o que você acrescentaria. Então, em vez de mais igual a um, nosso primeiro argumento aqui
será E então, o próximo argumento
, será o mínimo e o máximo que esse valor pode ser. Então, o mínimo,
pode ser zero, então nossas vidas nunca
ficarão abaixo de zero aqui. E o número máximo
que podemos ter é seis, então nunca será um número
maior do que seis. E é assim que a fixação funciona. Aqui podemos chamar Update
Lives com um, certo? Então, teremos um mais
um para adicionar a isso. Hum, você sabe o que? Na verdade, podemos simplesmente mover nossa pinça
até aqui dentro de
nossas vidas de atualização e
substituir uma por uma quantidade E então provavelmente podemos
escapar sem ter
nada lá dentro, sem instalá-lo lá, mas
apenas prendê-lo lá embaixo Então, atualize vidas uma. E então vamos
querer aumentar nosso multiplicador, mais igual E a razão pela qual queremos fazer isso é porque, se não o
fizermos, ganharemos constantemente uma vida, porque nossa pontuação sempre será divisível. Uma vez que ganharmos uma vida, toda vez que nos mudarmos,
continuaremos ganhando Então, queremos mudar isso para se obtivermos uma vida a
cada 10.000 pontos, obteremos
10.000 10.000 vezes uma ainda
será 10.000. E na próxima vez, serão 10.000 vezes dois. Então, precisaremos de 20.000 pontos
para ter uma nova vida, e então serão
30.000, 40, etc Então, se fôssemos correr
isso agora com apenas isso, podemos ver se entramos, perdemos uma vida, talvez
até perdemos duas. E agora só temos
que subir passar por todo esse tráfego. Vá, vá
até este tronco. Então podemos montar nas tartarugas, tronco de
tartaruga, novamente,
transferir para Espere que esse registro chegue
até aqui, e então, se nossa pontuação
fosse alta o suficiente, deveríamos obter 10.000, W eu não a alterei. Agora,
eu pensei sobre isso? Então, isso é um pouco
decepcionante. Mas podemos verificar isso
rapidamente apenas indo
ao nosso espaço eólico e diremos: Ei,
ganhamos 20.000 Agora, se fôssemos verificar
se ganhamos pontos cada 10.000, esses 20 não
deveriam fazer nada. Eu deveria nos dar a
única vida. O que é bom? Porque você nunca deveria
ter como 20.001 de qualquer maneira. O máximo que você deve obter de
uma vez será 10.000. O que você vê à medida que avançamos? Bum,
bum. Estamos quase lá. Devemos ver nossas vidas
na base aumentarem mais uma. E lá vamos nós. Então, nossas
vidas aumentaram. Tudo bem, então nossas vidas agora
estão funcionando. Então, vou
prosseguir e redefinir isso para 40 pontos. E queremos ter
certeza de que podemos acabar com o jogo. Mas
acho que isso acontecerá em nosso sistema global
, Update Lives. E vamos
seguir em frente e ver, isso nos
permitirá ter menos um, uma chance? Não, não será. Isso é perfeito. Não precisamos nos
preocupar com isso. E podemos dizer que eu vivo
menos do que realmente, não
precisaríamos. Já
estamos configurando isso aqui. Então, verificamos com antecedência. Então dizemos que I lives
é menor que zero, na verdade já sou zero. Digamos que não temos mais
vidas e depois morremos. Estamos ultrapassando outro
negativo. Estamos dizendo que se nossas
vidas já são zero, então teremos, digamos, jogo, mas vamos apenas recarregar
a cena em um jogo totalmente novo Se nossas vidas
ainda não são zero, então vamos
vir até aqui e vamos
subtrair nossa vida E para isso, usamos apenas Get
three reload current scene, e isso será o mesmo que se tivéssemos acabado de começar
a cena assim Então, se escrevermos em Nossas vidas não
estão sendo reiniciadas. Provavelmente porque eles
não são reinicializados no Global. Vamos descobrir. Vamos
entrar em nossa preparação e dar uma
olhada em como depuramos isso, vou dizer imprimir Vidas. E
veremos se isso é reiniciado. Estamos sendo esmagados. Na verdade, nunca estamos
nos preparando de volta. Ele se
reinicializa constantemente, certo? Então, em vez de estar pronto, vamos imprimi-lo aqui. Tente descobrir por que
terminamos constantemente? A. Ele reinicia depois de duas.
Como vamos 6-0 Tudo bem. Não sei por que, mas a pinça parece ser
o que estava causando a quebra, o
que é interessante
porque
não há nenhuma razão real para que
eu pudesse dizer que ela deveria ter
saltado de seis vidas para se decompor para Mas tudo bem.
Acabei de mudar volta para Lives plus
equals amount. E agora, se rodarmos o jogo, veja se podemos enfrentar ou voltar a perder
vidas, uma de cada vez. E quando descemos,
reduzimos para três
vidas, duas, uma. Opa, O. Vamos lá.
E na água. Bem, estamos sem vida. Então, na próxima vez
que formos atingidos , o jogo terminará e nosso jogo será reiniciado. E aqui vamos nós. Recebemos uma reinicialização do nosso jogo,
encontramos rapidamente e podemos voltar a
perder vidas novamente. Mas aí está.
Nós temos essa reinicialização. Agora perdemos vidas e
exibimos na tela forma adequada quando nossas
vidas estão muito baixas Reiniciamos completamente o
jogo e começamos de novo, além de ganharmos vidas toda
vez que recebemos 10.000 moedas
40. Cronômetro e bônus: Tudo bem, vamos ligar
nosso cronômetro agora. Então, em nossa interface gráfica, acabei de adicionar outro
rótulo aqui embaixo com a palavra hora com um tamanho de
fonte de substituição definido como 12 Em seguida, tenho uma barra de produtos de textura, assim como fizemos
com nossas vidas aqui Eu mudei o modo de filme da direita para a esquerda em vez
da esquerda para a direita. Também vou
renomeá-la aqui para barra de cronômetro. Meu valor máximo é 30, meu valor atual é 30. Todo
o resto permanece o mesmo. Apliquei nove
remendos para
poder esticar essa barra
para ter a forma e o comprimento que eu quiser. Estou apenas usando o cronômetro PNG de
pontos que tenho aqui. Eu apenas o
arrasto como barra de progresso ou
textura de progresso. E aí está. Eu
apenas estico e coloco lá embaixo para
algo que pareça bom. Eu também tenho um cronômetro que
adicionei aqui com um script no meu Guy e o sinal de tempo limite
aqui conectado a ele Então é isso que estamos
vendo aqui. E o que precisamos
fazer toda vez que esse cronômetro expirar por padrão, o cronômetro está configurado para 1
segundo, o que é bom É isso que queremos. O que queremos fazer
se quisermos obter nossa barra de cronômetro e precisarmos
subtrair uma do valor Então, podemos ir em frente e pegá-lo com nosso
cifrão aqui. Você entendeu? Como isso
vem de Mark Bouie, valor menos é igual a um E agora, se
fôssemos dar uma olhada e executar isso, agora
veríamos
nosso cronômetro
passando , o que é lindo Isso é exatamente o que queremos. E agora temos que verificar. Precisamos verificar se nosso
cronômetro, o valor da barra do cronômetro, atingiu zero
e, em caso afirmativo, infelizmente, nosso pequeno sapo tem que morrer. É assim que acontece
quando nosso cronômetro acaba. Então, vamos pegar
nosso pequeno sapo get node. E lembre-se, estamos
no nosso ie aqui, então teremos
que subir um para o número dois D e
depois voltar para baixo. Então, coloque uma camada de ponto
e barra, e vamos ativar
nossa função de morte Opa, e isso deve ser dois iguais porque
é uma comparação Sim. Então, se fôssemos executá-lo agora, quando nosso cronômetro acabar, nosso sapinho
simplesmente espirra
e perdemos uma vida em e perdemos uma vida Sabe, espere um minuto
para o cronômetro funcionar. Agora, tendo esse tempo,
você está aqui em 30 segundos. Vejo que minhas plataformas
superiores precisam ser um pouco mais rápidas ou, pelo menos,
um pouco menores de atraso. Mas acho que a velocidade pode ser a melhor opção em vez de alterar o atraso.
Mas lá vamos nós. Meu sapinho morreu e continua morrendo.
Isso não é ótimo. Precisamos realmente
redefinir isso agora. Então, quando chegar a zero
e nosso sapo morrer, vamos reiniciar nossa barra de cronômetro Então, vamos pegar a
barra do cronômetro e definir seu valor volta para 30 para que possamos preencher uma
nova barra Agora, esse não é o único
momento em que ele precisa ser reiniciado. Ele também precisa ser reiniciado quando
atingirmos a meta. Então, vamos pegar o node,
subir um, pegar nosso Guy,
pegar nossa barra de cronômetro e definir o valor de volta
para 30.
Tudo bem. Agora, antes de testar isso, vou entrar na minha plataforma aqui e vou
mudar isso para 32 e
dobrar essa velocidade. E isso significa que eu tenho que ir
até o meu player e ajustar isso. Bem, lá em cima. É quando estamos
aqui, 32. Vá. Então, agora eles devem pelo
menos se mover mais rápido, e espero que eu possa continuar sem
errar Ok, aí estão as tartarugas.
Precisamos de alguns registros. Obrigada. Registro. Não
sei se vou fazer. Eu não vou sobreviver. Vou perder meu sapo. Adeus sapo. Eu mal conhecia você. Vejo que isso vai ser
um pouco difícil. Oh, nosso tempo recomeça ou não quando respingamos? Isso não acontece. Então, precisamos definir isso também. Então, no nosso player? Onde
é que morremos? Aí está nossa morte, e nós reaparecemos. Sim. OK. E, sim, vamos nos
aprofundar aqui. Então, novamente, vamos subir e depois
voltar
para a voltar barra do cronômetro e definir
o valor de volta para 30 Dessa forma, quando
morremos, isso se reinicia. E acho que vou alterar
ou reduzir o respawn, o valor do patrocinador,
a chave inglesa da
plataforma e
removerei o sinal de mais seis, para
ver como fica agora, já que temos OK. Está tudo bem. Talvez possamos
realmente fazer isso agora. Lá vamos nós. Nós reiniciamos
nosso cronômetro e, quando morremos, nossos
cronômetros também são reiniciados Fantástico. E eu posso ver que ainda preciso de um pouco
de impulso, meu mínimo. Então, vou fazer 3 segundos só porque vi uma grande sobreposição quando
passei por lá Mas vimos que o cronômetro está
funcionando perfeitamente bem agora. Eu sei que sim, ou pelo menos você
deveria receber um bônus no que diz respeito
aos pontos , com base em quanto tempo
resta para marcar. Então, vamos seguir em frente
e implementar isso. Além disso, eu só tenho que
me reativar com o que é
o multiplicador Eu sei que é algo vezes a quantidade de tempo que resta. Então me dê 1 segundo
lá. Tudo bem. É dez vezes o tempo
restante que resta. Então, vamos ver. Quando chegarmos ao nosso espaço eólico antes de
reiniciarmos , precisamos
atualizar a pontuação aqui novamente porque vamos adicionar 40, mas também vamos
adicionar o que sobrar aqui. Nós vamos dizer,
na verdade, você sabe o que? Vamos colocar isso em sua
própria variável aqui. Chamamos isso de bônus, não de bônus de dez, em bônus.
Claro que é um int. Quero configurá-lo para esse valor
vezes dez antes de reiniciarmos. Agora, em nossa segunda pontuação de
atualização aqui, cumprimos a pena. Tudo bem. Então, agora devemos
ter nosso bônus de tempo lá. Então, quanto mais rápido
chegarmos lá, maior
será
o bônus que receberemos até máximo mais 300 pontos Hipoteticamente, quero dizer,
você não vai chegar
lá aos 300 ou 30 segundos
restantes porque começa aos Oh, talvez eu nem
chegue lá. Talvez eu esteja perto. Ah, entendi. Mas você pode ver que eu tenho
190 pontos nessa. Tudo bem. Então, vamos lá. Temos o cronômetro lá, bem
como as mortes quando
o cronômetro acaba e o bônus de pontuação quando ainda
temos o cronômetro restante,
e chegamos ao fim Tudo bem, então é isso. Acho que pode
ser isso ou Frogger. Acho que não estou
esquecendo nada aqui. E se esse é o
fim de Frogger, parabéns. Você
chegou até o fim. Isso é incrível. Espero que
vocês tenham aprendido muito. Analisamos muitas coisas
ao longo deste projeto. Variáveis, os globais, trabalhando com muitos scripts diferentes Mas recriamos completamente esse jogo antigo dos anos 80 E o que é ótimo
nesses jogos antigos eles têm um conceito bastante
simples. Mas, especialmente se você é
novato em programação, há muito que você pode
aprender com esses jogos. Tudo bem. Cuide-se. Tenha
um bom dia, e
nos vemos na próxima semana. Em que
estamos entrando? É a quarta semana agora? Oh, cara,
a quarta semana vai ser divertida. Temos muitas
coisas sobre as quais conversar.
41. Áudio do Frogger: Tudo bem, vamos
continuar e adicionar o áudio para nós Então, isso vai contar
nossos saltos quando nos movemos, a música de fundo
e os sons da morte em arco Tudo bem. Então, para nossa música de fundo, podemos simplesmente entrar em
nossa cena principal aqui, selecionar nosso nó raiz, que é o número dois D. Vá em frente e aperte o
sinal positivo ou adicione um novo nó. E o que vamos
adicionar é esse reprodutor
de tela de áudio aqui. E então vamos
entrar na nossa pasta de sons, pegar a música.p3 e arrastá-la para
lá Certifique-se de ativar a Reprodução Automática. Dessa forma, não precisamos desperdiçar um script e
escrever qualquer código para jogar. E ele
começará sozinho. Agora, aviso, isso pode estar
um pouco alto ao iniciar. Portanto, se você quiser ajustar o áudio apenas para a música aqui, altere o volume DB aqui. Quanto mais baixo você colocar,
mais silencioso será. Zero é o padrão
para todos eles. No entanto, se você
quiser diminuir a música de todo o áudio de uma vez,
clique na pequena guia de áudio na parte inferior, e aqui está todo o
seu barramento de áudio. Agora temos o mestre aqui, que se você alterou
as configurações de áudio e os jogos antes, percebe que tem
o controle deslizante principal Isso é o que está
aqui, e podemos mudar o volume disso para
o que quisermos. Se você quiser adicionar
um barramento de áudio diferente, para poder personalizar seus efeitos sonoros
da música separadamente, basta clicar no barramento de adição aqui e
renomear isso para música E agora, com nosso reprodutor de
streaming de áudio selecionado, você notará na
seção de ônibus aqui em seu inspetor que agora
temos uma peça musical
aqui no menu suspenso, e agora essa música virá primeiro
por essa peça
de áudio e depois será enviada para o master, como seria de esperar Tudo bem, então depende de
você o que você quer fazer. Vou seguir em frente e
baixar minha música para talvez 0,6. Não tenho certeza. Vou me
certificar de que vocês sejam realmente capazes de ouvir isso. Espero que isso não
machuque os ouvidos de ninguém. Vou clicar em
play e descobrir. Tudo bem, então parece que
é mais silencioso do que eu. Então, vou assumir
que está tudo bem. Mas se você quiser, você
sempre pode baixá-lo um pouco mais. Acho que vou
escolher menos dez aqui. E agora o resto do nosso som
realmente estará no nosso player, nosso player
morrerá. Nosso jogador tem a chance de pular. Nosso jogador tem outro
efeito sonoro que é a morte, certo? O molho, o
mole e o calor. Então, vamos passar
para nossa cena de jogadores. adicionaremos um
reprodutor de streaming de áudio para eles. E não vamos
tocar
em mais nada no inspetor, a
menos que você queira adicionar um barramento de áudio para efeitos
sonoros e depois alterar o barramento
especificamente Isso depende de você. E, novamente,
uma preferência pessoal. Mas depois de adicionar
um
reprodutor de streaming de áudio à cena do player, podemos acessar o script do
player. E o que precisaremos
fazer é definir o fluxo de áudio
carregando o arquivo de áudio
e, em seguida, reproduzi-lo. Então, o que eu vou
fazer é
acessar nossa função Deth primeiro, e ela vai ter
um ID passado para ela Obviamente,
o ID será um número inteiro porque
obteremos dois ou três Então, vou chamar um departamento de TI
e, por padrão,
defini-lo como igual a dois. E a razão pela qual estou
usando dois é que, se
voltarmos ao nosso mapa de blocos
e dermos uma olhada nele, nosso caminho é ID dois. Então, por padrão, deve ser nossa estrada, então
deve ser um pouco confuso. Então, o que vou
fazer aqui é se
vamos comprar nosso reprodutor
de streaming de áudio. Portanto,
queremos essa propriedade de fluxo de pontos do player AudioStream queremos essa propriedade de fluxo de pontos do player AudioStream Você está no nosso player,
certo? Aquele stream aqui. E vamos
defini-lo igual a, e vamos chamar load, parênteses
abertos e fechados e dentro daqui estará
o caminho para o Então, dois
será nosso padrão, então esse será nosso squish, então eu vou pegar
squash dot Wav,
squash dot wave
da nossa pasta de sons
e arrastá-la para lá da nossa pasta de sons
e Dessa forma, eu não
preciso escrevê-lo. E agora o que faremos
é, na próxima linha, dizer que I ID é
igual a três. Então, três, lembre-se de
ser nossa água. Então, se estivermos morrendo e
estiver na água, faremos
a mesma coisa que fizemos
na linha anterior e configuraremos nosso stream e carregaremos
em um novo arquivo. Desta vez, configuramos o squash, vamos carregar em plunk e, fora
dessa instrução if,
tudo o que vamos fazer
é reproduzir nossa transmissão Então, vamos dizer reprodutor de
stream de áudio dot play. Exatamente desse jeito. Agora, se seguirmos em frente e nos colocarmos na estrada, devemos ter um efeito sonoro, e se formos pular na
água, devemos ter Ok. Por enquanto, vou
continuar e desligar
a reprodução automática da
música para que possamos ouvir Está bem? Se pularmos na água. Ok. E se formos atropelados por um carro? Ok, temos o mesmo áudio
tocando em ambos. Bem, isso é um pouco
interessante. Por que isso? Bem, aparentemente, não
estamos passando nenhuma identificação para três, então
nunca serão três. E a razão para
isso, lembre-se, temos que descer
e verificar a identificação do celular, na verdade
estamos verificando
se nosso sapo está se afogando Então é isso que temos que
passar três para a nossa morte. Agora, não
saiu do ar
porque dissemos que, se não
passarmos nada para dentro, usamos dois por padrão, mas como queremos
especificamente um ID de três sempre que
estivermos na água, precisamos nos
certificar de passá-lo
aqui em nossa função de verificação de ID da
célula. Então, agora, se fôssemos
fazer isso,
deveríamos mergulhar na água,
certo, certo E esmagado na estrada. Aqui vamos nós. Então, sabemos que está
funcionando perfeitamente bem. E a única coisa que
nos resta é fazer nossas compras. E, para isso,
isso estará em nosso movimento, onde podemos verificar nosso
fluxo de áudio e configurá-lo. Então, o fluxo de
pontos do player de streaming de áudio é igual a carga, e vamos
pegar nosso efeito de
som pop e arrastá-lo Vá. E na próxima linha, podemos simplesmente reproduzir nosso áudio. É um reprodutor de streaming de áudio. Vá jogar. E podemos copiar isso em
cada botão pressionado aqui. Então, se estiver inativo, podemos fazer isso. Boom, é para a esquerda
e se for para a direita. Agora, se
jogarmos, devemos ser
capazes de pular. Opa Vamos entrar em nossa cena principal. E tente isso. Para
baixo. Nós podemos pular para baixo. Então seja esmagado. Para baixo. Bem como
no chão na água. Para baixo, para baixo, para baixo, para
baixo, para baixo, para baixo,
para baixo, para baixo, para baixo. Para baixo, incrível. Agora, tudo o que precisamos fazer é
ligar a música novamente. Então, em nossa cena principal, reprodutor
de streaming de áudio, reprodução automática, ligue novamente E assim, temos
o jogo Frogger completo com nosso áudio e Obrigado Obrigado, fui atropelado pela traseira do
carro, mas aí está. Adicionamos som a ele e agora nosso jogo parece
muito mais completo. R, não há mais nada
que possamos realmente fazer aqui. Você pode se sentir à vontade para
adicionar mais informações. Você pode tentar adicionar captadores. Você pode encontrar novos sons
e substituí-los. Talvez, se você quiser criar seus próprios sprites e
usá-los para alterá-los um pouco,
torne-os um pouco
mais personalizados para você Ou se você quiser mantê-lo
como seu próprio pequeno
remake de arcade, isso também é incrível Mas isso bastará para este. Então,
cuide-se e tenha uma boa noite, tapinhas nas costas com um sapo completo e, na próxima semana, acho que começaremos a falar
sobre algumas das diferenças e semelhanças
entre dois D e
três D e três D e
42. Transição do trabalho em 2D para 3D: Tudo bem. Sejam bem-vindos a todos nesta semana, onde
falaremos sobre nossa transição de
dois D para três D. Portanto, como desenvolvedores de jogos, é importante entender
os desafios e
oportunidades únicos que surgem quando trabalha em um espaço
tridimensional, vez de em duas dimensões. Para ilustrar isso, desculpe,
vamos voltar em um momento. Ao fazer a transição do desenvolvimento de dois
D para três D, há vários
aspectos importantes a Vamos falar sobre a diferença
fundamental
de perspectiva. Em dois D, trabalhamos com objetos e camadas
planas. Como você pode ver no nosso exemplo, no lado esquerdo aqui, tudo é realmente plano. É só uma questão do
que está na frente
ou do que é renderizado na
frente do quê, certo? Assim, podemos obter camadas diferentes, como quando você está trabalhando em algo
como o Photoshop, algum tipo de
manipulador de imagens ou editor de imagens I Bem, em três D, os da direita,
introduzimos profundidade e relações
espaciais
entre objetos. Então você pode ver completamente que
temos essa terceira dimensão
nos dois lados D. Não podemos ver o chão aqui. Só temos a lateral
dessa barragem ou ponte
ou o que quer que seja em que
ele esteja. Bem, em três D, podemos ver essa profundidade
atravessando o topo. Vemos a profundidade desse braço vindo direto
em nossa direção com
aquela extremidade pontiaguda versus nos aquela extremidade pontiaguda versus nos dois D, onde ele está claramente
se movendo para baixo na tela E, novamente, com
profundidade, você pode ver
na parte superior onde você pode tentar simular esse tipo de sensação
com duas dimensões No entanto, em três D, você pode obviamente dizer que
simplesmente não há comparação. É óbvio qual
deles realmente tem profundidade e qual não quando analisamos
o exemplo principal. Para ilustrar essa
transição, novamente, você pode dar uma
olhada em nossos exemplos aqui, duas capturas de tela, uma
das duas versões D e outra
das três versões D. Nesse caso, estamos
usando Mega Man, que é um jogo de plataforma
lateral. E aqui isso o ajudará a imaginar transformar esse jogo de
dois D em três D. Você pode ver exatamente o tipo
de diferença que isso Só de decidir se
devo usar dois D ou três D, os estilos de arte são
completamente diferentes e se destacam de forma única Agora, com esse ambiente The
D, precisaríamos criar
três modelos D para os personagens, as plataformas e todos os outros
objetos na cena, o que poderia consumir muito mais
tempo do que, é
claro, se optássemos
pela opção de dois D. Com dois D, nós meio que
desenhamos e estamos bem. Nós terminamos. Já em três D, nós meio
que temos que pegar esses modelos, e então temos que
desembrulhar o modelo, e então temos que criar
as texturas para o modelo, e então temos que criar
o material para o Então, temos todas essas etapas
antes mesmo de podermos
colocá-lo no jogo mais cedo para teste ou
implementação, coisas assim. E também temos
que introduzir uma câmera que
normalmente em três D, quando não é apenas
algo estacionário, como o que parece ser
uma luta de chefe na parte inferior, ela tem uma câmera que se
move com o jogador, seja se movendo
em um espaço completo de 360 graus, que poderia acontecer
nessas três versões D. Ou se eles simplesmente permanecerem
mais estacionários
na lateral para nos dar mais
dessa sensação de rolagem lateral, como
estamos vendo claramente aqui Agora, como você pode ver, a transição
de dois D para três D requer uma mudança na forma como
pensamos sobre o desenvolvimento de jogos Precisamos considerar as dimensões
espaciais, percepção de
profundidade, o movimento
das câmeras e a modelagem de objetos. Isso abre um novo mundo de possibilidades para a criação jogos
envolventes e visualmente
impressionantes, embora algumas pessoas prefiram dois D a três D na
maioria das vezes Portanto, lembre-se de que o
tipo de jogo que você está criando pode ser
melhor ou funcionar melhor, seja para a visão
ou mecanicamente,
seja o que for, em dois D do que três D ou pode funcionar melhor em três D do que em dois D. Então, aí está com a transição
de dois D para três D, precisamos entender essas diferenças e desafios surja durante esse processo de
transição e você estará bem preparado para embarcar em
três projetos empolgantes de jogos em 3D Lembre-se de praticar e sempre experimentar várias
técnicas para ajudá-lo a ganhar confiança para trabalhar
nessa nova dimensão
do desenvolvimento de jogos. Tudo bem. A seguir, na
próxima lição, falaremos
e ajudaremos você a entender algumas
das diferenças entre
dois D e três D.
E depois falaremos
sobre as semelhanças entre dois D e três
43. Entendendo as diferenças entre 2D e 3D: Tudo bem. Neste exemplo, hoje temos um Mortal
Combat mostrado aqui, tanto o mitology side
scroller quanto dois D, quase um pseudo três D, bem
como as três
iterações D que vieram depois, ambas com um menu em três D e um modo de armazenamento em três D
que permitia que você corresse e modo de armazenamento em três D
que permitia que você explorasse Agora, no vídeo de
hoje, na lição de hoje, vamos falar sobre algumas das diferenças entre
dois D e três D aqui. E é importante que você entenda essas
diferenças, pois elas podem ser cruciais quando se trata de
criar jogos de forma eficaz para ajudá-lo a utilizar os
pontos fortes de cada dimensão Portanto, a principal diferença
entre o desenvolvimento de jogos em dois D e três
em D está na representação visual. Como você pode ver aqui, a mecânica de
jogo é bastante óbvia. Em dois D, trabalhamos
com duas dimensões, apenas a largura e a altura. Onde os objetos são retratados
em uma superfície plana. Em contraste, três D introduzem a terceira dimensão de profundidade, como podemos ver aqui,
permitindo experiência uma
experiência mais imersiva e
realista Então, vamos examinar algumas diferenças
importantes em dois jogos D em um jogo de dois D. A jogabilidade normalmente
ocorre em um único plano. Enquanto em três D,
os objetos podem se mover em três dimensões para cima, para baixo, para esquerda, para a direita, para frente e para trás. Permitindo interações
e explorações complexas, é por isso
que temos algo
como o modo de conquista no canto superior esquerdo, porque você é
incentivado a sair, não apenas seguir a história, mas a explorar e fazer
algumas coisas secundárias para ajudar ou desvendar alguns segredos,
personagens ocultos e coisas assim,
que você
realmente não conseguiria em um jogo de TD E se você pudesse
incluir isso, não
seria a mesma experiência
geral Além disso, em dois D, detecção de
colisão geralmente
é mais simples, pois envolve principalmente verificar
se dois
objetos estão Em três D, a
detecção de colisões se torna mais complexa, exigindo a
consideração dos limites do objeto
e da superfície E, como você pode
ver, entender as diferenças entre o
desenvolvimento de jogos em dois D e três em D nos
ajudará a fazer escolhas informadas de
design e utilizar
técnicas apropriadas, seja no estilo visual, mecânica de
jogo ou
na experiência do usuário.
Adotar as qualidades
únicas de
cada dimensão aprimora cada qualidade de cada
dimensão, Adotar as qualidades
únicas de aprimora as diferenças entre o
desenvolvimento de jogos em dois D
e três em D nos
ajudará a fazer escolhas informadas de
design
e utilizar
técnicas apropriadas,
seja no estilo visual, na mecânica de
jogo ou
na experiência do usuário.
Adotar as qualidades
únicas de
cada dimensão aprimora cada qualidade de cada
dimensão, aprimora a
experiência geral de
jogo. Portanto, lembre-se de que, se você vai usar dois D ou três D, aproveite os pontos fortes
dessa dimensão Então, aqui estão brevemente as diferenças entre
o desenvolvimento de jogos em dois D e três D. Ao reconhecer
essas diferenças, você estará mais
preparado para criar jogos que aproveitem esses
pontos fortes dessas dimensões E lembre-se, é claro, experimentar
várias técnicas e criativo no design do
seu jogo. Tudo bem. Na próxima lição, falaremos sobre algumas
das semelhanças entre
dois D e três
44. Semelhanças entre 2D e 3D: Tudo bem, vamos falar sobre algumas das semelhanças entre
o desenvolvimento de dois
D e três D. Agora, apesar de suas características
únicas, ambas as dimensões compartilham certos princípios
e técnicas fundamentais. Vamos entrar
e dar uma olhada. Embora o desenvolvimento de jogos em dois
D e três tenham suas
características e pontos fortes distintos, eles também têm
várias semelhanças Em primeiro lugar, é claro,
ambas as dimensões dependem conceitos-chave de programação, como variáveis, funções e lógica. Quer sejam dois D ou três D, esses princípios fundamentais de
programação permanecerão inalterados Então, se você tem, por exemplo, um personagem pega um item Bem, esse personagem,
você vai até
o item e tocará
nele ou interagirá com ele. E a lógica
permanecerá a mesma, porque você a
pegará, fará com que ela desapareça e
, no código, você a adicionará ao inventário
do jogador ou à contagem de itens colecionáveis ou o que quer
que você faça com isso Essa lógica permanece
completamente a mesma, sejam dois D ou três D, só será escrita de forma
um pouco diferente. Em segundo lugar, a importância dos princípios de design de
jogos
vale para ambas as dimensões. Conceitos como
interação do jogador, design de níveis e balanceamento da
mecânica de jogo são elementos
cruciais que impactam a
experiência do jogador, independentemente de serem dois
D ou três D. Então, se você é ruim em
design de jogos em dois D, provavelmente ainda
será ruim em design de
jogos em três D.
Não fará diferença em qual
dimensão você está trabalhando Se você é ruim, você é
ruim e tudo o que você
realmente pode fazer é praticar
suas habilidades, talvez pegue alguns
livros e aprimore sua
habilidade de design de jogos por meio da prática. Além disso, o desenvolvimento de jogos em dois D e três D
envolve o uso de ativos, sejam sprites em dois D ou modelos em três D para dar
vida ao mundo do jogo Seja um modelo
Sprite de dois personagens ou três D, o processo de criação e
integração de ativos
no jogo segue princípios
semelhantes de design e implementação Novamente, observe que eu disse
algo semelhante, não o mesmo. Além disso, a
importância da otimização se
aplicará a dois jogos
D e três D. Independentemente, novamente,
da dimensão,
os desenvolvedores precisam considerar o os desenvolvedores precisam considerar desempenho, o gerenciamento de memória algoritmos
eficientes para garantir jogabilidade
suave e o uso
ideal dos recursos. Por exemplo, mencionei que quando analisamos Boger e corrigimos nosso problema de vazamento de
memória, mencionei o agrupamento de objetos Isso é uma coisa muito importante. Isso pode ajudar no gerenciamento de nossos recursos e no gerenciamento de
memória. E dependendo do jogo
que você está criando, essa pode ser uma
ótima maneira abordar uma situação. Então, como você pode ver,
embora o desenvolvimento de jogos em dois D e três em D
tenham seus aspectos únicos, eles ainda compartilham os
princípios e técnicas fundamentais. E ao entender
essas semelhanças, os desenvolvedores podem aproveitar
seu conhecimento em todas as dimensões e
criar jogos cativantes E o que é ainda mais louco é que você pode misturar
os dois no mesmo jogo Talvez você possa
criar o mesmo jogo duas vezes em certo sentido e dar ao jogador
a capacidade escolher se
quer jogar em dois D ou três D. Isso é algo
que pode ser exclusivo seu jogo, especificamente,
ou ter algum tipo de mecânica em que você
pula entre dois D e três D.
Você pode usar as multidimensões como mecânica
de jogo ou apenas
parte da experiência. E aí está,
as semelhanças entre o desenvolvimento de
dois
jogos D e três D. E ao reconhecer
essas semelhanças, você pode aplicar suas habilidades e conhecimentos em
diferentes dimensões, tornando-o um desenvolvedor de
jogos versátil Lembre-se de
aprender e experimentar continuamente para aprimorar seus recursos de
desenvolvimento de jogos E embora sejam semelhantes, quero observar aqui que, pessoalmente,
prefiro trabalhar em dois D, prefiro trabalhar em dois D, mesmo que
as semelhanças existam, e muita dessa
lógica e tudo ainda seja transferido e funcione Em todas as dimensões
ou dimensionalmente. É uma
maneira meio estranha de expressar isso. Mas, por minha própria
preferência,
achei que gostaria de três D. Mas acontece que, na verdade, gosto de criar
dois D. Então você pode descobrir que acaba depois de
experimentar três D. Você pode descobrir
que também
prefere dois estilos D, ou talvez prefira
três estilos D. Ou trabalhar em três D, vez de criar qualquer coisa em dois D. Portanto, não há problema em
ter essa preferência, mas também é bom
saber que você tem o conhecimento e as capacidades
técnicas para ir entre dois D e
três D a qualquer momento
e reconhecer todas as semelhanças, as habilidades,
a lógica e
tudo
o que é transferido
entre as dimensões Oito. Tudo bem, vamos continuar com
a próxima lição
e ver algumas coisas que são um pouco mais exclusivas do três D que você realmente não
consegue contornar
45. Materiais: Tudo bem, pessoal.
Bem vindo de volta. Hoje, vamos falar sobre algo
que é exclusivo ou, não devo dizer, tecnicamente
exclusivo dos três D, que serão materiais Então, vamos explicar
o que são materiais. Aqui no Goto Inge, os materiais desempenham um papel crucial na definição da aparência visual
de um objeto em seu jogo, e vamos nos aprofundar nos materiais e, pelo menos,
discutir os diferentes tipos de mapas de
textura que estão disponíveis ao criar e aplicar materiais aos objetos Os materiais são usados para
controlar como a luz interage com os objetos e como
eles são renderizados Eles definem propriedades
como cor,
transparência, refletividade e muito mais Um dos principais aspectos dos
materiais é o mapeamento de texturas, que nos permite aplicar
imagens ou padrões a
objetos para dar a eles aparências realistas
ou estilizadas Então, vou
continuar e revelar isso que você herdou Mega Man aqui e que acabei de encontrar online E antes que alguém pergunte, não, não posso compartilhar isso. Mas se você procurar na internet,
provavelmente encontrará. Vou apenas selecionar o
Objeto quatro aqui. E se eu abri-la,
encontrarei essa especificamente
como superfície zero, então ela tem apenas uma superfície. Então, um material.
Se eu abrir isso, um momento, tenho que
torná-lo único, para que eu possa pelo menos
ajustá-lo para mostrar
alguns exemplos e torná-lo único Tudo bem. Tudo bem, então, à medida que
examinamos o mapa de Albedo, que está aqui Também é conhecido como
mapa difuso. Por que existem vários
nomes para a mesma coisa? Não sei, mas existem, então lembre-se disso se alguém
disser albedo e você
receber um mapa difuso Eles são a mesma coisa.
E esse mapa de textura define a
cor base de um objeto. Ele fornece a
aparência visual primária da superfície. E como você pode ver
aqui, é aqui que a textura principal é aplicada. Agora, isso afeta a cor. Então, eu sempre posso
entrar aqui e mudar a cor real que está sendo aplicada
sobre essa textura. Então, se eu quiser, posso vir aqui e ter
um mega homem verde. Talvez eu queira mais de
um mega homem roxo. Ou rosa realmente
não é muito rosa lá. Podemos conseguir
um mega homem vermelho. Você entendeu a ideia
neste momento, certo? Portanto, o albedo é
a textura
e a cor básicas , que podem
ser ajustadas nele Mapas normais. Vamos ver,
onde eles estão aqui? Mapa normal. Aqui estamos. Agora, aqui no Gatto, você precisa realmente
ativá-lo antes de aplicar uma textura E um mapa normal
adiciona a ilusão de detalhes da superfície modificando os cálculos de iluminação ou
cria
a impressão de solavancos, amassados e rugas em
uma superfície lisa sem aumentar Então, é uma espécie de isca a
geometria,
manipulando a luz e
como ela afeta Agora, eu não sei se Mega Man pode não ter muita coisa aqui, mas se continuarmos e
jogarmos com a escala, você pode ver isso aqui acontecendo, especialmente
aqui na parte inferior do corpo. Voltamos à
escala padrão e depois a ajustamos Você pode ver
como isso está realmente afetando a forma como a luz é refletida
no topo aqui O mapa de rugosidade. Agora, você também pode
obter isso na forma de um mapa de suavidade,
e suavidade e
rugosidade Portanto, se você tem um mapa de suavidade e precisa de um mapa de rugosidade, basta
invertê-lo e
tudo ficará bem e vice-versa Agora, neste caso,
esse mega homem, tem uma textura colorida aqui, e está usando especificamente o canal verde para isso, em vez do cinza
padrão, tudo bem. Agora, o mapa de rugosidade,
esse mapa de textura controla a rugosidade ou
suavidade da superfície de um objeto e afeta a forma como a
luz se dispersa e reflete na superfície,
criando variações na criando variações Agora, eu sei que isso vai afetar um pouco o capacete, então eu vou vir
aqui para mostrar isso a vocês Então, se eu fosse reduzir
a rugosidade e suavizá-la, veja Isso é, tipo, super macio, recém-saído da fábrica. Isso é uma beleza ali mesmo. Esse é um
capacete totalmente novo, é o que é. E, como você vê, quando começamos a
voltar à rugosidade,
todas essas luzes meio
que se dissipam quando a atingem, em vez de
refletirem
nela E isso funcionou de mãos dadas
com nosso mapa metálico aqui. Este mapa de textura e, novamente, eles estão usando a mesma
textura para isso, mas estão usando
o canal azul. E o mapa metálico aqui ou as propriedades
não metálicas de um objeto e ele
transforma a luz ou
o nível de refletividade
e brilho Então, se tivéssemos uma superfície
super lisa, como você pode ver, com nosso metal totalmente
levantado, parece uma bela peça de metal
brilhante No entanto, se
começarmos a reduzir esse metal, podemos ver que começamos
a usar outros materiais, talvez como um
plástico brilhante ou brilhante, Até chegarmos a
um ponto em que
não temos metal, o que
não é realista Cada objeto tem pelo menos um
pouco de metal. E meio que especular acontece com
isso. Você pode ver isso lá. Então, especular pode ser
algo que usamos talvez
nos olhos quando queremos ter um pouco mais de
brilho neles, por exemplo Ou se você tiver um objeto molhado, isso também pode ser bom
lá dentro. Então, basta aumentar o
metal novamente
e a rugosidade voltar ao
padrão E oclusão ambiental,
esse modelo tem reclusão ambiental?
Isso não acontece. Portanto, a oclusão do ambiente é como uma textura de sombra que você pode colocar para adicionar
um pouco mais de detalhes, digamos,
ao redor das bordas aqui para
ter a aparência de um capacete colocado no topo
da E funciona
assim por dentro de todos esses pequenos vincos e fendas que seriam um pouco difíceis
de entrar Mas, em geral, é isso
que está fazendo. Basicamente,
simula o efeito de sombreamento causado pela presença de objetos
próximos ou pela oclusão
da iluminação indireta
e, no geral, apenas adiciona pouco de profundidade e realismo Agora, mais um mapa que
eu quero
examinar está localizado aqui, emissão. Agora, no mapa de emissão,
há uma textura aqui, e você pode ver que está
quase completamente vazio, mas há alguns
objetos lá. E o que o mapa de emissão
faz é que o mapa de emissão brilha. Basicamente do seu objeto. Então, se você tivesse, digamos, um personagem com um olho robótico e
quisesse que esse olho brilhasse, especialmente no escuro, aqui
que você faria um mapa
de emissão Agora, você pode não ser
capaz de dizer muito, mas é esse pequeno ponto dentro do canhão e a luz aqui Esses são os dois pontos principais
que vamos observar. E se eu apenas aumentar
esse multiplicador de energia, veja isso, você pode
realmente ver isso agora lá e especialmente
dentro do
canhão Você pode ver esse brilho vermelho
acontecendo quando começamos a nos aproximar de
olhar diretamente, e podemos ver esse ajuste
aqui quando eu o diminuo E, como você pode ver à primeira vista, é assim
que a textura
parece normal. E então, quando você adiciona essa textura de emissão,
tudo se ilumina. Então, se você tem luzes em um objeto ou precisa de um
pouco de brilho ou qualquer coisa, o mapa de emissão é o que você vai
querer usar para isso Agora, temos várias outras pequenas coisas aqui
que podem ser adicionadas
a pequenos detalhes,
como refração
da iluminação,
um pouco de luz de fundo, alguma dispersão no subsolo, que é como se eu não estivesse enganado, luz, a maneira como ela
interage com, tipo, a Temos altura aqui. Se você quisesse mexer
com coisas como essas,
que eu não sei, eu não
mexi com a altura Eu sei que costumávamos
ter um mapa de profundidade. Temos cartazes,
crescemos, transformamos. Temos todas essas coisas
novas aqui que vieram com quatro. E vou mencionar algo
que anda de mãos dadas com o desvanecimento da proximidade aqui Aros. Então, se aumentássemos um pouco,
poderíamos ver tudo isso ,
vemos essas distâncias aqui
e todas as coisas serão afetadas com base na proximidade
de um objeto. Como você pode ver aqui, isso é
algo que
ajudaria desempenho, por exemplo. Dessa forma, quando você pode configurar para que, quando estiver
longe o suficiente, ele simplesmente desapareça completamente Talvez algo assim, zero,
dois, eu não esteja entendendo, mas você entendeu, certo? Então, você pode contornar melhor todo esse tipo de coisa acontecendo, e se você continuar, eles
têm o
segundo passe aqui? lado disso amadurece um
pouco com tudo
aberto aqui E eu não vejo
a segunda passagem, o que é interessante.
Mas aqui vamos nós. Temos sombras que
você pode desativar, independentemente de
receberem sombras ou não Temos UV um e dois, que podem ser usados porque diferentes têm
coisas diferentes aqui. Próximo passe. Assim, você pode adicionar outro material diretamente
sobre este. Por exemplo, essa é
uma maneira de colocar uma linha negra em volta de um personagem para dar uma aparência mais animada Há algumas coisas que
você poderia fazer e colocar o esboço
em uma segunda passagem Aqui vamos nós. A faixa de
visibilidade, isso é mais o que eu estava
vendo, eu acredito. Então, diremos um mínimo de um
e, em seguida, diremos que termina
em dez. Então aí está. Então, à medida que nos aproximamos, o objeto entra
e você sai, e o objeto
não é mais renderizado, ou pelo menos essa parte do objeto não é mais renderizada Portanto, você pode ter isso em mente quando se trata de
alguma otimização, especialmente se você tiver
um objeto que possa estar realmente prejudicando
seu desempenho Essa é a faixa de visibilidade disso. Mas isso deve envolver os materiais e os diferentes
tipos de mapas de textura. Oh, devo mencionar mais
uma coisa dentro
dos materiais aqui é que eles os mudaram. Tudo bem. Então, agora temos todas essas opções extras,
como coloração de vértices, sombreamento, transparência
e todas essas coisas Então, se você quiser ter
transparência em um objeto, digamos que esteja usando uma
imagem PNG para sua textura, então você realmente
terá que
ajustar isso e configurá-lo como, acredito que Alpha, e isso
não funciona com essa textura Mas, em vez de usar desabilitações, você realmente precisa ativar a transparência se quiser
ter partes transparentes de sua textura ou malha, seja o que for Tudo bem, então isso
abrange os materiais aqui. E espero que isso
lhe dê uma melhor compreensão do que são
os materiais e dos principais mapas de textura que você encontrará e que
usará ao criar três jogos D. E lembre-se sempre,
é claro, de experimentar, combinar mapas diferentes
e ver que tipo de efeitos visuais
e visuais
diferentes você pode obter. Talvez você encontre
algo de que
goste e que tenha sido
completamente criado
apenas com brincadeiras Tudo bem, isso serve para esta seção ou pelo
menos para este vídeo, e espero que você aprenda um pouco sobre os materiais e o que eles são
46. ILUMINAÇÃO: Tudo bem. Saudações E hoje, vamos dar uma olhada no mundo, o
mundo da iluminação, e vamos falar sobre
a configuração básica de três pontos que é usada quando
se trata de iluminação. Agora, obviamente, quando
se trata de iluminar uma cena, há muito mais
envolvido. Você tem que dar uma olhada em coisas como a
intensidade da luz para cada coisa individual que vai
emitir luz Quantas luzes você quer incorporar nessa cena? Isso afetará seu
desempenho e assim por diante. Mas, por enquanto, vamos dar uma olhada em como iluminação é um
elemento crítico que pode melhorar
muito
a qualidade visual ou afetar a atmosfera
do seu jogo. Tudo bem, a iluminação I Goto desempenha um papel vital na criação ambientes
realistas e imersivos, o que pode ser dito sobre qualquer
jogo E o importante é que
você pode ter algo com texturas
fotorrealistas e todos os seus
mapas fotorrealistas prontos lá Mas se não puder ser renderizada bem o suficiente ou se sua
iluminação não for boa o suficiente, mesmo sendo
fotorrealista, talvez ainda não pareça
realista Portanto, a iluminação é tão crucial para seus materiais e
sua cena geral quanto, digamos, o sombreamento em um desenho Eu posso transformar completamente
o que você está vendo. iluminação também ajuda a definir
o clima, enfatizar os elementos importantes e
dar vida ao mundo do jogo. Agora, ao trabalhar com iluminação, há vários
aspectos importantes a serem considerados, como as fontes de luz,
as sombras e as propriedades da
luz Uma técnica popular é a configuração de iluminação de
três pontos, que envolve o uso três luzes
colocadas estrategicamente ao redor do objeto para obter uma iluminação equilibrada e visualmente
atraente Agora, aqui nesta cena
que estamos vendo, eu só tenho um mega homem aqui
da seção de materiais. Mais uma vez, acabei de entrar na Internet
e acabei de encontrar esse modelo. Apenas online, ele estava
gratuito para download. E você pode ver,
mesmo que ele não esteja aceso, temos as partes vermelhas acesas. Temos esse bar iluminado e o interior desse pequeno
canhão aqui, todo iluminado E esses são dos
mapas de emissão que são meio que, eu acho que você poderia dizer,
iluminando aquela parte que não tem nada a
ver com nossa iluminação. Tudo isso é textura. Tudo bem, então vamos dividir essas três luzes que você usa em uma configuração de
três pontos A primeira luz será sua luz principal. E enquanto estamos fazendo isso,
vou clicar na minha câmera e clicar neste botão de
perspectiva aqui. Isso me permitirá ver o que
a câmera vê aqui. Portanto, a primeira luz será
a luz principal,
e a luz principal é a fonte de luz
primária e fornece a
iluminação principal sobre o objeto Tudo bem. Ele cria os
destaques e
sombras primários que definem
a forma geral e a forma do objeto Agora, observe que, se você
quiser sombras em sua luz, você realmente precisa
entrar nas propriedades de sua luz e
ativar suas sombras E então, é claro, você pode ajustar algumas de
suas configurações lá, o
que
dependerá de você Em seguida, temos nossa luz de preenchimento, geralmente é
posicionada
na posição oposta à luz principal para
equilibrar a iluminação, e sua finalidade é suavizar as sombras
criadas pela Isso ajuda a reduzir o contraste entre áreas claras e escuras, o que resulta em uma iluminação mais uniforme
e agradável Então, se dermos
uma olhada, digamos, ao redor
do capacete aqui, eu sei que não podemos realmente
ampliar essa seção, mas eu só quero ter certeza
de que não estava movendo o modelo Vamos em frente e damos uma
olhada aqui. Só estou olhando de frente. Podemos ver o quão dura é
essa escuridão
aqui no capacete E isso ao lado aqui, dependendo do brilho do seu
monitor, pode estar bem escuro, especialmente considerando que
nossas fontes de luz vêm do canto superior esquerdo
aqui e descem. E se
descêssemos novamente e
olhássemos
mais para os pés, também veríamos esse forte
contraste que temos nos pés
e nas pernas. Tudo bem. E se
ativarmos nossa luz de preenchimento, podemos ver todas essas
partes
acesas, mas elas ficam muito mais suaves, sem um contraste tão forte
aqui E, obviamente, isso
virá do
ajuste de sua energia aqui E, geralmente, você
quer que a energia seja menor do que a luz de
preenchimento, porque lembre-se de que a luz principal é sua principal
fonte de energia aqui. E, dependendo da situação, você pode usar a
luz de preenchimento para esfriar
ou aquecer e ter uma luz que complemente
a luz E a última luz em uma configuração de três pontos é a luz de fundo, e
a luz de fundo, também conhecida como luz de aro ou luz de
cabelo, é colocada
atrás do objeto ,
normalmente em uma posição mais alta e adiciona uma sensação de profundidade e separação e
destaca as bordas do objeto, criando essa sensação de profundidade
e dimensão, se eu prosseguir e habilite isso, podemos ver que temos alguma iluminação nas bordas
aqui em cima. E, novamente, poderíamos
entrar e ajustar,
brincar com esses números,
encontrar algo
que funcionasse brincar com esses números, para nós Mas você vê como
a luz do aro está realmente destacando
essas bordas aqui Nesta luz de fundo ou
usando essa luz de fundo. Então, vou apenas
ajustar isso de
volta aos
números padrão aqui Mas você pode ver
aqui o antes e o depois, quando não vemos
nenhuma luz aqui versus apenas uma configuração muito básica de
três pontos. Isso já parece muito melhor, e nem estamos levando em
consideração
outras coisas, como a iluminação mundial ou a iluminação do ambiente que está ao nosso redor ou qualquer coisa. E já temos uma
bela versão aprimorada do que começamos. Então, espero que isso ajude
a ilustrar a configuração de iluminação de três
pontos Vou sair da pré-visualização da câmera aqui. Então, se dermos uma olhada, podemos ver que temos nossa luz
principal aqui, novamente, naquele ângulo
vindo sobre nós. Se virmos de cima, temos nossa configuração de três pontos e ela se
parece com um triângulo. Então, temos nossa luz principal aqui se opondo
ao oposto Será nossa luz de preenchimento, e então nossa
luz de fundo estará sempre diretamente atrás de nosso personagem. Agora, nisso, estou apenas
usando holofotes. Mas é claro que, se estivermos do lado de fora, podemos usar coisas
como uma luz direcional, por exemplo, ou você
pode usar holofotes,
dependendo da cena Então, essas são coisas que você
pode levar em consideração. O terceiro tipo de luz que
temos é chamado de luz omni, e basicamente
emite luz em uma área completa de 360 graus. Então, isso
seria mais para coisas como lâmpadas, velas,
coisas assim Agora, não consigo terminar de falar sobre o retorno à prévia
da câmera. Iluminação sem ao menos
mencionar um ambiente. Agora, uma câmera pode
ter um ambiente, ou você pode ter um ambiente relacionado
à cena em si. Então, para mim, vou apenas
adicionar um ambiente mundial
à minha cena aqui. E é importante que você
pelo menos saiba como criar uma causa básica do
céu com o Goto four Você não vai
ter um céu de nenhum tipo. Só está
mais sendo capturado. Não é. Vá. Então, como podemos ver, temos apenas esse fundo
cinza, e isso não é muito bom quando você está falando sobre Ampeily. Se você está
fora do mundo, você meio que
quer pelo menos um céu, Então, você vai ver como criar pelo menos
um céu básico aqui, então vamos ao meio ambiente
e ao nosso ambiente mundial. Criamos um novo ambiente. E clique nele para abri-lo . Então
temos nosso histórico. Temos uma
cor clara, mas o que
podemos fazer é criar uma cor personalizada,
tela, feed de câmera,
se você quiser. Mas o mais importante é que
vamos escolher um céu aqui. E então, dentro da
nossa seção do céu, podemos clicar em Novo Céu, abri-lo para
o material do céu. Podemos dizer que temos
um céu panorâmico, um céu processual e
um céu físico E com nosso céu físico aqui, você pode ver que tem
uma cor de fundo aqui, e nossa cor está
parecendo um pouco escura. Parece que pode ter
havido um problema lá. Deixe-me
voltar para dentro. E vamos usar um céu processual. Aqui vamos nós. Isso é algo mais
normal do que você veria. Agora, o importante aqui é essa clarabóia também pode
afetar seu modelo Então isso é o que eu estava dizendo. Estávamos apenas vendo
a configuração de três pontos, mas seu céu pode
entrar em vigor. Então, digamos que estamos
sentados aqui em um Let's go with a,
sei lá, um pôr do sol, certo? Então, nosso terreno, talvez estejamos mais do
lado verde, realmente não
importa
muito bem nisso. Para o nosso Sky, nossa
cor superior será mais roxa, certo? E então o horizonte é onde vamos
pegar nossa laranja. Certo. Agora, pode parecer que não estamos tendo
muito impacto aqui, mas estamos sofrendo um pouco, como você pode ver na iluminação aqui,
do outro
lado do
nariz, por exemplo. Então, se eu pegar isso,
vou copiar essa cor. Se entrarmos, aí está,
você pode ver como isso está
afetando nosso modelo aqui. Eu só vou colocar
isso de volta lá. E dentro desse ambiente
é onde também podemos obter outros recursos
que podem afetar nosso mundo, como o brilho E, claro, suas opções
de onde você vai prosseguir com essa floração. Então, isso vai acabar com sua desculpa
por um segundo, o pós-processamento. É isso
que vamos fazer? Então, sua floração, sua força de todas essas coisas,
a intensidade. Então você tem todas essas coisas com
as quais pode brincar, mas ao desligá-las, você tem neblina que pode
afetar sua iluminação E também
temos neblina volumétrica, que pode afetar Então, temos todas as coisas diferentes aqui para levar em consideração. E o mais importante,
SDFGI aqui. Isso terá um
impacto no desempenho do seu jogo, mas também teremos uma simulação
de
luz mais realista com
nosso personagem. Aqui vamos nós. E, claro, você sempre pode ajustar quaisquer pequenos efeitos que possamos ter aqui e criar
algo que você goste Obviamente, a densidade
é um pouco insana. Oh, isso é ok, meu erro. Cliquei no errado, SDFGI. Aqui vamos nós. Então, isso é calcular todos os
nossos saltos de luz E lá vamos nós. Agora podemos ter algo que será um pouco mais realista e mais dinâmico. Por exemplo, nossos pés
saltitantes aqui. Você pode ajustar com
isso. Cascatas Isso vai de um a oito Quanto menor o número, maior
será o desempenho. Então você pode vê-lo
calculando esses saltos à
medida que obtemos uma pequena alteração
e, em seguida, subindo para oito Então veja, calculamos em mais algumas dessas sombras, como aqui com
o pescoço e depois nas pequenas, não é
uma palmada nas Acho que seriam armadilhas para nossos meninos Trap Zoids canta
sempre sem trapézio. É tipo, espere um minuto,
isso não soou bem. Mas você entendeu a ideia. Com isso, podemos
criar um céu básico que pode afetar
nosso personagem, assim
como eu mostrei como
fazer uma configuração básica de
três pontos. Então você vai
ter um triângulo. Luzes traseiras sempre
diretamente atrás. Onde quer que esteja sua luz principal
ou sua luz principal. A luz de preenchimento estará do
outro lado com
um nível de energia mais baixo apenas para que as
sombras não sejam tão fortes Obviamente, digite ambiente,
crie um novo ambiente, céu para o modo, crie um novo céu e
você usará o material celeste
processual Tudo bem.
Espero ter lhe dado uma boa ideia sobre o quão bem
a luz
pode realmente afetar seu objeto no
final do dia
e o quão importante a
iluminação pode ser Vou continuar e
mostrar algumas comparações aqui
no final
das coisas
sem iluminação e depois de estarem bem,
então aqui na tela, você está
dizendo a janela errada Mas aqui você está
vendo um antes e depois quando se trata iluminação e realmente ajudando a definir
essa atmosfera, especialmente com uma
imagem como essa, você pode ver o quão
importante é realmente ser bom em iluminação e o quanto você pode
realmente afetar ou ver. Estou partindo de
algo que talvez
pareça antigo ou simplesmente
normal para algo mais novo, talvez um pouco mais realista E se talvez opte por uma atmosfera
mais assustadora, isso te dá
uma boa ideia Então, antes e depois quando se
trata de iluminação. Portanto, não se incline quando se
trata de iluminação. É muito importante,
especialmente se você vai trabalhar sozinho e
quiser fazer algo
em 380 como esse. Com certeza dedicamos
tempo e atenção
ao aprendizado real da iluminação. E há pessoas
por aí que se
concentram puramente na iluminação ambientes e
cenas e coisas
assim como seu trabalho,
eu diria, certo? Agora, eles também podem fazer
outras coisas, mas se concentram em todas as pequenas coisas
que você pode não notar como jogador de um jogo, por exemplo, ou se estiver levando em consideração a iluminação
ao iluminar uma cena, talvez para fazer alguns efeitos
visuais. Mas aí está. Eu não
vou mais reclamar Eu só queria que você soubesse quão
importante será a iluminação quando
se trata de três D em
vez de dois D, além de mostrar como
você pode pelo menos criar um céu básico e mostrar visualmente a enorme diferença,
algo
que até mesmo uma
configuração básica de iluminação de
três pontos pode fazer.
47. Ativos 3D: Tudo bem, bem-vindo, 1º de abril. E nesta seção,
vamos seguir em frente e vamos
criar o Frogger novamente Só que desta vez
vamos criá-lo em três D. Dessa forma, você terá
uma comparação justa,
eu acho, poderia dizer, de trabalhar
em dois D versus três D, e isso deve
lhe dar uma ideia das semelhanças e
das diferenças, e talvez dar uma
ideia do seu próprio tipo de preferência
pessoal que
você gostaria de irritar Tudo bem, então eu
vou usar cubos básicos, apenas malhas básicas quando eu
for criá-los, mas se você quiser usar três modelos
D em seu programa,
você pode ir em frente e fazer isso se quiser
criá-los, enlouqueça Se você
já tem alguns, isso é ótimo. Mas se você quiser usar cerca de
três modelos D e
não tiver nenhum disponível,
acesse a Internet e
encontre três modelos D por toda parte. Por exemplo, esse lugar
aqui é o Sketchfab, e eles têm modelos
gratuitos e pagos Tudo o que
você precisa fazer é prosseguir e fazer sua pesquisa
aqui no topo. Clique em baixável para que todos os seus resultados
possam ser baixados E dessa forma,
elimina qualquer
situação em que alguém talvez esteja apenas
exibindo algo. E agora, se você não
quiser gastar dinheiro, existem muitas opções
gratuitas disponíveis. E esses aqui
com o dólar
inscrito no canto superior direito. Oh, eu não consigo ver
esse. Então, vamos vir aqui com
o cifrão, no canto superior direito aqui. Aqui. Esses são aqueles que
vão custar dinheiro, mas aqueles que não
têm aquele cifrão. E isso
levará apenas um segundo para carregar. E você pode seguir em frente. Você
pode dar uma olhada nisso. Você pode vê-lo, o que
é ótimo sobre fabuloso. Você pode prosseguir e clicar no botão de download
aqui no seu Moth gratuito Obviamente, se você está
disposto a gastar dinheiro
, primeiro precisa passar por todo
o processo de colocar no carrinho, finalizar a compra e
tudo mais. Mas isso é só se você quiser. Eu encontrei alguns sapos grátis
aqui que você poderia usar. Não sei se algum deles
vem com animações ou não. Você teria que verificar
individualmente. E para isso, você acessaria
mais informações sobre o modelo aqui
e, em seguida, poderia obter
todas as informações, todos os diferentes tipos de
modelos e GLB,
GLTF e FBX, bem
como OBJ, funcionarão No entanto, OBJ, posso garantir
que você não tem animações como OBJ apenas para
um objeto estático. E você
pode realmente descer. Você pode ver o PBR. São
todos os seus materiais. Ele tem quatro texturas específicas para
o produto. Então, se
não se aplicasse automaticamente, você teria que
entrar nos materiais e colocar essas texturas, como vimos na seção de
transição E à medida que descemos,
podemos ver que, neste caso, este não tem animações e não está manipulado Portanto, você teria que montá-lo antes de animá-lo, se quisesse fazer
sua própria E não há animações
que o acompanhem,
obviamente, ele não é manipulado Como alternativa, também temos
alguns registros aqui que você pode obter aqui está um caminhão
aqui, perfeitamente gratuito. Então, se você quiser obter modelos, pode ir até um
lugar como o Sketchfab aqui e dar uma olhada
em alguns modelos gratuitos e Se você quiser
usar apenas as formas básicas como cubos, como
vou usar para isso
, também está tudo bem, porque não estamos
trabalhando com três modelos D. Não estamos fazendo nada
sofisticado ou específico. Estamos basicamente movendo coisas
na tela. Não precisamos de
animações sofisticadas para fazer
nada disso funcionar Tudo bem, depende de você qual rota você quer seguir, se você quer fazer algumas,
encontrar algumas gratuitas
e baixá-las, ou se você quer apenas usar as formas básicas que
vêm com o motor Depende de você. Agora, faça isso por este.
Depende de você pensar nisso. E se você quiser
usar três unidades D, vá em frente e passe seu tempo agora coletando-as e
juntando-as. Se você quiser
importá-los, basta arrastá-los
para a pasta do projeto com
seus outros ativos. Tudo bem, vamos começar.
48. Mapas de grade: Tudo bem, pessoal. Assim
como nas duas versões D, começaremos criando o plano de fundo para isso. E para fazer isso, precisaremos de algumas coisas. Primeiro de tudo,
precisaremos de uma câmera aqui
apontada para baixo para que possamos realmente ver
o que está acontecendo aqui. Então vá em frente e pregue
uma cena de três D, o que seria apenas um número
três D para sua raiz Eu renomeei o meu para dizer Main. Adicione uma câmera três D aqui,
e você pode ir em frente
e adicionar um mapa de grade. O mapa de grade é a
versão em três D de um mapa de blocos. E com sua câmera três D, você pode ir em frente e definir
sua posição Y abaixo da seção de transformação para 25 e sua rotação
do X para menos 90. Dessa forma, você pode
olhar diretamente para baixo. Agora, se você fosse
executar essa cena, você verá uma caixa cinza. Fantástico, mas pelo menos
sabemos que as câmeras funcionam ou pelo menos
fecham por padrão. Se você está paranóico com isso, pode ir em frente e marcar a
corrente dentro do Mas como
temos apenas uma câmera, essa deve ser a única que ativa no momento um mapa em grade O NRT é um mapa em grade. Devemos ter nosso conjunto de azulejos, certo? A arte é um mapa de azulejos. Precisamos de um conjunto de azulejos.
Bem, para um mapa em grade, precisamos de uma biblioteca de malha. E podemos criar um novo, mas ele não tem
nenhum recurso. Então, o que precisamos fazer, na verdade,
é criar essa biblioteca. Então, para fazer isso,
vamos criar uma nova cena,
e você pode simplesmente
criar um nó três D como seu nó raiz
novamente para nossa cena. E, novamente, essa é apenas
uma nova cena em três D, e você terá uma. E tudo o que estou fazendo
pela estrada, pela água e pela mediana é
apenas trazer as texturas
dos dois D Frogger,
trazer
os sprites e
usá-los como a usá-los E estou apenas deixando posição padrão
deles
no meio. Então eu vou te mostrar como eu faço isso. Então eu entrei e criei uma instância de malha três D.
Eu vou em frente e a renomeio Este será meu bloco de
latão para minha malha, eu abro isso e
seleciono uma caixa de malha Agora, se você tivesse uma
malha personalizada, um modelo personalizado aqui, se você quisesse trazer
especificamente para este bloco,
você poderia ir em frente
e arrastar a malha para esse local específico. Essa malha, esse objeto.
É aqui que você faria isso. Agora, apenas para esses
blocos e para o mapa em grade, você não precisa,
a menos que esteja trazendo
suas próprias malhas personalizadas para
cada um dos seus blocos Agora, esse bloco é
completamente branco aqui, e você notará
que é muito menor. Vou apenas esconder
os outros aqui para que
possamos nos concentrar neste
. Tudo bem. Então, a primeira coisa é
que temos que ir para a escala e definir XY e Z até
duas vezes em sua escala. E a razão pela qual estamos
fazendo isso é para que ele caiba em um bloco inteiro do nosso mapa de grade, em vez de ficar na borda ou na lateral em alguma posição estranha É mais fácil seguir frente e fazer isso, apenas o dobro. Tudo bem, então temos
nosso pequeno cubo aqui. Agora, o que precisamos
é de uma textura nela. Então, o que vamos fazer é
abrir a substituição
do material da superfície E a razão pela qual
vamos fazer isso. Oh, não, essa bagunça vem com isso. Então, podemos simplesmente
abrir a seção de malha e aí está o material. E nós apenas adicionamos um
material padrão e o abrimos. E aqui está nossa textura de albedo. E é aqui que
entraríamos em nossos sprites Frogger. E para o meu gramado aqui, poderíamos ir em frente e trazer para
casa, se quiséssemos. Poderíamos fazer isso, mas
não parece muito bom. É meio estranho.
E, pessoalmente, não
sou muito fã disso. Então, pessoalmente, o que
estou fazendo com isso é pegar
a textura mediana e
colocá-la lá E então, apenas por preferência
pessoal, vou passar
para o U V,
especificamente, e
vou definir minha escala aqui de
meus UVs para dois Acho que pelo menos
parece um pouco melhor. Agora, o problema é
que isso se parece exatamente com a nossa mediana, e não seríamos capazes de dizer
a diferença Então é aqui
que vou usar
a próxima passagem aqui
dentro do nosso material, e vou adicionar outro material
padrão aqui. Agora, quando eu abrir isso, vou configurar
o albedo para ser um belo verde
semitransparente Vou até a seção de
transparência e definirei a transparência como
Alpha. E lá vamos nós. Temos, tipo, uma
versão verde da mediana, então ela se destaca e
é diferente o suficiente Agora, você só teria que fazer isso com o bloco de grama
se estivesse me copiando com isso. E a mediana, basta usar, é
claro, a textura mediana, o dobro do tamanho, água Você pode fazer a mesma coisa
e a mesma coisa com a estrada. E uma vez que você tenha isso, eu
recomendaria salvar isso, então Control S. Ou, é
claro, vá até
seu CN e salve e
salve isso como sua biblioteca de malha
, biblioteca de malha E isso será apenas
no caso de você
querer voltar e editar
isso no futuro, o que provavelmente faremos em algum
momento, apenas para avisar. E depois de fazer isso, podemos ir até SN
e ir para Exportar como, e você verá a
biblioteca de malha como uma opção. Eu sei que você não pode ver
isso na minha tela agora, mas apenas exportar SN
como Mesh Library. E quando você fizer isso, você verá essa tela. Não é grande. Aí está. E só por segurança,
vou
garantir que a instância Fly Meshed nos transforme, mesmo que estejamos bem E salve-o em algum lugar. Acabei de chamar Min MAP e uso a extensão mesh lib apenas para manter as coisas
organizadas, porque não
quero que tudo
se Res ou Trez, por exemplo Gosto de manter as coisas
nomeadas corretamente , então mesclar lib ou material, shader, coisas assim Gosto de mantê-los mantendo as extensões relevantes
para o que são. Então, uma vez que você tenha isso,
vá em frente e diga isso e aperte o botão Salvar. Se você já tiver um criado no futuro e
voltar e
editá-lo, pode prosseguir, basta
sobrescrevê-lo. Você vai ficar bem. E de volta à
nossa cena principal, podemos realmente
acessar nosso mapa de grade. E você descobre onde
salvou sua biblioteca de malha, pode arrastá-la para a seção da biblioteca de malha do seu mapa de grade e pronto Você tem todas as suas peças lá. Agora, eu fui em frente e
tenho Grass block e grass end só
por causa da minha nomenclatura, e fui em frente e
coloquei meu conjunto para adicionar em vez de sobrescrever, o que vou fazer é simplesmente
voltar e
ir para a biblioteca de malha de exportação E eu vou dizer que vou desmarcar,
mesclar com Dessa forma, eu simplesmente o
sobrescrevo completamente e o substituo. E agora, quando venho aqui,
tenho meus bloqueios normais. Incrível. Tudo bem. Agora, para o projeto, estou usando a mesma
resolução que uso no Frogger em r2d3 E se eu seguir em frente e executar isso, vou ter mais facilidade
quando se trata de
colocar meus blocos. Tudo bem. Agora, você verá enquanto
temos o bloco cinza lá, ou parece que não
temos nada em nossa janela. Você verá que se
colocarmos alguma coisa, ela aparecerá. E é assim que vamos
determinar onde
estão nossos limites . Isso é o que
vamos fazer. Vamos delinear nossos
limites se eu vier até aqui. Essa é a parte superior, o que
significa que eu deveria estar olhando dessa maneira na minha câmera. Vamos ver. Isso
ainda está na tela. Isso é um pouco longe demais. OK. Então esse vai
ser esse bloco. Você pode passar por cima de um. E eu vou chamá-lo de
lá naquele quarteirão. E agora, é só uma questão
de encontrar os outros cantos, que se você contar
os espaços da grade, você deve ser
capaz de achar fácil Esse deve ser o meu canto lá. E então nossa esquina deveria estar aqui, mais uma? Sim. Tudo bem, então aí está o
canto de todas as nossas posições. Agora, se você quiser
colocá-lo, clique com o botão esquerdo, se você não sabe
como excluí-lo, você não descobriu. É um clique com o botão direito. E agora podemos começar a colocar
nossos objetos. Portanto, nossa mediana é nossa
segunda linha aqui. Pegamos a
estrada na primeira fila. Estávamos na terceira,
quarta, quinta,
sexta e sétima. Então tivemos a mediana novamente. Atravessamos, tínhamos mais
cinco fileiras de água. Um, ganchos dois, três, quatro e cinco Vamos ver o que temos a seguir? Tivemos nossa zona de vento. Então, para esses, vou
dobrar aqui nas pontas. Isso porque, opa, é
um número ímpar aqui. E teremos duplas, assim. Três ossos, um,
dois, três, para baixo, um, dois, três, para baixo, um, dois e três para baixo. Vou preencher esses
espaços vazios com água. E então tínhamos a fila de trás, que era apenas água,
onde estava parte da nossa interface de usuário. Agora, vamos
preencher isso novamente. E aí está.
Usamos a câmera para garantir que preenchêssemos
toda a nossa área visível aqui Agora, isso é meio escuro, como você pode ver, e isso é porque
não temos nenhuma iluminação. Então, vou clicar
na minha nota principal aqui e vou
adicionar uma luz. E, especificamente, vamos
adicionar uma luz direcional apenas para que possamos
emular um sol se pondo. Vou levantá-lo acima,
ampliar para que eu possa ver para
qual ângulo ele está apontando e
apontar para baixo. Aqui vamos nós. Agora temos alguma
luz brilhando em nosso conjunto de blocos ou mapa de grade que podemos ver e realmente
ver o que está acontecendo aqui Tudo bem. Então isso é
tudo o que precisamos fazer aqui. Neste vídeo. Agora, vou observar que
estamos no andar zero aqui. No entanto, se você quiser
cair para menos um, verá que vamos
descer um espaço aqui. Se você quiser descer um,
certamente pode
fazer isso apenas para que se
estabilize de forma que 00, zero fique
em cima de nossos objetos, ou para que possamos ter, digamos, um sapo sentado em zero, zero e fique no
topo do solo em vez de
ter que levantá-lo, que eu acho que
vou examinar e fazer bem rápido aqui Tudo bem, então fui em frente
e diminuí a mente um pouco, e como você pode ver
na câmera, agora
estou um pouco
errado com meus números Então, podemos subir e preencher esses espaços extras. Basta decifrar um mais largo. E isso vai resolver isso. Estrondo. Estrondo.
Solução simples. Fácil de fazer rs. Sabe, acho que
vou colocar mais água nas bordas. Tudo bem. Então, vamos
lá. Aí está. Preciso de mais uma
estrada na parte inferior para cobrir a grade inferior. Aqui vamos nós. Tudo bem?
Se a tela cair novamente, mude meu piso
para negativo. Então, agora, quando nos
sentarmos às 00, estaremos diretamente em cima
dela. E lá vamos nós. Temos nosso mapa de grade configurado. Temos nossa câmera apontada
para baixo em nosso mapa de grade para que
possamos vê-la
do ponto de vista de um pássaro. E isso bastará
para este aqui. Agora, você pode ver que é muito fácil, além de ter que
criar nossa própria biblioteca de malha, que quero dizer, para ser justo, se você está em dois D e
está trabalhando com conjuntos de
blocos ou mapas de blocos, você meio que precisa criar
seu próprio conjunto de blocos, Portanto, não é
uma grande diferença ir de
dois D para três D até agora. Tivemos que adicionar uma câmera e adicionar uma luz. Fora isso,
nosso processo tem sido, na maior parte,
praticamente o mesmo. Quero dizer, com uma biblioteca de malha, tivemos que exportá-la
para configurá-la. Era um conjunto de ladrilhos, tivemos que mexer com uma seção especial de ladrilhos aqui
embaixo Havia pequenas diferenças, mas muitas delas eram
iguais. Não é muito diferente lá. Tudo bem? Depois de definir seu mapa,
deitar no chão que você quer,
com a câmera configurada, podemos seguir em frente e passar para a próxima seção. Esqueci o que fizemos em segundo lugar, então vou ter que
voltar e dar uma olhada.
49. Criando o jogador: Tudo bem, então aqui
vamos
criar nosso player, e eu vou te mostrar
se eu vou
parar com isso bem rápido Vou
mostrar se você optou por usar três ativos D aqui e talvez tenha baixado
alguns ou criado alguns. Veja, eu tenho um
GLB para você aqui. Com três texturas aqui. Agora, isso deve ser aplicado
automaticamente, e eu vou clicar com o botão
direito sobre ele e selecionar uma
nova cena herdada Eu sei que você não pode
ver isso, mas
vou selecionar uma nova cena
herdada E você verá que agora tenho meu
novo sapo como sua própria cena,
e ele deve ter todas as
suas texturas completamente
aplicadas para mim e ele deve ter todas as suas texturas completamente
aplicadas Agora, se você quiser usar o modelo, por favor
, vá em frente. Se seu modelo tiver animações, você verá um
reprodutor de animação dentro do cenário E se é isso que você
deseja usar como jogador, você pode
salvá-lo como jogador. Agora, este é, neste caso, um Node três D. Então, teríamos que
mudar isso. O que você faz, clica com o botão direito do mouse e altera, você tem a opção de
alteração lá? Agora, se eu clicar duas vezes no meu sapo aqui antes de
abrirmos a cena, mudar para C, eu não
tenho uma opção para isso É interessante. Vamos ver se eu tenho uma opção
se eu vou aqui. Ok, então você
clica duas vezes na cena. Vamos pegar o importador
para três sapos D. E podemos simplesmente
entrar no tipo raiz aqui. Clique nele e selecione o corpo do personagem três D. Não
há razão
para eu capturar. É a mesma coisa que criar
um novo nó, na mesma tela. Eu posso simplesmente clicar no
corpo do personagem três D, clicar em Criar. E agora que eu vou
ter um corpo de personagem ou ele deveria apertar o botão de reimportação
aqui embaixo Feche aquela cena antiga, clique com
o botão direito do mouse e faça a cena
herdada Eu posso ver que meu novo sapo
aqui tem um corpo tendemático. Então, se você quiser usar três D, você pode ir em frente e fazer isso. Faça de você um sapinho
feliz, ande de um lado para o outro. Como eu disse, este
não tem animações. Então ele estaria apenas pulando. Bem, eu diria pulando, mas não pulando de
verdade, Ele estaria apenas se movendo
um espaço por vez. E se você quiser usar apenas o básico, a versão básica, talvez você não seja super
instantâneo em três D, mas, você sabe, você tem que
pelo menos aprender um
pouco , mergulhar os dedos dos pés um O que vamos fazer
é dar crédito a uma nova cena,
ir
para o outro nó, fazer
um corpo de personagem três D. E também adicionaremos uma
instância de malha A instância de malha
em que você pode simplesmente usar uma caixa e, para mantê-la
alinhada com todo o resto, definiremos a escala para dois. Vou adicionar um material padrão. E como ele é meu sapinho ,
vou usar
esse verde amarelado E isso é tudo o que
realmente precisamos fazer. Agora, se você
quiser, pode entrar e ajustar alguns de
seus outros controles deslizantes Veja, temos uma espécie de
sapo brilhante acontecendo aqui agora. As especulações estão subindo, e
sapos não são supermetal, então coloque um
pouco de metal lá dentro E você poderia simplesmente fazer isso
com um sapinho. Agora, se você planeja ter apenas a aparência de cima para baixo, e não tem em nenhum momento, planeje mover a
câmera talvez até aqui. Mas se você movê-lo para cá, sugiro adicionar
uma segunda camada
ao vento, a
área do vento no mapa da grade, apenas para
que apareça
do chão. Mas se você
planeja ir de cima para baixo
, o que estamos procurando Material. O que você poderia fazer é entrar em
seu sapo ou sprites. Ei, você pode trazer o
sapinho lá para a textura, e oh, ele não está muito bonito, então talvez não
queiramos fazer isso Hmm. Bem, espero que seja
um pouco diferente. Mas acho que não. Mas acho que podemos
seguir em frente e usar essa textura para a
cor sapo, se quisermos, ou você pode simplesmente
torná-la verde, ou novamente, você pode trazer seu
próprio modelo de três D, certificando-se de que seu nó raiz aqui é um corpo de personagem dois D. Qualquer que seja o caminho que você quiser seguir, dependerá inteiramente Eu disse no início
que
vou usar as formas
básicas que
já estão aqui, em vez de procurar e encontrar
um monte de três modelos D. Mas se você quiser fazer isso,
deixe sua aparência ainda mais bonita. Fantástico. Eu encorajo você. Ok, então
vou continuar com isso e renomear corpo do
meu personagem para Frog,
ou queremos jogar? Vou renomear meu player
e, na verdade, não preciso de
mais nada além
disso no momento Vou seguir em frente e salvar
minha cena como cena do jogador. Eu posso ir para o Maine e
podemos trazer nosso jogador. Desde o início. Como temos todo esse
encaixe com a grade, perfeitamente alinhado. Ele está
bem no meio. Tudo bem. Então, vamos ver. realmente
se alinharia
com isso? Perfeito. Tudo bem Então, com isso, seja qual for a rota de
jogador que você decidir seguir, ou eu trarei nosso
amiguinho Você. Tudo bem, com isso Escolha qualquer sapo ou cubo,
textura, o que
quiser com seu Depois de fazer isso,
vá em frente e salve-o. Faça isso agora mesmo. E nos vemos na próxima
, onde
começaremos a fazer
pequenos movimentos.
50. Movimento do jogador: Tudo bem, vamos
criar o movimento básico do jogador
para nosso pequeno sapo Então, acabei de
ir à nossa cena de jogador aqui e colocar o roteiro em seu roteiro Nosso sapinho e dentro do nosso roteiro,
estamos prontos para começar Podemos ir direto para
nossa função de processo. Agora, como estamos
trabalhando com três D, devo dizer que qualquer coisa
que tenha a ver no futuro com
detecção de colisões e corpos físicos, seria melhor colocar
coisas que tenham a ver especificamente
com eles,
como movimento, em
um processo físico Em vez do processo normal, esses são dois
momentos diferentes em um quadro. E, novamente, para este jogo, não
deveria ser tão importante, mas achei melhor avisar para o futuro,
se
você decidir
continuar
desenvolvendo jogos
tridimensionais, se
você decidir
continuar que qualquer coisa relacionada à física,
como movimento, deveria estar sob o processo físico em vez
de apenas um processo normal Tudo bem, então eu
vou seguir em frente e vamos criar nossa função de
movimento. Então, esse movimento não
retornará nada. Agora, eu já tenho minhas funções
ou não, desculpe. Meu movimento ainda está configurado, pois
estou no mesmo projeto. Lembre-se de acessar as configurações do
projeto. Vá para o seu mapa de entrada. E a partir daí, você pode ir
em frente e configurar suas entradas. Se você não tiver isso
configurado por qualquer motivo, talvez esteja fazendo isso em
seu próprio projeto separado, o que, novamente, seria
bom. Mas sim, eu só queria ter uma configuração ainda minha, assim como
a do froger Two D. Tudo bem Então, dentro de um movimento. Tudo o que precisamos fazer, é claro,
é verificar se o
ponto de entrada é pressionado com a ação. Digamos que acabou de ser pressionado porque não queremos enviar spam. A ação que queremos
verificar será executada. Isso é o que eu chamei de ação. E para mover nosso pequeno
sapo, eu me lembro antes, o que fizemos foi mudar a posição do ponto
automático Então, neste caso, estamos
em três dimensões. Temos que usar
um eixo z ou z aqui. E vamos ver o que
acontece se fizermos isso. Opa, ovo na minha cara. Eu nunca
estava chamando movimento. É por isso que não
funciona. Então, você tem a posição
de chamar as coisas. Temos a
forma básica transformada de chamar as coisas, e isso nos dirá que não
podemos usar um único número. Temos que usar
um vetor três, e isso é para um tópico muito
mais avançado quando começamos a abordar
coisas como
matrizes, matrizes e coisas assim Portanto, transform dot origin dot z seria o
outro simples que você poderia usar. Você pode ver, para nós,
que eles estão trabalhando de forma idêntica. Porém, dependendo da sua
situação e do seu jogo, talvez
você precise usar ou prefira
usar um em vez do outro. É uma daquelas coisas
que podem ser situacionais. Agora, se você quiser
manter as coisas o mais
próximo possível da
versão do Tut,
você pode escolher a posição
D, a posição DZ Eu vou usar o
transform.org só porque é algo que normalmente
queremos usar quando se trata de
três D, eu diria Muitas vezes, isso é o que você
verá no back-end. Você está vendo o código de
outras pessoas, pelo
menos por meio de minhas experiências
quando vejo outras pessoas. Então, neste caso,
você pode ir em frente e eu acho que usar o que
quiser usar aqui, e podemos deixar isso
para a preferência pessoal Eu vou escrever
a coisa toda. Isso depende de você. E podemos seguir em
frente e preencher as outras, essas três últimas com nossa mão esquerda
ascendente. Tudo bem,
então agora seus eixos
foram alterados para baixo, para a esquerda, para a
direita, e são todas as Agora, se
para cima vai ser negativo, então
para baixo vai ser positivo. Agora,
a esquerda vai ser negativa, mas não vai
estar no eixo z. Vai ser no X. E se for negativo no X,
então o certo
será positivo no X. Então, podemos ir em frente e tentar
isso. E lá vamos nós. Devemos nos mover
em todas as nossas direções, pois precisamos e nos
encaixamos em todas as
nossas zonas de vento. Lá vamos nós. Incrível. Tudo bem, até
agora tudo bem. Agora, e se você quiser
girar um pouco de Froggi? Especialmente, talvez se você estiver usando um modelo de três D trazido, talvez queira
girá-lo novamente enquanto ele se move, assim como fizemos com
nossos dois sapos D. Bem, aqui vamos
seguir em frente e obter graus de
autorrotação Y, acredito que estará aqui. E eu vou configurá-lo para zero e,
para baixo, vai ser 180. A esquerda é, eu acredito que é 90, e então a direita é menos 90. Vamos verificar
isso. E toda vez que nos
movemos, lá vamos nós, nosso pequeno sapo gira na posição em
que precisam estar Agora, novamente, isso
dependerá totalmente de você se quiser
configurá-lo dessa forma. E, novamente, se você
realmente quiser, pode entrar e usar
um s para voltar
a olhar para frente
em olhar para frente sua rotação, de modo
que, quando você se move, possa ver que não,
não estamos dando aquela reviravolta
instantânea,
como esperaríamos em
dois D. Então teríamos que
entrar e fazer
uma pequena pausa nisso não estamos dando aquela reviravolta
instantânea, como esperaríamos em
dois D. Então teríamos que
entrar e fazer uma pequena pausa Eu mesmo não me importo. Pode ser só porque
eu estou fazendo o cubo, mas eu simplesmente não vou
ter aquele bloco S lá dentro Mas com isso, temos
nosso movimento básico
e podemos começar a fazer
coisas como carros, sermos esmagados por nossos carros
e, em seguida,
fazer com que nossas plataformas saltem sobre
a morte pela água, zona
do vento e configurar nosso
pegajoso novamente E a menos que eu esteja
esquecendo alguma coisa, teremos nossa versão em três
D configurada Oh, bem, a resposta
não será parte
da morte, sim, então vamos lá. Tudo bem, então aqui estão
os controles. que estamos comprando para
nossos três corretores D, lembre-se de chamar sua
função de movimento dentro do processo E lembre-se, no futuro, se você continuar
fazendo três jogos D, qualquer coisa relacionada à física, como movimento, porque tenho certeza de que haverá colisões De preferência, você preferirá seguir o processo físico em
vez do processo Mas certo. Aí está. Aí está o movimento do nosso jogador. E vamos em frente e
pulemos para a próxima.
51. Criando o veículo: Tudo bem, então
vamos construir nossos pequenos veículos que podemos usar para entrar
no jogo Agora, é claro, novamente, se você comprar cerca de
três modelos D para veículos,
e então, assim como o sapo, podemos ir em frente e trazê-los Certifique-se de que eles estejam voltados para
a direção certa, que deve ser óbvio o
que deve ser óbvio
quando chegarmos ao fim,
quando você os vê se movendo. O que? Vá em frente e faça com que eles apareçam ou crie um item a partir
dessa cena.
Salve-o como seu veículo. E se você estiver fazendo os blocos
básicos comigo, siga em frente,
vamos em frente e
criaremos nós mesmos. Vamos fazer
um pequeno caminhão. Vou usar as duas
versões D o mais próximo possível e criaremos o corpo do
nosso personagem. É chamado esse caminhão. E, claro, isso precisa
de uma malha versus a adição aqui. E eu vou
adicionar uma caixa. Vá. Agora, para continuar com
nossos dois por dois, vou aumentar
a escala aqui em dois e vou aumentá-la. Tudo bem, então
isso deve estar no mesmo nível do personagem do
nosso jogador. Vou me certificar de que
tudo isso esteja nivelado posição plana e uniforme Agora, você, é claro, não precisa citar
nada disso,
mas essa será a aba, vou criar
outra bagunça aqui, e esse será meu trailer A escala de transformação vai até dois. Isso também vai ser uma caixa, posição, uma no Y. Vou puxá-la de
volta para duas no X. E vamos ver. Vou
seguir em frente e dar uma cor diferente. E não temos visibilidade. Nós modulamos. Então, vou
adicionar um material a essa malha. Esse vai ser meu trailer. Digamos que material padrão. Abra isso e
vá até o meu albedo, e eu vou
dar uma cor a ele Eu vou escolher
algo na tonalidade laranja. E agora, se eu quiser, posso mudar e ajustar algumas dessas válvulas, eu
possa ajustar meu X para dois,
e agora está mais longo, o que agora vai parecer um pouco
mais com um trailer Recoloque minha posição na minha transformação três para que ela se
alinhe um pouco melhor. E, em essência, vista de cima para baixo,
esse será o nosso caminhão Agora, se você quiser
ir mais longe, pode ir
em frente
e trazer outra bagunça. Se quiser pode usar como exemplo aqui, vamos para cilindros Então, podemos trazer
isso e você pode ver como estamos do nosso lado. E então podemos ir e você pode ajustar o tamanho de tudo isso Digamos que você reduza nossa
altura para um, 0,5. Estamos chegando lá, talvez 0,25. E lá teríamos
uma roda lateral. Então, se você quiser ir
mais longe e usar outra malha para
criar suas rodas, dê a elas um sombreador e uma cor É assim. Você certamente
pode fazer isso. E então, nesse caso, eu diria para
mover a malha inteira um pouco mais para
cima, para que as rodas sejam o que vai
ficar no chão aqui. Então, se você quiser fazer isso,
por favor, vá em frente. Enlouqueça. Se você quiser novamente, traga seu próprio
caminhão, você pode. E quando você usa essas formas
e cria seu próprio caminhão, vá em frente, volte e terminaremos a próxima peça que
adicionaremos ao caminhão, e então criaremos nossos
spinners e escreveremos nossos roteiros Tudo bem, então eu fui em frente. Eu adicionei algumas rodas a ele e acabei de levantar
tudo apenas selecionando todas as
nossas malhas e levantando-as Vou clicar em Escape para poder
desmarcar tudo. E aí está meu caminhão simples. Agora, se você quiser,
pode seguir em frente e seguir em frente, é claro, e criar
mais veículos. Eu só vou com esse caminhão
fácil aqui. E continuar com os dois aspectos D para essa comparação justa
lado a lado. Dessa forma, você pode ter uma ideia
fácil ou melhor
da transição de como
é trabalhar em
dois D versus três D. Vamos
continuar fazendo isso com a detecção de área. Então, vamos adicionar uma área três D, assim como
fizemos em duas D. E nessa área,
vamos seguir em frente e adicionar uma forma de colisão aqui Você pode ver aqui que
eu tive uma área três D e uma forma de colisão Essa forma de colisão,
é claro, será uma caixa Não há razão para não fazê-lo. E então
certifique-se de que sua caixa cubra todo o veículo. Mas não há erro quando seu pobre
sapinho é esmagado. Pegando essas alças alaranjadas
e puxando-as para fora. Em algum lugar perto
do meio do meu caminhão. Lá vamos nós. Agora, não
há erro. Se meu sapo for atingido
, ele pega. Vou reduzi-las daqui
a pouco. Sim, porque temos
muita base na lateral. Tudo bem, por enquanto,
acho que está tudo bem. Se quiser, você
sempre pode voltar e ajustar isso mais tarde. Tudo bem? Então,
vou salvar isso. Minha
forrageadora de três D diz caminhão ponto C. E agora precisamos que nosso caminhão
tenha um roteiro, certo? Porque eles precisam
estar em constante movimento. E vamos ver. Vamos nos
mover na linha vermelha, então ela estará
no eixo X do outro lado. Isso é fantástico. adicionar um script.
Obtenha nosso roteiro de caminhão. E, novamente, vamos
manter as coisas o mais parecidas
possível para nossos três
D, assim como fazemos com dois D. E não precisamos nos
preocupar com nada disso. Se você tem tudo
isso, vá em frente e exclua essas partes. São para um tipo
de jogo completamente diferente e completamente diferente. Sim, o que aconteceria se você não prestasse atenção e simplesmente clicasse
nele como eu fiz lá, e não tivesse um script vazio
ou não padrão Era um controlador de personagem. E o controle de personagem
normalmente tem
esses aspectos, eu acho, mais parecidos com um jogo de
tiro em primeira pessoa ou uma plataforma ou coisas mais
parecidas em termos de P&D, Pará pode correr,
correr e pular No nosso caso, nosso
caminhão não precisa de
nada disso. Então, vamos em frente. L a mesma coisa que fizemos antes, como exportar nossa
variável de direção. Que era um
número inteiro, e usamos o padrão como uma última vez Em seguida, tínhamos uma
variável para velocidade, que também era um número inteiro
que tínhamos em 32 Isso pode ser super rápido, agora, mas acho que vamos descobrir. Então, acho que, por enquanto, vou configurá-lo para um. Eu posso mudar isso mais tarde. Dentro do nosso processo. Vamos seguir em frente.
Temos nossa velocidade Obtivemos a propriedade X dela
e a definimos como igual à
nossa velocidade vezes a direção. E, claro, precisamos mover um slide, caso contrário, nossa
velocidade não fará nada Vamos para nossa cena principal, trazer nosso caminhão e ver se
funciona exatamente como esperamos. Vou
colocá-lo lá e executá-lo. Ok, estamos em
uma velocidade de um, e ela está indo na direção
oposta para nós. Mas tudo bem. Neste caminhão, isso
significa que nossa direção é menos um porque
queremos ir para a esquerda E lá vamos nós. Podemos ver
nosso caminhão atravessando. Incrível. E, claro, podemos nos deparar com isso
agora porque não temos nenhuma cena de morte para o
sapinho ser espremido Mas nosso caminhão está se movendo Agora, vamos em frente e agora que sabemos que está
funcionando da maneira certa, vamos rodar, ver se 32 é muito rápido ou
se ainda está bom. Para mim, parece que
pode ser um pouco rápido demais. Para você, talvez você
goste dessa velocidade. Então eu coloquei pela metade até 16. Isso
também pode ser um
pouco rápido para mim , mas talvez queira ir com oito da minha velocidade e
tentar novamente. Ok, acho que vou
escolher oito, pelo
menos por enquanto, novamente, você sempre pode voltar
e alterá-lo mais tarde. E agora vamos criar nossas
panelas aqui. Tudo bem? Então, eu não tenho veículos indo
na direção oposta, e seria chato ter todos
nós indo na mesma direção Então, eu só vou
ter esse caminhão, e eu vou fazer com que ele vá em, você sabe, uma direção
diferente. Vamos fazer com que alguns vão para a
esquerda, outros para a direita para isso. Obviamente, se você tem
vários veículos, de qualquer forma, tem um veículo diferente para cada patrocinador, então
vamos entrar em nossa cena principal e adicionar a
mesma coisa que fizemos em Tot, vamos adicionar um marcador D e essa será nossa
chave Acredito que usamos um marcador
ou usamos um nó? Acho que usamos um nodo. Deixe-me seguir em frente e clicar com
o botão direito do mouse em Alterar tipo e mudar para Não altere
para uma chave inglesa de plotagem agora E qual é a posição desse
caminhão? Puxe um pouco para cá. Então, podemos dizer 32 e 12. Sim, isso parece bom. Então, chave, transforme a posição, 32 no X, 12 no z. E é aí que
vamos localizar esses veículos, certo? Vamos adicionar um
script para nosso spawner. E, novamente, mantendo-nos o
mais próximo possível da versão TD. Teremos
nossa variável de caminhão, que mais tarde
chamamos de veículo. Você sabe o que? Vamos chamar um veículo agora. Por que não, caso
vocês tenham veículos extras. Eu vou igualar uma recarga, certo? Do nosso caminhão. Mas é claro que você pode
querer definir isso separadamente. Dessa forma, podemos usar o
mesmo script em tudo. Lá vamos nós. Nós simplesmente avançamos e o
exportamos para uma cena lotada. E neste caso,
é claro, eu só vou para dentro do meu veículo. E inspetor, eu só
vou arrastar meu caminhão
na minha cena de caminhão. Lá vamos nós. E pronto, tudo o que
precisamos fazer é chamar nossa função que
vamos criar
aqui de spawn vehicle Ok. Avalie esse período de
funk. Veículo. E podemos fazer o que fizemos novamente,
anteriormente, onde podemos obter
um tempo de espera aleatório aqui. E isso é um número inteiro aleatório. E usamos por cento
três ou pelo menos eu uso por cento três mais um. Então, lembre-se, esse percentual três vai nos
dar zero, um, dois, e adicionar um que
nos dará um número inteiro aleatório
de um, dois, três Então, um desses. E como
estamos usando isso como segundos, isso
nos dará de um a 3 segundos entre cada carro. Parece uma árvore,
como fizemos antes, crie nosso cronômetro, ultrapassaremos
nosso tempo de espera e
esgotaremos nosso tempo Então, depois de esperarmos tanto tempo, criaremos uma instância do
nosso caminhão ou veículo VI é igual ao
ponto do veículo, instanciar. E precisamos adicionar
à cena o self dot ad Child, nosso veículo. E como esse patrocinador está do
lado direito, você precisa ir para a esquerda Agora, como estou apenas trabalhando
com esse único veículo, preciso de uma maneira de
esse veículo ser configurado por padrão, ou
melhor, por padrão, quando ele se estende para que eu os
tenha em ambos os lados Porque se eu não fizer isso, vai voltar ao
espaço aqui por um segundo. E quando isso for feito,
vamos chamá-lo de Curt Span. Então, se prosseguirmos
e dermos uma
olhada nisso agora, quais são os três D. Faça esse caminhão, exclua-o. Se o gerarmos agora, vamos lá. Tem um caminhão.
É outro caminhão. Aqui vamos nós. Veja, eu acho que
é uma velocidade decente para isso. Mas você pode ver aqui que todos os meus caminhões
obviamente vão para a esquerda. Então, se você vai
usar um veículo como eu, apenas para ajudar no aprendizado aqui
, você pode ir em frente e definir um parâmetro extra, especificamente para o seu spinner E esse parâmetro aqui, vou exportar vou chamá-lo de VD para direção
do veículo Isso será um número inteiro e, por padrão,
definiremos isso como um E especificamente esse observador, vamos
configurá-lo para água negativa,
obviamente, porque
ele precisa ir para a esquerda Então, tudo o que eu faria aqui
é apenas fazer direção do ponto
V, certo? Foi assim que o chamamos. Sim. Direção. É igual a BD. Tudo bem Então, agora, se eu vier até o caminhão, se viermos aqui
e se eu definir minha direção padrão de volta
para positiva, salve isso. Então, agora ainda se mova na direção
negativa, porque meu patrocinador deveria estar definindo
essa direção para nós Aqui vamos nós. Então aí está chegando
o caminhão. Então, agora eu posso usar o mesmo script se eu for usar
o mesmo veículo. Agora posso simplesmente
defini-lo entre menos um ou positivo
ou direção. Tudo bem Agora, se fôssemos
fazer a mesma coisa com mais veículos, bem, se tivéssemos a mesma coisa, cada veículo indo em direções
diferentes, obviamente
usaríamos essa variável. Mas vamos fazer com que nossos outros patrocinadores
se estabeleçam aqui bem rápido Tudo bem, tenha todos os
meus patrocinadores aqui. Então, o patrocinador quatro terá, já que
estou usando um veículo, vou configurar
um VD configurado para um O patrocinador dois também
será um. E, claro, três e meu
filho original
serão todos menos um porque
estão do outro lado E agora, se
fôssemos dar uma olhada, deveríamos ter
algo seguindo, e isso seria
muito tráfego
para nosso
pobre sapinho Então, novamente, você pode vir aqui, você pode ajustar coisas
como o tempo de espera Oh, cara, essa é
um pouco bagunçada. Mas, sim, aí está. Você
pode entrar e ajustar isso Parece que talvez consigamos colocar outro
caminhão no topo .
Aí está. Isso é muito perigoso para nosso pobre sapinho.
Isso está muito Temos que ver nos testes se talvez esteja um pouco perto demais
e, em caso afirmativo, basta excluir essa linha. Ou seja, parece que
pode estar tocando nosso sapo. Tudo bem? Aí está. É o mais próximo
possível de nossa versão em
três D. Em relação aos nossos dois D, então temos nossos pobres
spinners prontos. Temos nossa rocha que tem nossa área três D e
uma forma de colisão, então podemos detectá-la quando se
trata de esmagar nosso sapo e Temos nossos veículos configurados. Novamente, se você tiver
outros veículos, vá por todos os meios, traga-os, dê uma olhada neles,
use-os, configure outros diferentes
para direções diferentes. E
nos vemos na próxima. E o que
faremos a seguir? Depois desses veículos, damos uma
olhada na
morte de resposta de nosso jogador. Então, a seguir, vamos
esmagar nosso sapo.
52. Morte e reaparecimento do jogador: Tudo bem, vamos fazer com que
nosso jogador morra e reapareça, tudo Vamos
até nosso script,
e podemos seguir em frente e conectar nosso sinal
para nosso caminhão agora,
nosso sinal será
conectado por meio de script,
novamente, mantenha-o como TD. Porém, normalmente, você sempre
pode entrar,
selecionar sua área, ir até a guia não
na parte superior e ir em frente, descer e dar uma olhada no sinal que
deseja conectar. Mas é bom que
você saiba como
conectá-los por meio de código, só porque, no futuro, você provavelmente terá que
lidar com a criação seus próprios sinais em algum momento, e então terá
que conectá-los, e é melhor se
tudo estiver em um só lugar, como dentro do código a ser
examinado, especialmente se outra pessoa precisar examinar seu código ou talvez você precise volte e veja seu
código no futuro. Mas vamos em frente. Vamos
fazer com que nossos nós obtenham nossa área três D. E vamos conectar o sinal
inserido pelo corpo, o corpo inserido pelo ponto. Conecte-se e nos conectaremos
a um chamável. E, assim como em Tutti, vamos
chamá-lo de player hit Isso tem um corpo. Vamos
criar um nodo apertado. Esqueci o E no final
da palavra chamável. Lá vamos nós. Então, tivemos um pequeno erro
de ortografia. Não tem problema. Tudo bem, então devemos estar em uma situação muito familiar
agora , assim como quando o
criamos em dois D. Então, vamos verificar se o jogador. Agora, novamente, mantenha minhas
maiúsculas em minúsculas. Se eu olhar para o meu
principal, vejo o jogador. Eu escrevi aqui
com P maiúsculo. Então se o nome do jogador e do corpo Eu diria que, se body dot tiver um método e o nome
na forma de uma string, vamos chamá-lo de morte,
assim como anteriormente. E vamos dizer body dot death, então vamos chamá-lo.
E lá vamos nós. Até agora, esse lado é exatamente
o mesmo que em dois D, exceto que usamos três D
em vez de dois D para a área. Todo o resto é idêntico. Tudo bem, agora nosso player, não
temos essa função de
profundidade. Não existe, então
nunca será chamado. Então, vamos
ligar para nós. E tudo o que vai
acontecer é que precisamos
desativar a forma que foi usada para colidir
com o caminhão E então certifique-se de
que está voltado para a direção certa ou um
pouco sapo, caso você
esteja usando
um modelo de três D e depois reapareça em uma posição
diferente Então, vamos em frente
e podemos fazer isso. Então, nosso jogador, precisamos
abrir essa cena e dar ao nosso jogador
uma forma de colisão Que nos livremos
desse triângulo de advertência que nosso jogador
teve todo esse tempo. Nossa forma de colisão será uma caixa para você. Talvez você queira usar
uma forma diferente. Talvez você queira ir com
uma caixa. Depende de você. Posso vir aqui e isso para caber no tamanho perfeito. Agora que nosso jogador
tem uma ficha de colisão, ele pode ser detectado ao
ser atropelado pelo caminhão E quando somos
atropelados pelo caminhão, queremos chamar nossa função
que chamamos de morte. E na morte, queremos
definir nossa rotação, assim como fazemos quando subimos, então vou definir
minha rotação para zero. Agora, se seu modelo estiver voltado
na direção oposta
, obviamente sua subida
seria 180 e sua descida, seria ajustada para
zero em seu movimento, e isso seria
refletido em profundidade. Então, seja qual for o seu
desejo, é o mesmo grau em que você está se
dedicando à morte. Queremos desativar
nossa forma de colisão para que só possamos
ser atingidos uma vez Tudo bem Vamos continuar
e fazer a chamada adiada Então, vamos adiar nossa
forma de colisão e nossa chamada. E isso é muita
coisa pela qual passar. Vou começar a
digitar a configuração desativada. O segundo argumento será verdadeiro porque é isso que
queremos definir,
queremos definir como desativado como verdadeiro. Tudo bem A próxima coisa que faremos
, se bem me lembro, foi subir e criar
nossos estados de vida e morte. Adicionei isso a isso. Então,
vamos seguir em frente e
criar nossos estados
até que tenhamos nosso estado Enum, e tivéssemos vivos e mortos, e mais tarde,
adicionamos outro Vamos criar outra variável
aqui chamada estado atual. E o tipo que
vamos declarar é um estado. Tudo bem Agora, podemos seguir em frente e definir estado
atual de nossa morte. Digamos que o
estado atual seja igual, certo? Cão estadual morto. E vamos continuar e
configurar nosso respawn. Então, o funk respawn. E assim, vamos definir
nossa forma de colisão e nosso estado atual Tudo bem Então, queremos
fazer isso, vamos movê-lo primeiro. Diremos que definido como desativado
, está definido como falso. Obviamente, nosso estado
mudará de morto para vivo, e precisamos realmente
mudar nossa posição aqui. Então, para isso, precisamos obter
uma posição de jogador aqui. Vou adicionar um novo nó. Você já viu tudo isso antes. Podemos seguir em frente e usar marcador a nó, o que
você quiser Vou usar
o marcador três D. E vamos ver qual é a
minha posição aqui? Um, um, 15, então
vou colocar a mesma
coisa no meu marcador, então vou desovar no mesmo
lugar em que estou começando Um, 115. Aqui vamos nós. Então, onde eu começo no início
do meu jogo é onde eu deveria começar
quando eu renascer. E vamos
chamá-lo de player, spawn, location. E vamos definir nossa posição. Ponto próprio. A posição é igual e
precisamos fazer com que o
Node de um jogador apareça Agora lembre-se, nosso script
está no nosso player, então temos que subir um. Então, podemos escrever Get parent
ou podemos apenas dizer get node. E para o caminho aqui, podemos pontuar e barra
como uma forma abreviada de G parent e, em seguida,
digitar o node aqui, jogador Bond Jason
Got position Got Tudo bem, agora, quando formos
atropelados por um caminhão, devemos ser capazes de responder E espero que esse
caminhão não esteja muito perto. E opa. Temos
uma coisa aqui. Na verdade,
não teremos uma resposta aqui em nosso processo. Precisamos mudar
isso, então dizemos que precisamos verificar se
nossa rocha está viva. Quase esqueci isso.
E em dois D, também
tínhamos um cronômetro em nosso
respawn, mas tudo Então, vamos em frente e
acabemos. Então, estamos prontos lá em cima. Eu digo que se o estado atual
é igual ao estado ponto vivo. Nós podemos fazer nosso movimento.
LFOs que é um W, estado atual
de LF é igual
ao estado de ponto morto. Ponto R. Tudo bem Agora
vamos tentar. Tudo bem, podemos seguir em
frente, para a esquerda e para a direita. E sim, aquele
caminhão está muito perto. Ok, então parece que
vou ter que remover um
dos meus patrocinadores ou
ajustá-lo um pouco. Mas acho que, por mim mesma, vou me
livrar completamente disso. Vou apenas removê-lo.
Isso não é um problema. E agora devemos estar
bem. Devemos ter um pouco de espaço
na parte superior e inferior. Meu sapo não
vai ficar mole, e você pode ver pela aparência estávamos nos Assim que fomos
atropelados por um caminhão, respondemos. Esperança. Ok, então não temos
muito espaço de manobra, então talvez eu queira entrar e
ajustar minhas
caixas de colisão em meus Hyloiss vai ser
bem difícil, apimentado com essa boca cheia Mas isso só acontece depois
de fazer alguns ajustes. Eu vou seguir em frente
e fazer isso. Não vou manter
vocês aqui. Mas lá vamos nós.
Temos um Death and Respan trabalhando aqui
na parte rodoviária E a próxima coisa é que podemos dar uma
olhada em morrer na água, criando nossas plataformas de água.
53. Morte por água: Tudo bem, então, assim como
as duas versões D. Vamos determinar se
estamos na água obtendo
o ID do nosso mapa de grade neste caso, porque
estamos
em três D. Era o conjunto de blocos,
o mapa de blocos em dois D. Então, primeiro de tudo, assim como em Tut, vamos
começar com uma
variável pronta, que, novamente, basicamente define a variável dentro
da função pronta Em outras palavras,
essa variável não é cuspida até que o
jogo já esteja em execução E como somos os
jogadores, temos que subir
um até nossos pais e depois
descer para pegar nosso mapa de grade. Então, nós o configuramos para o nó G
e temos nossa barra de pontos, e temos nossa barra de pontos nosso equivalente a Get
parent e grid Map E então descemos
e temos nosso cheque Bell ID aqui embaixo. Função, pronta para usar,
pronta para codificar aqui. E isso vai ser muito
parecido com a nossa versão TD. Agora, para nossa versão TD, tínhamos uma variável para pausa no MAP, que era nossa grade. A
tradução do Maps seria gridmp dot Local TMAP
e esse mapa assumiu Foi preciso, desculpe, uma discussão. E essa foi a
posição do nosso jogador que ultrapassamos. E também tínhamos uma
variável para ID, que era equivalente ao
nosso mapa de grade. No entanto, vendemos o ID da fonte. Mas, em vez do ID de origem, o que estamos fazendo
é comprar um item de
venda quando
lidamos com mapas de grade. E isso não
requer dois parâmetros. Eu só tenho uma,
e essa
será a nossa posição no mapa. Portanto, não precisamos passar
nenhuma camada nem nada. Agora, no final, é
isso, e isso
é tudo o que precisávamos, e diríamos se nosso ID, no nosso caso, fosse igual a
três, porque três era o ID do
mapa de blocos, o conjunto de blocos. Nesse caso, se eu
prosseguir e olhar meu mapa de grade e
abrir a biblioteca de malha, posso ver que a água está
associada à ID aqui. Então, eu vou dizer
se ID é igual a um, e é aqui que ligaríamos E então verificamos a identificação do celular praticamente toda
vez que nos movemos. Boom, mas um boom. Mas um boom. E vou retirá-lo
do processo por enquanto, para não
enviarmos spam Agora, vamos executá-lo
e veremos um problema. Veja, nada está realmente
acontecendo aqui, ok? Mas não estamos imprimindo nada. Basta colocar uma mentira lá. E
quando eu piso na água, você esperava que eu
morresse aqui, e eu morro. Agora, é porque
eu esqueci de fazer isso? Então eu esqueci de reiniciar
meu player aqui, e é por isso que funcionou Agora, normalmente, seu
jogador, novamente, deve estar acima do mapa ,
e você verá aqui,
vou apressar que não funciona. E a razão para
isso é que, bem, a razão pela qual
você viu que meu jogador estava afundado lá embaixo, estamos verificando muito alto. Então, na posição que
estamos verificando, é zero. Então, na verdade, precisamos passar em uma posição mais baixa do
que a que estamos usando aqui. Então, acabei de criar uma
nova variável chamada cur pause para nossa posição
atual E este será um vetor três, especificamente,
ele quer um três I. Então, vamos seguir em
frente e passar isso para dentro. E para isso, usaremos
apenas nossa
autodeposição X ou nosso Y, podemos usar menos um Isso será baixo o suficiente, e autodeposição Z para
o terceiro argumento Então, em vez de passar em nossa posição
própria para o mapa local, passamos na pausa atual,
à direita, na curva Dessa forma, podemos
obter nossa posição, mas um quarteirão abaixo, o que deve
nos dar a localização de onde está nosso ID de celular, certo? Onde está o mapa da grade. Então, agora, quando atingimos a
água, aí está. Vamos em frente e morremos, e nosso respawn não
estraga tudo porque estamos verificando um bloco
abaixo do jogador Tudo bem. Então, temos nossa profundidade de
água toda configurada agora. Tudo o que precisamos fazer
é colocar nossas
plataformas aquáticas em nossa zona de vento, configurar nosso sistema de pontuação
e o I.
Em seguida, se quisermos,
talvez possamos
configurar uma câmera alternativa que fique atrás do sapo para que
tenhamos
uma experiência mais gananciosa. Tudo bem. Mas é isso. Temos
nossa profundidade de água funcionando. Então você pode ver que é basicamente
o mesmo, exceto nesta linha, onde só temos que
marcar um bloco
abaixo do nosso player. Mas a maior parte disso,
novamente, é a mesma coisa. Então, se você gosta de trabalhar em dois D e é solicitado a
fazer algo em três D, você pode ver que, até agora, já
fizemos muita coisa aqui E mantendo as coisas
basicamente da mesma forma que faríamos quando
fizemos isso em dois D, você pode ver que a maioria de
tudo é transferido. Tivemos que escrever nossa posição. Escrevemos nossa posição em Little different e nossa rotação. Eu fui escrito um
pouco diferente, mas quero dizer,
ainda faz sentido. Não é muito diferente. E tivemos que adicionar uma linha aqui para marcar uma abaixo nosso player, em vez da linha completa do
nosso player. Portanto, se você prefere
dois D e precisa fazer algo em três
D, não se sinta intimidado Quase tudo o que você
aprendeu em dois D será transferido para três D. Só
precisamos lembrar que, ao definir
a posição atual aqui, temos essa terceira
dimensão para trabalhar com X, Y e Z ou X Y e Z. Tudo bem. Então,
isso vai funcionar a partir daqui. Em seguida, vamos
entrar nas plataformas.
54. Plataformas de água: Tudo bem, vamos
configurar todas as nossas plataformas. Agora, fui em frente e
criei meu registro aqui. É apenas um cilindro com um material na instância
da malha,
e eu pintei o
albedo, o marrom Também tem uma área três D com
uma forma de colisão, e essa forma de colisão
é apenas uma forma de caixa, e eu estou apenas cobrindo a parte
central dela para
que não haja problemas quando se
trata de pular dela, e o jogo de alguma forma pensa
que talvez ainda estejamos
nela só porque
mal estamos tocando Então eu escolhi
a vantagem média. Quando pulamos nela, devemos
estar no meio de qualquer maneira. Então, vou seguir em frente
e fazer isso. E eu também
conectei dois sinais, o sinal de entrada e
saída do corpo , ao
meu script de registro E, assim como
nas duas versões D, temos uma direção de exportação E em nosso processo, temos apenas o ponto de posição X
mais igual a uma vez Delta. E se formos dar uma
olhada nisso em três D, você pode ver com a escala, lembre-se dos
troncos porque tem que coincidir com todos os nossos blocos. Eu o escalei para uma escala
de dois em vez de um. E você verá em qual
posição o ponto X. Veja a distância
com esse ponto Eu acredito que um é o que
estamos usando, correto? Sim. 10 vezes Delta. Essa é a rapidez com que nossos
registros estão se movendo. Você pode mudar isso se
quiser fazer duas vezes Delta, três vezes Delta, o que achar necessário para você. Para mim, vou deixá-lo ligado
uma vez no Delta por
enquanto, apenas para testar. E então, assim como meus caminhões, posso voltar e
ajustar as coisas mais tarde Tudo bem. Então, se você quiser
ir em frente e parar um pouco, certifique-se de que seus registros foram criados. Você tem suas áreas configuradas. E se você quiser, vá
em frente e
coloque perfeitamente cinco
deles desse jeito. Vá em frente. Você pode. Vá em frente e pause o vídeo,
vá em frente e faça isso E quando você estiver pronto,
vamos continuar,
e terminaremos a parte real da
plataforma,
porque, como você vê,
se pularmos nela, nada acontece, nós meio morremos na água Mas, como eu disse, o
primeiro na seção Tut, é meio estranho,
considerando que somos um sapo, não
deveríamos morrer na água, não deveríamos estar nos
afogando Mas lá vamos nós.
Temos nossos registros. Temos nosso sapo,
agora a pergunta é: como vamos
superá-lo Bem, vamos encarar isso como nossos dois D, certo? Nosso corpo entrou e saiu
do nosso player,
temos nossa nova plataforma de três
variáveis, que é um booleano, definido como
falso por padrão plataforma atual, que é um corpo de caractere três D
desta vez em vez de dois D, definida como nula por padrão, e uma direção da plataforma, que é um int, um inteiro, e isso é definido apenas como
um por padrão, e essa
nos colocará indo para a direita Tudo bem. Então, aqui, não precisamos
fazer nada necessariamente
no momento. Embora pudéssemos seguir em frente
e Y, vamos em frente. Vou definir nosso
ID aqui ou não ID,
mas nosso segundo parâmetro, nossa segunda condição, em vez disso, se ID for igual a um. Então, se estamos em um bloco de água e nossa plataforma atual
é igual a nula, certo? Então, basicamente,
não estamos na plataforma. Na verdade, mudamos isso. Usamos plataformas em desuso. Então, dissemos que a plataforma era falsa. Então, essa é apenas uma maneira mais curta
de fazer tudo aqui. Então, se estivermos em um bloco de água e não estivermos em uma
plataforma, morreremos. Bem, como sabemos quando
estamos na plataforma? Bem, quando entramos em nosso registro, que eu deveria renomear,
é apenas uma plataforma Faça GD em vez de registrar. Então, me dê
um momento lá. Tudo bem? Tudo
parece funcionar, e eu fui em frente e
renomeei a plataforma Dessa forma, se eu quiser
criar pequenos discos para representar minhas tartarugas,
que não são sapos , posso continuar e continuar
usando o Então, o que estamos fazendo é que, enquanto
estávamos indo até aqui, descobrimos que uma plataforma é falsa morreremos se estivermos na água. Então, temos que mudar a
plataforma para True. Então, uma vez que nosso Brogi
entre nessa área, vamos seguir em frente e transformar
a plataforma em realidade Opa, eu matei aquela parte. É uma plataforma corporal. Então, você quer acessar
a variável de plataforma que está no corpo que a toca,
que, obviamente, será nossa jogadora E, novamente, se você quiser
ser mais cuidadoso aqui, pode dizer player no nome do ponto do
corpo e marcar
tudo com a tecla Tab . Isso
ficaria bem aqui. Para a plataforma incorporada é
igual a verdade. Tudo bem? E o que mais
temos? Bem, vamos ver. Plataforma atual. Bem, se olharmos para nossas duas versões D se nosso sapo estiver vivo durante
nossa seção de processo
, também verificaremos se há plataformas de
curva I diferentes de
null E então movemos
nosso sapo, certo? Então, mudaríamos nossa
posição, ponto X é igual, e então tínhamos um
pouco de matemática aqui Nós tínhamos nossa direção de plataforma. Multiplicamos nossa velocidade, que
vou
usar apenas uma para que
possamos combinar nossos registros, e podemos voltar
e alterá-la mais tarde. E então multiplicamos
isso por Delta. Está bem? Então, se nossa
plataforma atual não for nula, quero dizer, devemos estar
em uma plataforma, certo? Então vamos nos mudar. Devemos nos mover
com a plataforma. Está bem? Então, vamos entrar em nosso diário e, quando
o corpo entrar, vamos dizer
body dot her platform. Certifique-se de que eu
escrevi isso corretamente. Por plataforma, sim. E o que tornou isso igual a
si mesmo. Agora, lembre-se do seu registro. Seu registro aqui deve ser corpo de
um personagem três D. Vou prosseguir e
reabrir o meu aqui Eu não mudei nada. Interessante. Deve ser
necessário reiniciar o projeto. Meu registro é o
corpo de um personagem três D. E, claro, o íon vê
o tronco e a área três D, que está despertando nossa lágrima Ok, então vamos ver o que
acontece. É só nosso diário. Vamos seguir em frente e jogar
o jogo de pneus aqui. Vamos correr e pegar esses
troncos, vemos que eles estão se movendo, subimos e morremos. Bem,
isso é interessante. Por que isso aconteceu? Bem, isso aconteceu porque,
na verdade, estamos nos movendo muito rápido. Oh, esses são os dois D
que estão ativos por algum motivo. Sim, desça, e isso é porque nossa morte
está acontecendo muito rápido. Precisamos fazer uma
pequena pausa para
que haja tempo suficiente para que
coisas como nossa plataforma, que mudem no meio Então, basta esperar,
pegar a árvore, um ótimo cronômetro e 0,2
deve ser tudo o que precisamos Sei que usamos 0,1 em dois D, mas foi 0,1 que tentei
e não foi suficiente. Então, vamos usar 0,2. E se prosseguirmos
e tentarmos isso agora, devemos ser capazes de fazer Ooh.
O que aconteceu lá? Oh, é porque eu
enviei a posição ponto X igual à intenção a mais é igual Aqui vamos nós. Agora
vamos entrar neste registro. Eu posso ir em frente e
atravessá-los. Fantástico. E
assim que eu descer, bem, se eu pular
neste lugar aqui, Oh. Bem, não estamos seguros porque nunca
calculamos
sair da plataforma. Isso significa que também estamos sempre movendo
permanentemente para a direita, então vamos resolver isso. Quando saímos da plataforma, obviamente
precisamos
revertê-los. Então, plataformas falsas e
nossa plataforma atual, ela
voltará a ser nula E só uma mudança para
resolver essa corrida. Ah. E acabamos de morrer lá. A, bem, isso não é. Isso não é ótimo. Vamos descobrir o porquê. Bem, se você se lembra,
nas duas versões D, tínhamos Bem, mais duas
coisas que faltavam nisso. O primeiro, quando
nosso corpo entra, na verdade
tínhamos outro cronômetro, que está configurado para
0,1, o que é bom Agora, quando entramos, subimos. Lá vamos nós. E podemos
atravessar sem sermos mortos. E assim que
pulamos na água, que seria nossa
zona de vento, morremos. Pule para o outro lado e,
na água, morreremos. E isso ainda acontece quando
somos atropelados por nossos caminhões. Fantástico. Então, tudo
ainda está funcionando bem. Essa camada é suficiente para corrigir aquele
pequeno bug que temos Ótimo. E a única coisa que
nos resta é que
acredito que criamos uma função para definir a direção aqui. Então, isso
dependeria muito de se estamos
indo para a esquerda ou para a direita, o que estamos definindo como ótimo. E essa seria a direção pela
qual podemos passar. O que para este registro é zero agora,
mas seria um. E nesse caso,
em nosso script de player, podemos seguir em frente e
criar essa função, direção
funet, e você pega um ID,
que é um int, e você só tem a
direção da nossa plataforma igual a ID, nós a chamamos de IDA,
acho que a chamamos de DR, então vamos mantê-la lá
DR. E então, em nossa plataforma, podemos seguir em frente e definir a direção
do corpo e passar podemos seguir em frente e
criar essa função, direção
funet,
e você pega um ID,
que é um int, e você só
tem a
direção da nossa plataforma igual a ID,
nós a chamamos de IDA,
acho que a chamamos de DR,
então vamos mantê-la lá
DR. E então, em nossa plataforma,
podemos seguir em frente e definir a direção
do corpo e passar em nosso direção. Tudo bem, então agora, não
importaria em nosso jogo se viéssemos aqui e mudássemos a direção da plataforma para, aí está, 8.967 Não faria nenhuma
diferença, porque isso será definido quando
entrarmos em um registro real aqui. Lá vamos nós. Então, se nossos troncos estavam indo
na outra direção, então vamos para a
direita e continuamos terminando. Como isso continua acontecendo?
Então vamos lá. Então, se
definirmos isso como menos um, isso também seria menos um
na nossa velocidade aqui. Então, poderíamos
mudar isso completamente e dizer direção vezes Delta
no momento, mas podemos ver que o log está se movendo na direção
oposta. E a única razão é que
alteramos um registro especificamente. Por exemplo, podemos entrar aqui e definir esse como
negativo também. Agora temos dois troncos indo
na outra direção.
Bem, nós deveríamos. Por que essa não mudou? Eu consegui o
registro certo. Isso é negativo. Mamãe. Hmm. Vamos ter que
ir em frente e ler, veja. Isso é bom. Vimos que os troncos estão se movendo
completamente
na outra direção? E vamos definir isso para o nosso registro principal aqui. E podemos ver que eles estão
indo nessa direção, subimos e estamos nos
movendo nessa direção. Tudo bem, então tudo o que precisamos
agora é que, se
você quiser, crie pequenos
discos em uma escala de dois para representar seus
pequenos obstáculos ou
lírios ou o que você
quiser fazer E, basicamente, basta usar
esse script e definir a direção. Aí está. Essas são nossas pequenas plataformas
que estão lá. Para nossos registros. E esses patrocinadores,
podemos seguir em frente. Basta ligar para definir
essas posições aqui. Então lembre-se, vamos
alternar em cada lado. Esquerda. E depois para a direita. Tudo bem? Agora, tudo o que
precisamos é de um reprodutor. Configurar. E para isso, vamos ver. Podemos usar nossos scripts de
spinner? Bem, esses são veículos,
então realmente não
faria sentido em termos
desse código. Mas o resto,
parece que faria sentido. É isso que estamos nomeando
aqui, direção certa. Sim. Então, poderíamos usar o mesmo código giratório e simplesmente criar mais
desses spinners E isso é perfeito. Acho que fazemos isso. Vá em frente
e crie esse gerador. É SponnorFive,
limpe seu veículo, encontre meu diário, traga isso E talvez tenhamos que configurar, vou
executar isso bem rápido. Acho que também temos que definir a
rotação do nosso registro. Onde está meu registro? Estou
meio confuso aqui. Sim, ok, então aí está o registro. Está ficando completamente vertical. Então, precisaríamos configurar isso. Tudo bem, então
vamos criar
um novo script e depois um gerador de
plataforma,
já que temos que ajustar
algumas coisas Então, seguimos em frente e
basicamente temos as mesmas
coisas aqui, embora tenhamos plataforma e plataforma de geração, instância da plataforma
PI Oh, isso parece bom.
Deixe-me ir até meu patrocinador e ver
a cena do registro Novamente, plataforma. Yo. E agora temos que dar
uma olhada em nossos registros aqui. Qual é a rotação
que eu configurei? Y é definido como menos nove. Está bem? Então, temos que ter
certeza de definir isso. Então,
digamos rotação de pontos pi. Podemos fazer isso, certo. É uma rotação R Y
igual a menos 90. E vamos ver se
esse patrocinador está trabalhando. Lembre-se daquele esponjista aqui embaixo. Matt, em um próximo, digite int. Então eu acabei de ter a ideia. Agora, primeiro de tudo, eu errei
completamente. Eu estava tentando carregar
a cena de registro errada. Eu estava tentando carregar a partir
dos dois D em vez dos três D, então isso é parte do motivo pelo qual eu
estava recebendo alguns erros. Mas então, em nossa plataforma aqui, podemos seguir em frente e dentro do nosso pronto aqui, ir em frente e definir nossos graus de
rotação aqui. Se você quisesse fazer
isso, você poderia. Espero que isso
não afete nenhuma
das outras plataformas
que você criar posteriormente Mas, muito bem, evite isso. Na verdade, acho
que eu realmente não
evitaria isso porque vai
surgir a mesma situação. Ele vai aparecer
e ser girado. Eu só vou seguir
em frente e perder um. Vou colocá-lo aqui no meu lugar, então estamos pegando plataforma de BI instantânea e
definindo os graus de rotação, e eu a configurando
para um vetor três, que são
apenas três dados, certo? X, Y e Z, ou em cores, seria como RGB, certo? Então zero, menos 90 e zero, e isso agora o posiciona corretamente na
orientação, eu diria. Então, agora só precisamos fazer com que nossos registros se movam na direção
correta. Eu, bem como o poço, a direção
correta, bem
como a posição do patrocinador Então, para isso,
vou apenas dar uma
olhada em onde meus registros estão definidos. Por exemplo, essa, a transformação aqui, menos
29 e menos um. Isso é bom o suficiente.
Posição, menos 29 e menos um. Agora esse registro, eu posso
excluir completamente e podemos ter outro patrocinador
com essa transformação, que seria menos cinco
e menos 29 também Isso é menos 29 e
menos cinco. Aqui vamos nós. Agora, esse registro deve
poder ser excluído, e ainda devemos ter
nossos dois patrocinadores
do registro à direita,
indo para a esquerda Exceto que minha direção está errada,
então, na verdade, estamos saindo da tela continuamente para a esquerda. Ok, então vamos em frente e você não precisa
fazer essa parte, é
claro, porque
se você estiver criando plataformas
diferentes, suas tartarugas vão para a esquerda,
seus troncos vão seus troncos vão Então, isso vai
ficar perfeitamente bem. Mas como vou usar os registros aqui em vez de criar várias
coisas agora, vou criar
uma variável para orientação. Por padrão,
vamos definir isso como um. E quando eu os gerar, vou dizer que
é diconolrecon Eu configurei esses dois para geradores de menos
um bloqueio, eles devem ir para o agora mesmo Então, como desova ,
espero que eles estejam
desovando aqui. espero que eles estejam
desovando aqui Aí estão eles. Não. Tudo bem, então onde estão meus registros? Não, o registro está aqui. A direção é menos um, então deve estar indo
na outra direção. Oh, eu coloquei os registros dessa forma. Opa, isso foi um erro
meu na época. E é melhor defini-los todos em um negativo
por padrão, então. E temos esse tempo de
plataforma aqui, o que é um pouco
chato, mas aí Meus registros estão indo nessa direção. E eu posso simplesmente colocar três do outro lado e ter menos
um como direção. Então eu vou fazer isso mano. Tudo bem, então eu coloquei meus patrocinadores do outro lado, para que possamos seguir em frente e
rodar o jogo, aparecer Estamos todos bem. E esperamos que
esses troncos apareçam e veremos se podemos
pular até o outro lado, mesmo morrendo
quando chegarmos
ao lado porque ainda não
temos nossa condição de vento. Então, nesse ritmo, sim, acho que gostaria de acelerar
meus registros agora, com certeza. E eu tenho que redefinir
essas direções para três, quatro, cinco. Eu acredito que três, quatro, cinco, isso é um positivo. To deveria ser negativo agora. Incrível. E
eu disse que queria mudar o roteiro, digamos, horários de direção. Vamos fazer três. Vamos ver o quão rápido isso é muito rápido, vamos reduzir para dois. A parte superior do outro lado. Vamos ver
o que três nos darão. Registros. Onde você está?
Ok, três não é tão ruim. Podemos ir em frente
e subir lá. E agora, meu sapo também não está se movendo,
não está se
movendo rápido Estou meio que pulando por
aqui. Mantenha-se atualizado. Temos que consertar isso. Aqui vamos nós. Conseguiríamos atravessar,
e isso seria uma vitória teórica.
Então, no meu player. Vou mudar esse um
, dois ou três, porque
acho que vou
ficar com três.
Experimente mais uma vez. Só para ter certeza de
que tudo está indo bem. Traga-me meu diário. Aqui vamos nós. E agora nossa velocidade aumenta. Eu posso pular para o próximo tronco. Cocô de cocô. Aqui vamos nós. Tudo bem, então podemos atravessar
até o outro lado. Excelente. E tudo está dando certo. Temos nossas plataformas funcionando, e agora tudo o que você precisa
fazer se quiser
criar suas tartarugas,
faça a mesma coisa Você pode simplesmente criar sua pequena
lança ao longo dos anos, certo? Use seus pequenos cilindros e aperte-os até
formar pequenos discos, e então tenha uma
área exatamente como essa,
apenas o ponto que cobre o
meio E assim, você terá uma nova
plataforma totalmente configurada. Tudo bem, então isso vale
para nossas plataformas de água. E a seguir, acredito que
temos nosso winspace.
55. Correção de vazamento de memória: Tudo bem Então, antes de
entrarmos em nossa condição de vento, agora que
nossos veículos e plataformas estão
prontos, vamos
voltar novamente a esse vazamento de memória, onde temos
plataformas e veículos infinitos que estão constantemente se movendo no vazio e constantemente ocupando Vamos nos
livrar deles quando
não precisarmos mais deles. Tudo bem, então
vamos abrir nosso script de plataforma e nosso script de
caminhão ou veículo. E vamos
resolver isso
exatamente da mesma maneira, muito simples. Dentro do nosso processo
aqui para nosso caminhão, vamos seguir em frente e
vamos fazer isso se nosso
ponto X de posição global for maior que 436 ou qualquer outra largura, certo? Por mais larga que seja sua janela, direi que mais 100 é
o espaço que estamos dando ou a posição global, ponto
X menor que menos 100, sem pontos
próprios, e
faremos
a mesma coisa com
nossas plataformas. E vamos executar isso e ver se temos algum problema aqui. Ok. Não estamos
encontrando nenhum. E vamos ver em que
ponto eles desovam em nós? Ok. Agora, lembre-se de que 100 de desconto
será muito diferente do que em dois D. Então, provavelmente
deveríamos
recusar isso de 100 para trabalhar com Então, vamos tentar dez. Então, digamos 346. Temos uma plataforma testada e
feia lá. Mas vamos copiar
isso para o nosso caminhão. Isso mesmo. Veja nossos
caminhões surgindo. Por outro lado,
isso não é espaço suficiente. Nós meio que podemos ver nossos caminhões e plataformas
falhando lá fora. Portanto, eles claramente precisam de
mais espaço do que isso para menos dez aqui. Então, vamos com menos 20 e ver se isso é espaço
suficiente para eles. Não é suficiente para nossos caminhões. Parece que não é
suficiente para plataformas, mas não. Então, agora estamos
apenas ligando. Então, esses 100 negativos pareciam
meio ridículos, no entanto? Vamos tentar menos 50. Nós vamos
meio que discar isso. Veja se nossas plataformas
são capazes de aparecer. E nossos caminhões
vão mais rápido, no entanto. Então, vamos ver se eles podem
desaparecer na tela aqui. Se abrirmos isso para que
possamos ver o exterior. Ok, então os caminhões
percorrem uma distância mais justa. Veja, eles desaparecem por
aqui. É aqui que
nossas plataformas também
deveriam estar desaparecendo E do outro lado, eles simplesmente continuam indo, indo
e indo. Ok, então vamos adicionar 50 que
estamos desse lado, 346. Como está 336? 336
precisa estar bem Os caminhões desaparecerão? Eles desaparecerão em algum momento, isso é o que importa. Mas se você quiser
entrar e
discar desse lado para baixo agora,
certamente, vá em frente e faça isso. Mas o importante é que excluamos nossos
objetos, então estamos liberando a memória
com os objetos que não
precisamos mais Então, com isso, corrigimos o problema de memória que
tínhamos nas duas versões D, que agora
tínhamos três versões d. Eu não esqueci disso. Eu estava apenas adiando
e estamos colocando nossos componentes
principais primeiro. Tudo bem, vamos passar
para essa única condição.
56. Ganhe espaço: Tudo bem, vamos
criar o espaço eólico para o nosso jogador. Eu meio que limpo todas
essas áreas à medida que avançamos. Então, vamos precisar do
nosso script de jogador, e eu tenho um winspace
aqui que eu criei É apenas uma área três D, e vou
renomeá-la para ganhar espaço Ele também tem uma
forma de colisão três D que eu adicionei. Seu formato é uma caixa
e, para combinar com todo o resto, atribuímos a ela uma escala de
dois em nossos três eixos. Então, agora devemos nos encaixar em
qualquer lugar em que o colocarmos. Vamos
adicionar um script a isso,
nosso script de espaço eólico. E isso também terá alguns sinais
conectados a ele. Será
nosso corpo inserido. E eu acredito que isso é realmente tudo o
que vamos precisar aqui. E em nosso jogador, foi aqui
que adicionamos nosso novo estado, nosso estado de vitória, que significa que temos outra condição da
LSF aqui embaixo, estado atual
da LF é igual ao estado,
vitória e, assim, faríamos nosso respot
e depois
definiríamos a zona de vitória, acredito que é assim que Vá em frente e adicione
nossa nova variável, nossa zona de vitórias e ganhos. Isso é um touro prestes
a cair por padrão. E vamos ver, em nossa morte, dizemos que se o ID é um
, a plataforma é falsa e a zona de vento é falsa,
então não estamos vencendo. Então, não estamos no espaço eólico. Não estamos na plataforma e estamos na água, então
acabamos chamando isso de morte. Excelente. E vamos ver. Em
nosso espaço eólico, chamamos duas coisas. Precisamos obter nossa zona de vento e pontos
corporais. É igual a verdadeiro. E então nosso segundo ponto é definir o ponto
do corpo do estado atual, estado
atual é igual a vitória estatística e garantir que eu digite corretamente Estado atual, acredito que sim, mas vou
copiar e colar apenas salvar o estado do identificador não
declarado como escopo atual, certo? Body Stay Doot Win. Lá vamos nós. E, por enquanto, isso deveria fazer o que
realmente não deveria fazer nada. Então, em nossa morte, digamos que você vai
dizer “impresso morto”. Então, vamos garantir que tudo esteja sendo acionado
da maneira que deveria Responder Imprima
a palavra responder. E em nosso winspace Bem, também
precisamos colocar a
zona de vento de volta em Walls Mas também imprima o Win. E podemos ir em frente e testá-lo. Podemos ir para nossa cena principal agora. Main, por exemplo, com esse
pequeno ícone de corrente, lembra? E vá em frente e faça uma busca pelo seu
winspace. Traga-o aqui. Ganchos. Aqui está o meu. Faça backup. Serão dois
espaços eólicos para essas zonas. Para caber em tudo. Incrível. E agora nós apenas o
duplicamos. Segundo slot. E eu
vou continuar até o fim. Preencha todas as minhas zonas. Tudo bem. Então, eu posicionei todos os meus pequenos espaços
eólicos Vamos verificar se nosso texto está sendo impresso corretamente
em nosso console. Deixe-me consertar esse jogo agora. Estou de volta a uma coisa pequena. Aqui vamos nós. Tudo bem,
então vamos ver Passamos por um carro.
Morremos e respondemos. Excelente. Ok,
pulamos na água, morremos
e respondemos Nós pulamos no tronco. Estamos bem. Pad, e estamos bem. Tartaruga, tronco, almofada, tronco. E nós entramos. Conseguimos uma vitória. Eu vejo uma vitória, um renascimento, um
morto, um renascimento. Isso não soa
como deveria ser. Vamos voltar para cima. Vá em frente e faça uma pausa aqui. Para que eu possa esclarecer o
que está acontecendo lá. E continue com isso.
S. Ok, até agora tudo bem. Nós entramos. Temos uma vitória, um respawn, um morto
e um Ok, então isso não é ótimo. Isso significa que temos
um bug lá dentro. Deveríamos ter conseguido uma
vitória e um renascimento. Não deveríamos ter
morrido. Acho que nosso respawn
ainda não aconteceu. Isso não mudou nossa
posição nem nada disso. Devemos definir nossa colisão primeiro. Sim. Relembrando a morte. Então, a única coisa que
consigo pensar no momento
é possivelmente algo aqui. Mas vamos tentar
desabilitar isso mais cedo.
Veja se isso funciona. Nós vamos descobrir. Meus
registros, vamos. Essa é provavelmente a única coisa que eu mais
não gosto nos testes Está constantemente fazendo a
mesma coisa repetidamente. E esperamos por um
registro. Lá vai. Quando respawn,
temos um morto e respawn. OK. Então, vou tentar algumas coisas e ver qual
delas resolve o problema. Talvez seja, talvez
eu volte em 2 segundos. E vamos ver onde está
a fonte aqui. Tudo bem, tive que
analisar os dois D versus, ver o que poderíamos ter
feito para resolver isso E eu estava apenas um pouco atrasado aqui no topo da identificação. Tivemos um pequeno cronômetro de 0,1 antes de conseguirmos nossa posição
e tudo mais aqui Então aí está. Não é grande coisa. Mas com isso, você
verá que
agora podemos ir em frente e pular por toda
a tela. Desfrute de ser um pouco sapinho. Vá lá. Traga os troncos. Vamos embora. Aqui vamos nós.
Nós pulamos no tronco. Esperamos por pequenas
tartarugas ou lírios, o que você quiser
que sejam o tronco, o próximo bloco, o tronco
e a zona de vento Aqui vamos nós. Conseguimos uma vitória
e respondemos, sem morte. Oh, eu me deparei com aquele caminhão. E Z, ainda morremos se
pularmos na água. Tudo bem. Então, vamos lá. Agora temos nosso
espaço eólico pronto e a última coisa que devemos fazer. Devo configurar um sistema de pontuação
e nossa cabana novamente. E então teremos nossa versão em
três D totalmente configurada.
57. GUI de partitura e temporizador: Tudo bem, então aqui
vamos configurar a pontuação,
as vidas e
nosso Hud, e isso será muito mais fácil porque podemos reutilizar o HUD que criamos
nas duas versões Então, a principal coisa que
vamos fazer é reutilizar nosso global Em seguida, usamos um pouco
do TD. E teremos
que renomear
parte do nosso caminho aqui, e podemos fazer isso funcionar com as duas versões D e
três versões D, se você quiser Mas basicamente vamos
usar o mesmo script. Portanto, se você tiver três versões D e duas versões D em
dois projetos diferentes, você pode copiar esse script
e, em seguida, acessar as configurações do projeto e configurá-lo como
um carregamento automático. Tudo Então, para fazer isso
funcionar em três D para global. Agora você percebe que o meu diz
main para o nó raiz da minha cena principal de três D aqui, que é um nó três D,
e em dois D, era um nó dois D. Então,
vou
renomeá-lo para Min porque é assim
que sou chamado, e vou substituí-lo em Update Lives, bem
como na pontuação de atualização Tudo bem. E para o nosso cara, vou passar para
a versão em dois D abri-la novamente. E vou clicar
com o botão direito para não precisar
recriar o Cara novamente, pois será exatamente o mesmo Vou
clicar com o botão direito do mouse e selecionar a opção. Onde está? Salve a ramificação conforme vista. E quando você faz isso, você
deve ter uma opção. Você deve fazer com que essa
tela apareça aqui e
você pode salvá-la. Vou entrar na minha cena de
sapo ou três D
aqui e resalvar a cena de
Gooey Tudo bem. E isso é tudo que
precisamos dos dois D. E, claro, você não precisa
fazer isso. Você pode ir
em frente e recriá-lo. Basta adicionar a camada de tela, o progresso da textura, os rótulos
e tudo mais. Se é isso que você queria fazer. Vou adicionar isso
agora
, adicionar minha cena de Guy. E observe que
não podemos ver isso aqui. Se você estiver recriando
seu Guy do zero, você terá que
clicar na opção de dois D aqui, dar uma olhada e recriá-la dessa forma, porque a camada de tela é um objeto de
dois D, Algo renderizado
na tela acima de todo o resto, mas é dois D, independentemente de o resto dos
componentes serem dois D ou três Então, se fôssemos
executar isso agora, podemos ver que tudo está no
topo e como deveria estar. Portanto, lembre-se de que, se
você
mesmo estiver criando isso , tenha isso em mente. Se você quiser
recriar isso, talvez
seja necessário
executar o jogo para ter uma boa estimativa
de onde as coisas estão E o bom é que,
se eu quisesse entrar aqui e editar alguns
desses componentes, eu poderia entrar e mover
as coisas,
como você pudesse ver a atualização
ao vivo no jogo. Assim, você sempre pode
ter certeza de que tem as coisas em posição adequada. Vou parar de
rodar o jogo lá. Então, se você recriar o Cara, vou mostrá-lo
aqui novamente. Passe essa camada na parte superior. Aos rótulos do rótulo
e do texto da partitura. Nossa barra de vidas é um progresso de
textura, e temos aquelas texturas de
vidas de Frogger que você pode usar como textura de progresso se abrirmos as texturas
aqui para Temos uma barra de cronômetro, que, novamente, é a mesma coisa É apenas uma barra de
progresso de textura e tem o retângulo
quadrado verde, qualquer um que eu tenha
criado,
apenas para usar como barra aqui apenas para usar como Temos um rótulo que diz apenas hora para que o usuário
saiba o que é, e temos um nó temporizador com o tempo de espera padrão de
uma inicialização automática ativado, e o sinal de tempo limite é conectado ao nosso
cara que Nosso script Guy está
simplesmente no tempo limite. O valor da barra do cronômetro
é menos igual a um. Então, isso fará com que nossa barra caia
continuamente. E então, se o valor for zero, colocamos nosso
nó de jogador chamado morte nele
e, em seguida, redefinimos a barra para 30. Tudo bem. Espero que, com isso, você tenha tido tempo suficiente para salvar sua interface gráfica enquanto estava em cena,
trazê-la de volta ou recriá-la E vou observar aqui
que na barra Lives, nosso modo de filme é da esquerda para a direita, e em nossa barra de cronômetro, é da direita para a esquerda. Tudo bem. Mas depois de
configurar
essas duas coisas , lembre-se de que, em nosso Global, temos que mudar isso
de nenhum TD para o principal. E isso é só porque o
meu é rotulado como principal. Poderíamos simplesmente rotulá-lo como “não D. Seria confuso, mas poderia Ou se você o deixasse como padrão
, em vez de principal aqui, você escreveria não para
três D. Tudo bem. Então, quais são as coisas
que temos que mudar? Bem, isso vai
ser no nosso player
aqui e no nosso WindSpace Mas vamos começar com o jogador. Isso será lembrado
toda vez que subirmos, isso estará em
nosso movimento aqui. É quando subimos, ganhamos pontos, certo? Então acessamos nosso mesmo global
ou, se você o copiou, atualizamos a pontuação e, nos dois D, ganhamos dez pontos Então, na morte, seguimos em frente e temos que
atualizar nossas vidas. Então, a atualização global Lives. E isso foi definido para menos um. E a última coisa que atualizamos
no DEF é nossa barra de cronômetro. Então, com isso, teríamos que
obter o node, certo? E teríamos que
lembrar que nossos jogadores vão até o nível de pais,
vamos
até nível de pais, e então podemos descer até nosso cara, pegar um
nível de pai e depois pegar nosso cara E então, a partir daí,
podemos pegar nossa barra de cronômetro aqui. Barra de cronômetro. Apenas certifique-se de que eu
escrevo isso corretamente. T maiúsculo, B maiúsculo, valor do ponto da barra
do cronômetro é igual Tudo bem, então isso será reiniciado. E agora só temos que
ir ao nosso Winspace aqui. E em nosso espaço eólico, só
precisamos passar
algumas semanas baratas aqui. Portanto, precisamos atualizar
nosso valor de vários sapos. Portanto, nosso multisapo
mais é igual a um. Você se lembra que, em nosso mundo, da forma como o Frogger funciona,
aumentamos nosso multisapo
e, quando chegamos a
cinco sapos múltiplos, recebemos um bônus de 1.000 quadrados
e, em seguida, nosso sapo múltiplo O espaço eólico, certo? Então, adicionamos ao nosso
multiplicador lá. Adicionamos
pontos à nossa pontuação global de atualização do SOE, e vamos somar
40 pontos aqui E então lembre-se de que também tínhamos
o bônus de cronômetro. Então, com base na
quantidade de tempo restante, adicionamos pontos adicionais à nossa pontuação. Então, vamos em frente e
ganhe o bônus de tempo. Isso era VR e acabamos de
chamá-lo de bônus de tempo. Era um número inteiro,
dissemos que era igual a um nó e tínhamos que subir um, pegar nosso pai, certo, e
então ele nos levaria
até nosso nó principal no topo Então podemos pegar nosso cara
e pegar a barra do cronômetro. E queremos que o valor
disso multiplicado por dez
seja o que estamos usando Isso nos dá um bônus
máximo teórico de 300 pontos, mas pressupõe que
você chegue lá em menos de um segundo, o que
não vai acontecer E isso nos dá
um bônus mínimo, supondo que você tenha 1 segundo
restante de dez pontos Então, novamente, isso é bastante decente no bônus,
algo em torno de 10-300 Embora, realisticamente,
provavelmente será mais de 10 a 200 Tudo bem. E agora que
temos nossos pontos de bônus, podemos prosseguir e atualizar,
chamar a atualização de
nossa pontuação novamente, pontuação atualização
global de pontos
e usar nosso bônus de tempo. Agora, passando por
isso de novo, é claro, poderíamos simplesmente dar um bônus de
tempo mais nossos 40 pela pontuação da atualização. Se você quiser
combinar tudo em
um, em vez de chamar
nossa pontuação de atualização duas vezes. Você sabe, preferência pessoal, e isso é algo que
você pode fazer sozinho. Quando falamos sobre código limpo e sobre como dar a você a
capacidade de
voltar e resumir o código do ator e limpar áreas que você acha que
talvez estejam um pouco confusas Então você terá
essa opção mais tarde. E a última coisa que
precisamos fazer é redefinir nossa barra do cronômetro para 30 Então, vamos colocar o node,
em nosso pai, no Gooey, pegar a barra do cronômetro e
pegar o valor Vou apenas copiá-lo para lá e redefini-lo para 30. Tudo bem. E assim,
nosso jogo deve funcionar com nossos antigos scripts globais
e Goey e conferir Toda vez que eu avanço,
eu ganho um ponto. Eu morro, eu perco uma vida. T foi reiniciado. Veja se conseguimos atravessar,
embrulhar em nosso tronco ou
sair, de uma vez por todas. Começamos a pular. E entramos na nossa zona de vento, vamos ver o que
vamos ter. Passou de 180 para 320. Então, recebemos um
bônus muito bom em nosso tempo. O tempo recomeçou
e recuperamos uma de nossas vidas. Então isso é fantástico. Tudo parece estar funcionando perfeitamente bem com a transferência de
nossa sacola. Então, novamente, Guy, isso
é uma camada de tela. Com uma etiqueta com uma etiqueta de pontuação, uma etiqueta com um texto de pontuação. Nossa barra de vidas é um progresso de
textura, e definimos a textura de progresso para a
textura de nossas vidas, deixe-me obter o nome exato
do ponto PNG da barra de saúde. A barra do cronômetro, acabei de
chamar de Tr dot PNG. É outra barra de
progresso de textura, e a
textura de progresso é definida por meio do PNG de pontos do cronômetro Em seguida, temos um rótulo com a
palavra hora ao lado. Temos um nó de cronômetro
com o início automático ativado com um tempo de
peso padrão de 1 segundo Ele tem o sinal de tempo limite
conectado ao script Boy. No tempo limite em nosso script Gooey, subtraímos um do
valor da nossa barra de E se nossa barra de cronômetro for zero, chamamos o
jogador de morte e reiniciamos para 30 Em nosso player on death, chamamos Update Lives em nosso global que
estávamos usando
dos dois D é menos
um, vida subtraída Também temos nossa barra de cronômetro, então
subimos uma e pegamos os pais. Em seguida, passamos pela nossa
GUI até a barra do cronômetro, acessamos a propriedade value Definimos 30 e, quando subimos e
somente quando subimos, acessamos nosso global novamente, atualizamos a função SCOR
e passamos dez pontos E nosso script global
examinará isso
novamente, caso
você
não consiga encontrá-lo sozinho por qualquer motivo. Aqui está. Portanto, temos
algumas variáveis as melhores pontuações: um inteiro
definido como zero por padrão, vários sapos, um inteiro, vivo, você define como seis por padrão, novamente,
outro número inteiro, e o multiplicador é um
número inteiro definido como um, nossa pontuação de atualização de função usa um parâmetro de nova quantidade,
que E fazemos com que nosso ILS verifique
se vários sapos são menores que cinco, basta marcar mais é
igual Então, basta adicionar o novo
valor à nossa pontuação se
não tivermos os cinco multiprogs Então, a única outra maneira que
poderíamos ter aqui é se
tivermos cinco ou mais, em vez de adicionar
a nova quantidade, adicionamos 1.000 pontos e
reassentamos o Multi frog E então verificamos
se a pontuação dividida por 10.000 vezes nosso multiplicador é maior ou igual a Em seguida, atualizamos nossas vidas, chamamos isso de
função de atualização de vida e adicionamos uma a ela, e definimos nosso multiplicador,
mais igual OK. Agora, depois disso, fora
desses blocos FL, obtemos nosso texto de pontuação e simplesmente atualizamos
o texto com nossa nova pontuação, convertemos nossa
pontuação em uma string, chamamos PAD zeros e adicionamos cinco deles Isso nos dará nosso
acolchoamento aqui no topo. Certifique-se de que sempre tenhamos
todos esses cinco zeros, mesmo que nossa pontuação
seja de apenas um dígito Em seguida, nossa função de atualização Lives, temos um valor como
parâmetro, que é um número inteiro Se as vidas forem zero, vamos pegar Tree e
recarregar a cena atual, reiniciando o jogo de
forma eficaz Caso contrário, vamos fazer
Vidas mais igual a quantidade, e vamos pegar o
nó, subir nosso pai, descer nosso nó principal, descer nosso Hoey, até nossa barra de Vidas,
obter o valor e adicionar
mais igual à quantidade pela qual
estamos atualizando nossas vidas obter o valor e adicionar mais igual à quantidade pela qual
estamos Tudo bem. Então esse é o nosso script
global. Novamente, se você não o pegou
ou não conseguiu encontrá-lo, alguma forma o perdeu. Aí está. Aqui está novamente, uma
análise rápida, bem
como o
roteiro de Goey e a configuração de
Gooey na cena,
como você pode ver Como as pequenas mudanças que
adicionamos ao nosso player
para que tudo funcionasse. E se, por
algum motivo, você estiver
lutando para habilitar seu global, se
você o reescreveu e o trouxe, deixe-me ver se consigo
capturar isso rapidamente Então você vai até o seu projeto, acessa as configurações do seu projeto. Não carregue automaticamente, aperte
este pequeno botão aqui e você poderá selecionar seu
script global no pop-up O nome do nó que será
preenchido automaticamente aqui
será o nome do seu script, que seria global E basta clicar no botão do anúncio e ele aparecerá aqui embaixo. Apenas certifique-se de ativá-lo
e
se o nome é
como você o acessa. É por isso que podemos
digitar a palavra Global e ter
acesso ao script. Mas aí está. Há nosso sistema de pontuação, o bônus do cronômetro e o Gei,
todos adicionados ao nosso jogo E agora podemos seguir em frente e
jogar Ride Boger. E não teremos
problemas à medida que avançamos. Tudo bem. Então
é isso. Cuide-se, tenha uma boa noite, e podemos passar
para a próxima semana Se você quiser adicionar áudio
, é a mesma coisa. Basta adicionar um
reprodutor de stream e carregar o que são todos eles MP
threes ou algumas ondas vv Arquivos. Sim, os dois P três
e os arquivos. Então você pode ir em frente e
usá-los exatamente da
mesma forma que os dois D. Basta adicionar
um reprodutor de stream de áudio à cena principal
e ao plano de fundo e o tema
principal da
música de fundo será enviado para reprodução automática E para o seu player, você
pode adicionar um stream
de áudio, carregar as fontes de áudio e tocar conforme necessário, desde
squish, punk e Exatamente o mesmo que
acontece com os dois D. Então, se você quiser acrescentar que esqueceu, pode voltar lá Semana três, dê uma olhada. Mas acho que
isso vai acabar nesta semana. Agora temos uma versão em três D do nosso pequeno jogo Frogger aqui, para que possamos atravessar
a pequena estrada
e chegar à nossa pequena zona de vento,
pular por nossas
pequenas plataformas
e, com sorte, não sermos
esmagados pelos caminhões
58. O que é uma API: Tudo bem. Olá,
pessoal. E hoje, vamos embarcar
em uma empolgante jornada pelo mundo das APIs Se você já se perguntou como diferentes aplicativos de
software se
comunicarão e
trocarão informações, este é o
lugar perfeito para começar Agora, imagine que você está em um restaurante e quer
pedir seu prato favorito. Bem, no mundo
da programação, esse processo é semelhante
ao funcionamento das APIs Vamos mergulhar e explorar esse
conceito fascinante juntos. Primeiro, vamos entender o que uma API ou o que significa API. API significa interface de
programação de aplicativos. Pense nisso como um
menu ou um conjunto de instruções que permite que
dois sistemas
de software conversem entre si
e compartilhem dados. Assim como você pede uma refeição um garçom e um garçom leva
uma solicitação para a cozinha, a API serve como intermediária
que facilita
a comunicação entre
os a
um garçom e um garçom leva
uma solicitação para a cozinha, a API serve como intermediária
que facilita
a comunicação entre
os diferentes componentes do software. Então, para tornar esse
conceito ainda mais claro, vamos usar a analogia do
restaurante, que você vê
na tela Então você, o cliente, representa o aplicativo
de software, e a cozinha
representa outro. Agora, essa pode ser sua
própria ferramenta que você cria e deseja que o
outro aplicativo, a cozinha, talvez
seja
o Spotify,
por exemplo, ou o Twitter ou
talvez um banco de dados do Aime, algo com o qual você queira
conversar e obter informações Bem, você quer pedir
uma refeição deliciosa, obter as informações, mas
não tem acesso direto
à cozinha. Então, em vez disso, você
comunica seu pedido
ao garçom que atua como
a API nesse cenário O garçom entende
seu pedido, leva para a cozinha,
o outro
aplicativo de software em seu nome A cozinha prepara
sua refeição de acordo com sua solicitação e a
devolve ao garçom O garçom, atuando como API
, traz um prato
recém-preparado de volta No mundo da programação, APIs funcionam de forma semelhante Eles definem um conjunto de
regras e protocolos que
permitem que diferentes aplicativos
de software solicitem e troquem
dados sem problemas APIs podem ser usadas para acessar
dados de servidores web, integrar serviços de terceiros ou até mesmo interagir com dispositivos de
hardware Então, digamos que você entre em
um restaurante, certo? Você se senta no
computador, o que está fazendo. Você está usando seu aplicativo
e, em seguida, informa ao garçom ou à API o que deseja
formatando os dados corretamente A API ou o Witter
então volta para o aplicativo de
software de terceiros, banco de dados, seja ele qual for, obtém essas informações e
as traz de volta para você. Então você tem as informações
para fazer o que quiser. Então, em resumo, as APIs são
como intermediários que facilitam a comunicação entre diferentes sistemas de
software Assim como um garçom leva o pedido para a cozinha e para um restaurante, eles permitem que os aplicativos conversem entre si, compartilhem dados e realizem várias tarefas
sem precisar entender o funcionamento interno uns dos outros.
Tudo bem. Aí está. Uma
rápida introdução às APIs usando a analogia clássica do
restaurante Espero que a analogia
ajude você a entender o conceito fundamental de
APIs e seu papel no desenvolvimento de APIs e seu papel Lembre-se de que as APIs são ferramentas
poderosas que permitem integração
e colaboração perfeitas entre vários componentes de
software
59. Como usar uma API: Tudo bem, pessoal. Ei, vamos dar uma olhada em onde obter uma API e
como
é se podemos
usá-la e, como
é se podemos
usá-la especificamente,
aquela que vamos usar em nosso exemplo de código para
ajudar no aprendizado, será a API de clima
aberto aqui. Portanto, se você vier
aqui para abrir o clima, poderá se
inscrever em uma conta e poderá perceber que talvez precise preços e selecionar um plano aqui, mas eles têm um
plano gratuito que oferece 1 milhão de ligações por mês,
60 chamadas por minuto. E podemos ver o clima atual e isso será o
mais importante aqui. Agora, todas essas outras informações todas essas chamadas e
tudo mais, é claro, você sempre pode se sentir à
vontade para fazer isso, mas essas APIs são
muito caras Você recebe muitos recursos e muito mais chamadas por
minuto e por mês. Obviamente, você realmente não vai conseguir nada
perto disso. A menos que você tenha um aplicativo
lançado publicamente que seja bastante popular. Portanto, para aprender
, especialmente se
for um dos
primeiros aplicativos que
você está lançando, o nível gratuito
provavelmente é muito mais do que
suficiente do que você
precisará. Então, se você precisar, vá em frente
e assine isso. Eu já tenho o meu, que, como você vê, diz
, pegue o APIK Agora, como é que realmente
usamos essas APIs? Bem, se dermos uma
olhada no topo, vemos que temos um guia aqui. E clique nele, espere um segundo para ver também. Lá vamos nós. Nós estamos aqui. E é interessante que
eles o chamem de Got here. Na maioria dos lugares, chamaremos
isso de documentação. E é aqui que
devemos ir em frente e usar o comando come down here
e damos uma olhada, ver se podemos encontrar o segundo
exato para usá-lo. Especificamente, a torção
em clima aberto. Por chamada. Então, vamos lá. Então, agora estamos
na página aqui para obter a documentação específica
sobre o clima aqui. E podemos ver o conceito
do produto. Temos nossa previsão
atual
sobre dados meteorológicos como começar . Temos nossa chamada de API aqui, vejo
que precisaremos de
uma chave de API para esta. Temos todos os
parâmetros listados aqui, quais são obrigatórios,
quais são opcionais. E então temos um exemplo
de uma chamada de API aqui. E um exemplo do tipo
de resposta que receberíamos. Agora, quando recebemos uma
resposta como essa, estamos recebendo uma resposta JSON E se você olhar de perto, podemos ver que são muitos pares
de valores-chave. Assim, podemos tratar essa resposta
e obter informações
dela da mesma forma como se
fosse um dicionário. E você pode ver
todas as diferentes informações que estamos
obtendo disso. O que é muita informação
para analisarmos. Então, depois de se
inscrever em uma conta, você pode ir até seu usuário no canto superior
direito, acessar minhas chaves de API e ver uma chave lá. Caso contrário, você
pode gerar
uma e manter isso
em mente ou manter esta página aberta, porque teremos que
voltar aqui e pegar sua chave de API daqui para frente. Tudo bem. Então, vamos em frente. Mais uma coisa que mencionarei é que, se você estiver procurando por APIs gratuitas para usar APIs gratuitas
e abertas,
basta fazer uma simples pesquisa
no Google e descobrir que há lugares que têm uma lista completa de todos
os tipos diferentes que você ou de diferentes tipos existentes, com links
para todos eles Portanto, fique à vontade para, é claro, sempre praticar e
conferir algumas das outras, ver como talvez a API de uma empresa opere de forma um pouco
diferente da outra. Mas é isso aí, vamos seguir em frente e
entrar no Goto na próxima Manter nossa chave de API ativa? Oh, eu escondo isso um pouco, então nós realmente não vemos isso
na maior parte do nosso código. E bem,
vamos começar a partir daí.
60. Configuração do script: Tudo bem Novamente,
você pode ir em frente e criar um novo
projeto, se quiser. Acabei de criar uma nova pasta para a seção API e
websocket aqui E, obviamente, para que
as coisas funcionem, precisaremos de
algum tipo de cena rodando aqui. Então, vou
criar uma interface de usuário,
o que, obviamente, nos dará algum controle para começarmos aqui, chamaremos essa
demonstração de API ou sabe o que? Essa API. Isso é bom. Depois vou salvá-lo, manter o mesmo nome e
armazená-lo na minha pasta. Eu tenho uma cena chamada API. E, claro, isso
vai precisar de um roteiro. Agora, a cena real aqui não importa, a menos que você queira o usuário possa inserir informações aqui,
como, é claro,
uma caixa de texto ou uma
rota de edição de linha, devo dizer, para que
o usuário digite as informações relevantes, e então talvez você
tenha um botão que captura todo o texto
dessas caixas Mas, na maioria das vezes, não
precisamos de
nada lá, mas precisaremos mais
uma parte
dessa cena aqui, que será
uma solicitação HTTP, para possamos adicionar uma
delas à nossa cena. Eu e uma solicitação HTTP é na verdade, o que nos permitirá
fazer uma chamada para uma API, para um site ou
serviço web de algum tipo. E então, quando isso
é concluído, algumas informações são
enviadas de volta para nós
e, com base nessas informações, podemos analisá-las para obter os dados
que estamos procurando
ou podemos pegar essas informações para obter os dados
que estamos procurando
ou podemos pegar essas informações
e talvez atribuí-las a
algumas variáveis para enviar
outra solicitação para uma seção diferente porque algumas APIs
exigirão dados extras a forma de algo chamado
cabeçalhos, mas por isso, sendo uma API simples, não é muito
difícil acompanhar Tudo o que precisamos
fazer é fazer uma solicitação e recuperaremos os dados
JSON Tudo bem, então em nosso APM,
vou adicionar
um script E vamos ter
algumas variáveis aqui. Então, variável, eu vou ter
a chave de API, que eu direi
que você deve ter sua chave de API.
Deveria estar escondido. Ele nunca deve ser
carregado em nenhum lugar. Isso é algo que
você deve manter o secreto e oculto
possível. Então, chave de API, isso
vai ser apenas uma string. E você pode obter isso
novamente no site. Eu posso simplesmente copiar e então você pode ir em frente
e colar lá. Agora, você pode ver este. Ou ele ficará
desfocado para o vídeo ou eu posso simplesmente desativá-lo para
que não funcione mais Depois de gravar
isso, não é grande coisa no momento,
mas lembre-se de que isso é algo
que você deve manter secreto
possível. Ok, de que outras informações
vamos precisar? Bem, se voltarmos e dermos uma olhada nos
dados, desculpe este. Vamos ver o que é necessário.
Vamos precisar de muita coisa, então uma latitude e uma longitude ID do aplicativo, essa será
nossa chave de API. Nós temos isso. Excluir é opcional e
todo o resto é opcional. Ok, então podemos simplesmente colocá-lo em latitude e longitude para isso Tudo o que estamos fazendo é examinar a documentação
desse Davar Long, que será flutuante e também
precisaremos de uma para
Lap, Sauce Float precisaremos de uma para
Lap, Sauce E essas são as informações mínimas de que
precisaremos. Agora, se fôssemos dar
uma olhada na chamada da API, como faríamos isso,
isso, copiaríamos, trocaríamos outra variável
aqui pela string de URL, e aí vamos uma string
bem longa. Portanto, temos HTTPS colon
slash slash gmther ou este é o exemplo de chamada Então você vê que vamos colocar
a latitude aqui, a longitude aqui, excluindo, vimos que isso é
completamente opcional E como
não temos informações adicionais
aqui no momento, vou excluir
essa parte e o ID do aplicativo, que é para onde nossa API vai. Ok. Então, o que vamos
fazer é usar um espaço reservado que
é uma porcentagem em
um S minúsculo e
vamos
usar isso para nos
livrar desses colchetes encaracolados e do que está dentro Então, teremos
a latitude, longitude e chave de API, então essas são três coisas que
precisamos lembrar Então, a primeira coisa que quero
fazer é que precisaremos de
uma latitude e longitude,
que, por enquanto, podemos dar a
ela um zero, zero padrão E dentro de nossa função
ready, para fazer essa chamada de API, precisamos prosseguir e
receber nossa solicitação HTCP, mas chamaremos
isso apenas de parte de configuração Vamos dividir isso no próximo. Então, acessaremos nosso HTCPRquest e,
na verdade, conectaremos o
sinal de solicitação concluída à API E você verá que obtemos um resultado, um código de resposta, alguns cabeçalhos e
o corpo O corpo será
a peça importante aqui. Vou
salvar isso, fechar todas as outras guias. Tudo bem, então eu vou
terminar esse vídeo aqui, então podemos dividir
isso aqui a seguir E no próximo vídeo,
prosseguiremos com a próxima palestra. Vamos fazer
a chamada real da API e analisar
os dados que recebemos de
volta para que possamos realmente
usá-los e ver o que temos
61. Como fazer chamadas API: Tudo bem. Então, eu
quero fazer uma anotação: aqui está uma que estamos
vendo para uma ligação. Portanto, o URL é
um pouco diferente. São dados de corte de api.weathermap.org
. Em seguida, corte 2,5 e corte
WE Question Mark. E então é aí que
temos nossos parâmetros para Lat Long e App ID Portanto, é um pouco diferente
o URL aqui agora. Para esta versão, ele
gritou comigo quando eu estava testando, mas uma ligação era
ter que assinar
um serviço diferente Então, é um pouco estranho tentar encontrar a
documentação sobre isso, mas vamos em frente e pegamos
nosso nó de solicitação HTTP e chamamos a função de
solicitação Passamos o URL
e, para preencher
esses espaços reservados, fazemos um sinal de porcentagem E então temos um par
de colchetes como uma matriz, e passamos nossas
variáveis lat, on e nossa chave de API Agora, você notará
que, se
tentarmos apenas
imprimir o corpo aqui, temos
muitos dados aqui. Nada disso realmente
faz sentido para nós, mas estamos recebendo algo em
troca, o que é ótimo. Agora, geralmente, você
provavelmente gostaria de
fazer uma verificação F aqui com um código de resposta para ter certeza que o que está sendo
devolvido indica que não estamos
tendo nenhum erro. Então, se apenas
imprimirmos o código de resposta, você verá que obtemos o código 200, o
que significa que tudo correu bem para ser examinado. Agora, se obtivermos um erro 400, então, bem, eu acabei de estragar
, é um erro Então isso significa que algo deu errado, algo não está funcionando. Os dados não
voltaram, o serviço está inativo, a solicitação não está
formatada corretamente, informações
incorretas, seja o que
for, há um erro Assim, poderíamos verificar se código de
resposta é 200
apenas por segurança. Se o código de resposta for
igual a 200, certo? Então, podemos dizer que se
tudo correu bem, agora, como
obtemos esses dados? Porque vimos que
era uma matriz, mas uma matriz de apenas um
monte de números aleatórios. Bem, temos que analisar isso. Então, a primeira coisa que
vamos fazer é criar uma nova variável para nossa resposta, que será definida para o nosso corpo, mas da qual queremos obter
os dados. Então, dizemos ponto e, se
digitarmos UTF oito, veremos a sequência de UTF oito com um sublinhado
entre cada uma delas Então, agora, se
prosseguirmos e
imprimirmos nossa resposta, vamos
ver o que acontece. Ok, bem, temos informações. No entanto, em muitos casos, você dará
um passo extra aqui, Anine Vou apenas criar minha variável
temporária aqui, TD para dados temporários. E para isso, chamamos
nossa string de análise JSON e podemos passar nossa
resposta para E agora vamos dar
uma olhada no que
recebemos de volta depois de
analisarmos a string Aí está, algo
que é um pouco mais fácil de ver,
espaçado um pouco melhor Temos comas no
meio, tudo. É mais agradável de ver, mas sempre pode tornar ainda mais agradável realmente querer apenas olhar
para as Mas na base, no momento, TD agora representa todas
as informações que
precisamos ou precisaríamos. Certo. Se isso foi difícil para
você ver e ler, eu entendo. Tudo bem, mas podemos
melhorá-lo um
pouco só para
facilitar a visualização. E aqui
vamos chamar a classe JCN e podemos
chamar o methicon stringify,
passar nossos dados, passar nossos dados, TD e um segundo argumento
de uma string que contém apenas um espaço E se
analisássemos o resultado agora, tudo seria
muito mais fácil de acompanhar a leitura. Então, se é disso que
você precisa, fantástico. É assim que você pode torná-lo
bonito e limpo. Tudo bem. Então, agora saberíamos
que, se
entrássemos aqui, poderíamos imprimir o TD e obter uma
informação daqui, como ver se Maine é
o que estamos procurando. Então, podemos pegar o Maine
e imprimir isso. E vemos aqui embaixo, se
eu apenas comentar isso, comente a linha com Controle K para que não possamos
confundir as informações antigas Podemos ver aqui
a temperatura. Aqui está a sensação. Tempman Max, pressão,
umidade, nível do mar
e nível do solo Agora, eu mencionei antes que
precisamos de latitude e longitude Então, um lugar onde
podemos ir para fazer isso, se eu voltar para a captura de
tela aqui. Este site aqui se
chama latlondt net. E, como você pode ver, basta clicar em qualquer lugar do mundo e obter uma posição de latitude
e longitude Então, por exemplo, se
fôssemos descer ,
eu escolheria
Vancouver aqui e
clicaria lá. 409-25-6791 Vou
copiar isso e configurá-lo para minha operação aqui. Então, o primeiro é em. Eles estão
aqui e minha longitude está aqui. Faz s. Então você pode
ir em frente e chegar a
qualquer lugar do mundo aqui, obter sua latitude e longitude Como você vê, você também
pode simplesmente digitar um lugar aqui e ele
deve aparecer para você. Tudo bem. Então, com essas
informações inseridas, vamos prosseguir e executar isso. Veja o que obtemos agora, a temperatura
288,11 parece 288,14. Agora, obviamente, esses
números parecem bem altos. Então, a pergunta seria
: por que isso? Bem, é aqui que
entram em jogo os dados
que estamos obtendo. Aqui está. Acabei
de nos levar aos campos em nossa resposta da ATI
aqui na documentação. Eu entro aqui, podemos ver onde estamos aqui? Ponta aqui. Portanto, a temperatura
dentro do Maine, a unidade padrão é Kelvin É por isso que é tão alto para nós o número que estamos vendo em 200
e algo assim. Lembre-se, opcionalmente,
você tinha a opção de inserir métricas ou imperiais dentro do nosso opcional se
formos até as unidades aqui, certo? Veja, podemos colocar uma métrica imperial
padrão. E as unidades padrão
serão aplicadas por padrão. Então, o padrão seria nosso Kelvin, e então temos nosso imperial
mexicano, certo? Então, como os
adicionaríamos para obter informações? Bem, simplesmente,
como você vê aqui, se seguirmos o padrão, temos apenas o e comercial, o
parâmetro é igual e, em seguida,
o que estamos procurando Então, se quisermos adicionar unidades, então devemos apenas
fazer com que as unidades de ampersand sejam iguais, e eu acredito que é preciso uma
mola Então, vamos em frente
e voltemos. E vamos adicionar unidades ou unidades. E, como eu disse, acredito que
será apenas uma primavera. E para nós, vamos
para algo como poderia ir para Celsius E eu acho que é isso que eu vou fazer.
Não é Celsius. Precisamos ir com o
México ou o Imperial. Vamos seguir em
frente e digitar a métrica. E eu só estou entendendo isso
examinando a API. Eu vejo uma métrica em
letras minúsculas, assim como em Tempio,
então presumo que tudo esteja em minúsculas Então, precisamos adicionar
isso ao nosso URL. Então, vou seguir em frente
e depois da minha longitude, mas antes do ID do meu aplicativo, vou colocar a unidade
Ampersand igual E então teremos nosso
espaço reservado aqui novamente. Agora, na minha solicitação,
temos latitude, longitude
e, antes da chave de API, posso passar unidades E se dermos
uma olhada agora, você verá que recuperamos 14,85 E a mesma coisa se
substituíssemos a métrica pela imperial, agora
deveríamos obter o equivalente em
Fahrenheit agora
deveríamos obter o equivalente em
Fahrenheit de 58,44.
Tudo bem. Então é assim que podemos
obter essas informações. E agora você pode definir o texto de, digamos, um rótulo na tela, ou você pode ter imagens
diferentes dentro do seu aplicativo
e você pode alterar ou exibir a imagem com base tipo de clima
, certo? Assim, podemos ver a temperatura, a pressão, a umidade. Mas lembre-se, isso é
tudo, não é toda a informação
que temos, certo? Podemos dar uma olhada na temperatura
do ponto principal
do clima? Talvez eu
esteja errado, espero que não, mas se sim, acho que teremos um erro em nossa impressão Sim, temos um erro lá dentro. Vou apenas dar uma olhada em descomentar minha sequência de informações
precisas para que eu
possa dar uma olhada Vento, clima. Ok, então parece
que é só o clima. Sem principal. Então, TD e eu vamos extrair o
atributo climático disso. Limpe isso. E, na verdade, o ID
é de 81 nuvens principais. Descrição, algumas nuvens. Então você vê, agora nós podemos ver, ok? O clima principal aqui é considerado nuvens, então
seria nublado Então, agora eu poderia exibir talvez uma imagem nublada na tela para acompanhar isso ou alterar o plano de fundo do
aplicativo para ficar nublado Como você pode ver, há um ícone aqui também nesses dados. Não tenho certeza de onde vem esse
ícone. Mas se você soubesse onde e eles lhe dessem um link
ou um ID ou algo para uma imagem, é
possível que
você acesse
e busque essa imagem
na Internet, para e busque essa imagem
na Internet, que você
pudesse usá-la,
o que seria mais ideal Mas, novamente, não sei de onde vem
esse ícone. Portanto, não tenho 100% de certeza de onde
vincular o dínamo gar para fazer isso Mas esse é o básico fazer essas solicitações
simples de API E algumas solicitações se tornarão mais complicadas do
que isso e exigirão que você realmente
se sente e
examine a documentação que elas podem exigir autorização, certas
permissões concedidas. Talvez seja necessário esperar que
o usuário se autentique. Talvez você
precise colocar
várias informações em seus cabeçalhos, que
viriam após a solicitação Então, temos a URL aqui. Teríamos apenas uma vírgula e
, em seguida, nossos cabeçalhos personalizados, que teriam a forma, acredito,
de uma matriz Isso você pode passar
, e então podemos obter outras informações, como G, postar o método que
queremos usar. E G é simplesmente o padrão, que é
o que estamos fazendo aqui. Estamos solicitando à API
informações do banco de dados, e publicar seria como enviar informações
para o banco de dados, como uma tabela de classificação.
Por exemplo, se você tem algum tipo
de configuração de tabela de classificação que trabalha com uma API,
pode enviar
informações para lá usando
o método post post em vez
do método get
here pode enviar
informações para lá usando o método post post em vez
do método get Mas aí está.
É assim que os fazemos Esse é essencialmente o
núcleo de fazer uma chamada de API. Qualquer coisa além disso
é apenas uma questão de fazer chamadas para obter informações para você usar como cabeçalhos para obter
os dados que deseja Mas no CR VIT,
é isso que você fará. E se for simples,
isso é tudo que você precisa. Se for mais complexo,
como o Twitch, por exemplo, você
terá que ler a documentação,
mas
a documentação do Twitch não
é Então, você provavelmente terá
dor de cabeça e problemas ao tentar
passar pelas fases de
documentação do Twitch Mas aí está. Essas são as noções básicas de
como fazemos chamadas de API.
62. RapidAPI Python para GDScript: Tudo bem, pessoal. Você pode ignorar o erro que está
na tela. Isso é só porque as
variáveis ainda não existem. Mas eu queria falar
sobre isso e
vou usar Eu tenho uma cena separada aberta para isso. É
idêntico ao primeiro. Ele só tem um script dk, e isso vai entrar
em um banco de dados de anime Eu escolhi este só
porque o anime é popular. Tão popular quanto o
anime e a quantidade
de programas que existem. Se vocês estão assistindo, provavelmente é uma boa
chance de gostarem anime ou pelo menos
terem experimentado em algum momento. Mas esse é o
tópico real aqui, é relevante? Acontece que é o que
estou usando aqui como meu exemplo. Agora, quero
falar com você sobre
o uso de APIs on-line e
quando você estiver pesquisando, porque você não encontrará nada
para o script Goto ou GD A coisa mais próxima que
você vai encontrar é algo como Python, que é bem Então, vou mostrar
como podemos pegar o exemplo do Python que ele
nos dá e usá-lo no Agora, o que estamos usando
aqui é da API rápida. E a Rapid API tem
muitas APIs gratuitas
que são, bem, ambas gratuitas Este, como você
vê, é premium. Então, se analisarmos os preços,
temos várias opções aqui. O básico é gratuito, que
é o que estou usando aqui. E veja, eu posso
fazer 100 solicitações por dia e apenas duas
solicitações por segundo. Então, obviamente, isso não
seria ótimo para um aplicativo implantado, porque você pode receber mais de
duas solicitações por segundo
e, se começar a obter alguma popularidade ou
tiver um usuário muito pesado, poderá facilmente ultrapassar
essas 100 por dia Então, obviamente, lá em cima, se
você vai fazer alguma coisa e aprová-la ou ela
vai desmaiar. E, você sabe, os $5 ou $10. Pareciam alguns planos
muito bons. Então, $10 são totalmente ilimitados, e os $5 são 5.000 por dia Mas você percebe que
não temos nenhum. Você não tem um limite de
quantas solicitações por segundo. Também escolho esse
porque a latência é de apenas 591 milissegundos, ou
seja, aproximadamente
cinco ou 6 segundos desde a solicitação até o
momento em que obtemos nosso banco Popularidade, 9,8 em cada dez, então é muito popular Foi atualizado há dois meses, então ainda está atualizado. Os níveis de serviço foram de 100%. Portanto, há muitos
motivos pelos quais essa API é uma boa opção
para nosso exemplo aqui. Tudo bem Então, tudo o que você pode fazer é acessar a API Rapid ,
se
inscrever em uma conta
e entrar e pesquisar
o que estiver procurando. No meu caso, novamente, eu venho
e procuro anime, e então temos todas
essas APIs aqui Alguns deles podem
ser dinheiro obrigatório, alguns podem ser totalmente gratuitos e alguns podem ser premium, como eu mostrei
com o outro. Agora, o primeiro resultado aqui
é o que estamos usando, e vemos se eu ajudo a
função, mas podemos obter informações por ID. Podemos obter tudo,
podemos obter gêneros. Então, há algumas
coisas que podemos fazer e essa aqui
chamada A Animation, podemos obter algo
sobre um presente ou namorada, você
quiser
pronunciá-la, uma imagem, informação essa
que
não é demais para nós Nesse caso, começa a ultrapassar
um pouco o escopo aqui, mas você pode ver que eles
não são todos iguais. Todos eles oferecem
serviços diferentes aqui. Isso é o que você
pode obter. E veja, quando estou aparecendo, alguns deles dizem
premium, outros dizem grátis Você pode receber um prêmio
em algum lugar onde seja pago apenas, eu não sei, mas
não parece. Parece que todos são gratuitos
ou premium, pelo
menos no primeiro pagier Então, vou
seguir em frente e clicar em um deles apenas para
mostrar um exemplo. Então, depois de decidir
o que quer fazer, o que deseja obter, você
notará no lado direito essas são todas as
coisas que podemos usar. Então, digamos que quiséssemos um papel de parede
aleatório. Clicaríamos nele e
colocaríamos nossas informações aqui ao
lado
com nosso exemplo. E você realmente não consegue
ver nada disso. Então, vou
reajustar isso agora. Então, um momento. Por enquanto, isso servirá para nós. Mas você vê no lado
direito, acho que
esses são todos os
diferentes serviços ou informações que você pode obter de sua API. E apenas clicando em um deles, você vê as informações mudando no lado
direito e no meio. Então, é basicamente assim que
eles vão funcionar. E você pode ver
que todos eles estão prontos, mas alguns deles podem ser uma postagem, dependendo do
que você está tentando fazer. E esse é o método que mencionei
no final do último vídeo, em que muitas vezes usaremos get
para obter informações, mas pode haver
ocasiões em que você
precise publicar e enviar informações. E se você decidir que este
é o que você quer, basta clicar no botão
Inscrever-se para testar aqui. E isso deve levar você à página de preços
da fase de preços. Você também pode simplesmente vir
até aqui e selecionar o plano que
deseja assinar. E tudo isso tem um
limite rígido aqui, como podemos ver. E você quer ter cuidado. Alguns deles não são um
limite rígido, como você pode ver aqui, no caso deste,
você será cobrado, que irá para sua conta Você será cobrado e terá que
pagar. Esses 1,5 centavos um para o outro. Cada solicitação adicional, certo? Isso está de acordo com
aquele e $0,03 neste. E isso, claro, no mega. Obviamente, eles aumentam à medida que você avança, mas o
plano básico tem apenas um limite rígido. Portanto, esteja ciente de
que alguns têm ou ultrapassam um determinado limite ao custo de você
realmente pagá-los, mesmo que
seja um plano gratuito. Tudo bem, vamos pular
para o Whoops, essa é a API rápida.
Não queremos esse. Só vou voltar aqui. Volte para o
banco de dados de anime que estamos usando. E vou reposicionar
isso melhor para nós. Então, só por isso, vou usar get all do
lado direito, ou desculpe, o
lado esquerdo aqui. Então esse é o
que eu vou usar. Agora vou simplesmente deslizar
a tela para ver melhor
as coisas para nosso uso. Lá vamos nós. Tudo bem Então, para isso, o que
vamos usar, e eu disse Python E, especificamente,
se abrirmos isso, podemos ver exemplos de todas
essas linguagens diferentes. E Python é o
que queremos. E veremos
o cliente HTTB bem
como a biblioteca de solicitações Agora, em Python, você pode fazer
isso de qualquer maneira, mas para nós, precisamos fazer esse tipo de análise das duas versões,
para nos dar uma ideia E você vê aqui,
temos cabeçalhos. Vou apenas copiar
os cabeçalhos de lá. E se
voltarmos ao Goto aqui, podemos seguir em frente e criar
nossos cabeçalhos variáveis Agora, o deles tem colchetes
e é um dicionário. O nosso tem que ser uma
matriz para nossos cabeçalhos. Esses são colchetes. Eu só vou colar isso. Agora vamos
ter um erro. Simplesmente porque, bem,
temos pares de valores-chave. Não é assim que uma matriz funciona. O que vou fazer é
ir para o meio,
destacar esta citação,
o destacar esta citação, espaço de dois pontos e
a outra citação aqui E eu vou simplesmente
deletar esse espaço de dois pontos Então, estamos basicamente removendo as aspas ao redor dela, tornando-as uma única string E você vê no final, ao
devolver, você copia os dois. Já separamos isso
por uma vírgula e faremos a mesma
coisa aqui no meio Exclua, carvão no espaço. Então, temos dois pedaços
de cordas aqui, e esses serão nossos cabeçalhos E eu entendi que você deve
conseguir isso da solicitação
ou do cliente
HTTP do Python Ambos serão exatamente os mesmos aqui para esta informação
. E vou seguir em frente e
ampliar isso ainda mais, só porque essa é a única
informação na qual realmente
deveríamos nos concentrar aqui. Tudo bem. Então, novamente, os cabeçalhos aqui. Eu fui em frente e apenas copiei
as informações aqui. E isso é essencialmente
o que diz aqui, nosso host e chave de API. Que vamos usar
especificamente para API rápida aqui. E isso vai mudar
à medida que meu cérebro faz uma pausa por banco de dados, por API Então, isso sempre
será diferente. Agora, a URL que queremos, bem, podemos ver as conexões
animadas db.p.rapidpi.com E então, no pedido deles, temos toda essa
grande coisa aqui. Bem, isso não
vai funcionar para nós. Então, vamos descer
e ir até o Python Quest, e esse será nosso URL base Se apenas copiarmos isso e dermos uma
olhada aqui. Podemos criar var URL. E esse é o nosso URL base. Agora, eu disse que
vamos usar get all, e é daí que vem essa
última variável. Só estou criando isso aí. E é aqui que você precisa
ser um pouco atento ao combinar as coisas,
porque você pode mesclar tudo em um URL, e então você pode fazer uma
fusão do get all go around, do gênero, etc., mas o que eu vou fazer
aqui é que vamos, vamos
voltar aqui,
e podemos ver que isso
termina com slash N, rapid api.com slash anime combinar as coisas,
porque você pode mesclar
tudo em um URL,
e então você pode fazer uma
fusão do get all go
around, do gênero, etc.,
mas o que eu vou fazer
aqui é que vamos, vamos
voltar aqui,
e podemos ver que isso
termina com slash N, rapid api.com slash anime Portanto, precisamos ter isso em mente. Vamos voltar
ao cliente HTTP Python. E podemos ver
aqui embaixo,
temos slash anime, ponto de
interrogação, página um, etc., Então, vamos ignorar
o anime slash e pegar
tudo depois disso E vamos
voltar para
Goto . E lá vamos nós. Então, podemos ver as pesquisas, full metal, gênero, fantasia, classificação cinco, ordem de
classificação crescente,
aí está. Nós temos tudo isso. Então, agora podemos simplesmente
mesclar nosso URL base com o que temos aqui Então, como outro exemplo, se eu fosse
até o anime G one. G one anime, por
classificação. Tudo bem E eu volto aqui
só para te mostrar aqui, e vou para o cliente HTV Wills anime, mas aqui mesmo
, o Ranking
B corta um. Isso seria um exemplo. Leia outra variável aqui. Certo? Diremos que obtenha a classificação. Isso é uma corda. E
nós poderíamos fazer isso. Então, agora podemos simplesmente trocar
isso por obter a classificação que queremos ou
colocamos de volta É por isso que eu gosto de me
separar aqui, então eu
posso simplesmente mudar especificamente
o que eu quero lá E, claro, se
você fosse
implementar resultados de pesquisa e
coisas assim aqui, eu vejo a pesquisa aqui, o
gênero e tudo mais. Você pode colocar isso como
espaços reservados, como
fizemos aqui atrás com
o clima, certo Com isso, temos
isso, e então podemos ver o que
precisamos obter? Bem, se dermos uma olhada,
vai voltar para
o Get All here. Se olharmos aqui embaixo
no cliente HTTP, vemos a resposta G, e estamos vendo tudo
isso, e vemos aqui embaixo, tudo o que eles estão fazendo
é decodificar UTF h.
Então, tudo isso é complicado. que eles estão fazendo
é decodificar UTF h.
Então, tudo isso é complicado Tudo o que eles estão fazendo é
decodificar UTF oito. Então, isso deve ser tudo o
que precisamos fazer para essa API. Agora, se você estiver trabalhando
com uma API diferente, talvez seja necessário fazer
a análise completa do JSON, como fizemos no clima aberto Então, aqui, temos apenas nossa resposta e tudo o que estamos fazendo é obter a
string do UTF H. Agora, se imprimirmos
a resposta aqui, executamos isso e, lembre-se,
estamos recebendo tudo Temos que esperar alguns
segundos. E aqui vamos nós. Temos uma lista completa, então podemos ver o episódio
16 de comédia e fantasia que tem o
episódio classificado como verdadeiro. Podemos ver a
imagem aqui no WebP. Temos um link que
vai diretamente para ele. Assim, você pode pegar esse link e fornecer esse
link aos seus usuários. Se é isso que você quer, mas
você pode ver que tudo está aqui como seus dados. E podemos acessar tudo
isso individualmente. E só para mostrar que temos aparelhos ondulados
aqui no início Se entrarmos aqui, apenas
obtemos dados, eles estão chegando da maneira certa. Portanto, teríamos que
encontrar uma maneira de realmente classificar as informações
que estamos procurando. Então, neste caso, já que não vamos
recuperar Jason, isso é um pouco
chato, eu acho Mas, como você pode ver aqui, já que
precisamos dar um passo extra, mesmo que a API ou a página nos
digam, tudo o que precisamos fazer é
analisar o UTFA. Isso é bom. Mas como queremos
obter os dados extras, analisamos a
string usando a classe JCN E como você pode ver, agora
eu posso obter esses dados, o primeiro item, porque
os dados eram uma matriz de itens. E então eu posso pegar o
título desse primeiro, que é, eu acredito que seria
o primeiro episódio, certo? Pelo menos o resultado. E se mudarmos isso para o segundo item, devemos ter um
nome diferente lá embaixo. Sim. Então, temos a Irmandade. Eu vou para
a próxima. o conquistador de Shambala,
seja lá o que for Eu nunca vi isso. Mas aí está. Veja bem, não é muito difícil trabalhar com esse Python ou converter o exemplo do
Python Então, nossas matrizes, nós as copiamos
e as colocamos no script
GD aqui como uma matriz em vez de um dicionário Excluímos as aspas
no meio. Assim, nossa chave de API
é uma string longa e nosso host de API é
uma string longa. Alternamos entre a solicitação
HTTP e o cliente
http dot e a biblioteca de solicitações para as
duas opções do Python aqui para
obter nossa URL base aqui, bem
como as
diferentes pesquisas que podemos
realmente fazer
aqui E tudo o que fazemos na solicitação, passamos nossa URL
e, nesse caso,
vou adicionar mais meu G A e os cabeçalhos Agora, se você tem
mais do que isso, por exemplo, se você tem um em
que diz que você precisa empurrar, certo? Você precisa postar em vez de G. É aqui que entram esses
padrões, certo? Portanto, podemos simplesmente entrar no método de
cliente HTTP em Square Post. Agora, o padrão é G. É por isso que não
colocamos nada lá. Mas se você precisar postar, em vez de G, é
assim que você faria. Você simplesmente o adicionaria após
os cabeçalhos. Tudo bem, então aí está. Veja como fazer. Há uma grande coleção de APIs com as quais você pode procurar
trabalhar e praticar E se é isso que
você quer fazer, forneça coisas para seu cliente. Além de como você usa seus
exemplos em Python e
os converte para que possamos
usá-los no script GD Então, agora você tem
uma coleção mais ampla com a
qual você pode trabalhar. Agora você sabe como
trabalhar com cabeçalhos aqui. E eu te mostrei como
fazer uma postagem em vez de G. Agora isso vai ao ar
porque nós não publicamos. Nós compramos por esses. Sim? E isso
deve nos completar para a parte da API. Em seguida,
vamos dar uma olhada
no que são soquetes web,
por que são úteis, como podemos
usá-los
e por que talvez
queiramos usá-los.
63. O que são WebSockets(espaço preenchido): Olá, pessoal.
Bem-vindo. E hoje, vamos falar sobre
o que são web sockets O que eles são? O que eles
são pobres? Bem, se você conhecia
a programação, que provavelmente está aqui, você já deve ter ouvido
esse termo antes, mas o que exatamente eles são? O que são websckets
e como eles funcionam? Bem, ao final desta lição, espero
que você tenha uma
autocompreensão do que são os soquetes da web e da mágica que eles
podem nos fornecer Simplificando, os soquetes
da web são um protocolo de comunicação
que permite a
transferência de dados
bidirecionais ou
bidirecionais em tempo real dados
bidirecionais ou entre um navegador da web e um Você pode pensar nisso como uma conexão
virtual persistente que permanece aberta, permitindo a comunicação
instantânea entre as duas extremidades. Para entender isso melhor, vamos imaginar que você está conversando com um amigo em
um aplicativo de mensagens. Quando você envia uma mensagem, seu amigo
a recebe instantaneamente, certo? Isso porque o
aplicativo de mensagens tem um conceito semelhante. Ele estabelece uma
conexão entre seus dispositivos, permitindo a comunicação em tempo
real Agora, como funcionam os soquetes web? Bem, quando uma página da Web que suporta soquetes da Web é
carregada no seu navegador, ela envia uma solicitação HTTP especial ao servidor solicitando o estabelecimento de uma conexão
de
soquete da Web Depois que o servidor
aprova a solicitação, a conexão persistente
é criada
e o navegador
e o servidor podem enviar dados um para o outro em tempo real A magia dos soquetes web está em sua capacidade de lidar com a comunicação
bidirecional Isso significa que não
só o servidor pode enviar dados para o
navegador instantaneamente, mas o navegador também pode enviar dados de volta ao
servidor em tempo real. É como ter uma conversa
ao vivo entre o navegador
e o servidor. soquetes da Web são
incrivelmente úteis para criar aplicativos que
exigem atualizações em tempo real, como bate-papos ao vivo, jogos
on-line, indicadores do mercado
de ações e Eles eliminam a necessidade atualização e extração
constantes de páginas, tornando seus aplicativos web mais eficientes e Então, se você precisar
de outro tipo de explicação para ajudar a
entender isso, você pode pensar nisso
como se fossem duas pessoas se encontrando, possivelmente pela primeira
vez, pessoa A, cliente,
pessoa B, servidor, elas
se encontram, apertam as mãos. E eles tentam estabelecer
uma conexão, certo? Eles se encontram, apertam as mãos e determinam a partir desse ponto se
querem manter essa conexão e trocar informações, conversar um com o
outro ou se afastar. Se eles não quiserem conversar
, podemos dizer que a conexão está fechada e eles seguem caminhos separados. No entanto, se eles decidirem
continuar a conversa
, a conexão foi
aceita entre os dois membros, ambas as partes, e agora eles podem trocar informações
ao vivo em tempo real. Espero que um desses
três exemplos do Sho
ajude você a entender exatamente como eles
funcionam E embora você tenha, essa é uma introdução simples ao
websocket: o que eles são, como podem ser usados E eles são uma
ferramenta essencial quando
se trata de muita
programação moderna e, novamente, isso vai realmente
depender do tipo de campo que você quer
entrar com suas habilidades de
desenvolvimento. Mas eles ajudam a permitir essa comunicação em tempo real entre seu aplicativo
e o servidor. E à medida que você
se aprofunda na programação, descobrirá
que os web sockets uma ferramenta poderosa
e versátil Crie aplicativos interativos e
envolventes. Mas lembre-se de que eles
não funcionam apenas com servidores que estão
em outro lugar. Existem alguns
aplicativos existentes que usam websockets com os quais você pode criar suas próprias
ferramentas para trabalhar Vamos dar uma olhada
nisso no próximo vídeo.
64. Estabelecendo uma conexão: Tudo bem, então vamos
dar uma
olhada em como configuraríamos uma conexão de web socket
com nós mesmos aqui e como poderíamos nos
conectar a algo E a coisa à qual
vamos nos
conectar será o OBS. Agora, se quiser, você pode
ir em frente e procurar o plug-in do servidor websocket,
o plug-in websocket do OBS Studio, se quiser acompanhar
isso e apenas executar isso e apenas Eu só deveria
te levar um minuto ou dois. E o que você verá é se você acessar Ferramentas no OBS, verá uma opção de configurações do
servidor de soquete web E ao clicar nisso, você terá essa
janela aqui Popo Verifique se o servidor
websocket está ligado. E tudo o que
precisamos é de um pouco de
informação aqui. Então, se
mostrarmos Connect Info, o que aparecerá será o IP do seu
servidor e a porta. E o IP é a principal coisa que queremos com isso, porque já
podemos ver a porta
aqui nesta janela. Agora, aqui embaixo, você verá quando ou
quantas pessoas se conectam a isso. E, como você pode ver, você também terá a opção de expulsar
um usuário daqui. Então é aqui
que vamos obter nossas informações,
só para que você saiba. E, novamente, vamos
querer o IP e as portas do servidor aqui. Então você pode ir em frente e
pegar essa informação, lembrá-la e deixá-la de lado. E vamos começar aqui. Tudo bem Então, a primeira coisa que
precisamos fazer é ter um nó de controle aqui, minha cena, nada grande do que
algo com o qual possamos trabalhar. E vou adicionar um script a ele e apenas chamar um cliente de websocket.
Realmente não importa. E agora estamos prontos para
criar essa conexão. Tudo bem, então como fazemos isso? Bem,
vamos precisar de um novo soquete, certo, para começar Assim, podemos criar uma
variável chamada soquete. E isso é igual a um soquete
web por ponto no. Queremos criar
um novo item, certo? Um novo objeto, esse soquete web. E eu vou
prosseguir e inserir URL
do soquete aqui também Basta armazenar isso como uma variável. Soquete RL. E esse
será o seu endereço IP. Mas não de qualquer forma. Teremos WSS, CLONAs e depois nosso IP, e não consigo colá-lo, então terei que digitá-lo
100 ponto zero ponto 19 Este é Não
sei se falha, então vamos dar uma
olhada no outro. Então, dentro do nosso pronto,
é aqui que vamos
fazer nossa conexão. Então, o ponto do soquete se conecta ao URL e nós apenas
passaremos nosso URL do soquete Agora, isso pode ter parâmetros
opcionais, mas nós não. Isso não é
algo que devemos colocar aqui. Em seguida, isso nos dá nossa função
de processo aqui. E a coisa que você precisará
fazer é completa. E isso é
que, basicamente constantemente, você pode pensar nisso constantemente como uma
troca
de uma quantidade
muito, muito pequena de informações apenas para manter a
conexão dos dois lados Caso contrário, se
nada for recebido, a conexão será
interrompida e você
será desconectado desse soquete da web, certo Você será desconectado
desse servidor. Eu e ninguém gostamos disso. Tudo bem, agora, para usá-los, precisamos decidir o que
vamos fazer, e podemos determinar
isso com base
no estado em que nosso soquete está E os estados que ele obtém nos
permitem saber se está aberto, fechando, fechado ou
se ainda está se conectando. Então, vamos continuar
e armazenar isso. O estado da barra é igual ao estado de preparação do
ponto do soquete. E agora esse estado
poderá nos dizer o que é. Agora podemos dizer se o estado
é igual a websocket aqui,
t e aqui estão todos os Então, diremos que o estado está aberto. E eu vou
passar por lá por um momento. E vamos criar
nossos outros aqui também. Vamos dizer se o estado
é igual ao fechamento do estado. E isso deixa nosso
último a ser fechado. Agora, poderíamos ter um
para nos conectar também, mas não há um quadro de pontos real. Agora, quando o estado está fechando, não
precisamos
fazer nada aqui. Só precisamos ter certeza de
que ainda estamos fazendo a votação
neste momento para que possamos
realmente fechar corretamente E vamos ver, vamos começar. Vamos continuar e fazer isso
quando nosso estado estiver aberto. Bem, aqui vamos
ter um loop selvagem, e é aqui que
vamos obter informações do pacote
que estão sendo fornecidas para nós Portanto, podemos dizer que o soquete Wil
está disponível na conta do Pack. Embora haja dados
sendo enviados para nós, certo? Então, temos pacotes. Vamos seguir em frente
e vamos
imprimir o que é isso, então vamos dizer pacote Base. E então, para o
segundo argumento, vamos passar o
que quer que seja esse pacote, certo? Soquete Sim. Pacote. Tudo bem E isso é tudo o que precisamos
fazer enquanto está aberto. Vamos dar uma olhada aqui embaixo onde nosso soquete será fechado E informações sobre barras, podemos
seguir em frente e criar código de barras, e isso será capaz de
encaixar e fechar o código Dessa forma, podemos ter
algumas informações quando nos desconectamos sobre o motivo ou talvez nossa
conexão falhe Então, ele tenta se conectar
e, em seguida, fecha
imediatamente Podemos descobrir novamente o porquê
para que possamos nos devolver algumas
informações. E por falar em motivo, esse será o
nosso próximo aqui, será
o
soquete Get close Reason Podemos então seguir em frente e
imprimir nossas opções aqui. E isso será apenas um
websocket fechado com código,
espaço reservado, motivo, espaço reservado,
espaço reservado limpo Vá. Aí está. Você pode ver isso lá, teias
fechadas, código, razão, limpeza. Um extra lá na ponta. E vamos
preenchê-los com código,
razão e, em seguida, código
não igual a menos Tudo o que
nos deixa uma última coisa a fazer é interromper a pesquisa, e podemos fazer isso simplesmente
chamando set process false Então, quando você define isso
como falso, o que quer que esteja aqui, essa função
de processo não será mais
executada até que você a defina
novamente como verdadeira. Tudo bem Então, com isso,
devemos ser capazes de nos conectar ao nosso, devemos ser capazes de nos
conectar ao OVS lá dentro Então, se nós apenas
abrirmos nossa janela? Acho que nossa janela está fechada. Vá em frente e abra isso. Aí está. Tudo bem, então eu vou seguir em
frente e clicar em Executar aqui Mas vou me
certificar de que
possamos ver esse lado quando eu fizer isso. Eu vou seguir em
frente e executar isso. Espere um segundo e
veremos que não temos nenhuma conexão. Agora, a
parte séria será
o porquê. Bem,
vamos dar uma olhada. Bem, a razão pela qual não está se conectando é porque
não fizemos nada
com a porta. Agora, a porta pode ser, se você
criar seu próprio aplicativo
, pode ser praticamente
o que você quiser. Quase desde que ainda
não esteja sendo usado. E a forma como adicionamos uma
porta ao final do nosso URL aqui são apenas dois pontos E então a porta que estava disponível
na configuração do serviço, que é quatro, quatro,
cinco, cinco, exceto isso. E se olharmos para trás
e o executarmos, espere um segundo
aqui. Lá vamos nós. Podemos ver se estamos conectados. Podemos ver por quanto tempo
estamos conectados, as mensagens de entrada e saída
identificadas não foram identificadas porque
não estamos usando nenhuma senha aqui e nossas informações, e temos a
opção de acessá-la Agora, se dermos uma
olhada no lado do Goto aqui, podemos ver que aqui está nosso
pacote de informações Parece uma
matriz de números, mas tem dados lá dentro. Confie em mim Nós simplesmente não conseguimos
ver exatamente o que é. Então, vamos corrigir isso aqui
em apenas um momento. E abaixo disso, você pode ver
onde, quando expulsamos o usuário, que será nosso cliente aqui, podemos ver que o
websocket fechou
e fechou com o código 40 11 O motivo da sessão
foi invalidado. Porque nossa sessão
foi invalidada
e foi um
encerramento limpo, o que é bom Mas como obtemos
dados
de todo esse pacote aqui,
pacote de Bem, socket dot Obtenha o pacote. Isso está em uma matriz pull by. Então, obtivemos isso no formato
UTF oito, então precisamos tirar
o texto dele Então, depois de fazermos socket
dot Get packet aqui, vamos chamar Yet
string do UTF E salve-o. E quando o
executamos novamente, quando ele se conecta, podemos ver que
obtivemos os dados reais
que estavam dentro dele. Assim, podemos ver a
versão que
obtivemos e a versão RPC E essa informação que
estamos usando aqui que eu obtive aqui com a versão atual do servidor que estou usando. O seu pode ser
diferente porque
presumo que você
o comprará totalmente novo Eu tenho isso instalado
há um bom tempo. Eu vou parar
de correr aqui. E você vê que não recebemos
nenhuma mensagem de chute lá. Mas se eu executá-lo aqui e
apertar o botão de chute, veja, aí está
nossa mensagem de chute. Tudo bem, então, infelizmente, eu realmente não posso
te ajudar a superar esse ponto. Além disso, como você pode obter
uma conexão aqui já que obter informações ou enviar informações de
uma forma específica dependerá que você está conectado e de
como eles querem seus dados, eu acho que você poderia
dizer estruturados, e de como eles enviam
dados de volta para
você, você pode ou não ter que obter
dados de
maneiras diferentes,
mas daqui para dados de
maneiras diferentes,
mas frente, o que você pode fazer é,
se mantivermos o controle, podemos clicar em websocket Peer E se
descermos, podemos ver aqui todas as nossas
propriedades, nossos métodos, e todas as nossas informações
têm a ver com essa coisa específica aqui e como usar
tudo aqui. Então você pode seguir em frente,
dar uma
olhada nisso e
acho que cruzar isso com documentação ou qualquer coisa com a qual você esteja
tentando se integrar. E nesse momento, acho que é meio
que boa sorte. meio chato dizer isso,
mas nós conectamos você, cabe a você ler sua
documentação e
descobrir como trocar
essas informações
65. Enviando dados com WebSockets: Tudo bem, então eu tenho um
botão e uma linha de edição aqui adicionados à minha cena
apenas para alguns visuais E o botão tem
o sinal de pressão conectado ao meu cliente de soquete
web E vou mostrar
pelo menos a ideia de como enviar,
digamos, uma mensagem por
esse websocket Agora, o nosso está bem,
eu vou te mostrar. Na verdade, você pode vê-lo
lá embaixo, mas vamos vê-lo
aqui em um minuto. Então, na prensa, teremos uma
tela de mensagem para essa variável, será
definida como nosso texto de edição de linha. Texto. Pare com o preenchimento automático. Pare com isso. Então nós temos isso. E agora precisamos
realmente enviar isso. Agora, você poderia colocar essa
parte de envio em sua própria função, o que provavelmente seria uma ideia inteligente
, pois então você poderia simplesmente chamar send sempre que
precisar enviar dados. Mas é assim
que a enviaríamos. Então dizemos “meia”, “arrume”, e então temos que
colocar nossa mensagem No entanto, não podemos simplesmente colocar nossa mensagem dessa forma.
Isso não vai funcionar. Mas poderíamos entrar
com nosso buffer UTFA, por exemplo, e isso
vai codificá-lo Então, se prosseguirmos e executarmos isso, agora isso ainda está
se conectando ao OBS aqui. Se digitarmos, digamos, olá, enviar, podemos ver que nosso soquete de limpeza foi fechado porque a
codificação foi enviada para Jason, mas uma mensagem binária Então você pode ver que estamos enviando
o tipo errado de dados. Então
é aqui que o tipo de informação precisa estar
ou se baseia em seu projeto. É baseado no que
você está conectado e motivo pelo qual precisa consultar
a documentação. Como alternativa, fazer
isso dessa maneira também é uma mensagem JSON dot StringFio E então podemos codificar
isso para UTF oito, assim, e isso nos
dará o mesmo resultado
nesta instância Nosso soquete vai fechar. E, claro, quando
você está enviando, você provavelmente quer ter
certeza de que o estado é aberto aqui.
Mas aí está. Existe a ideia de
como você enviaria dados por esse soquete da web Agora, como eu disse, realmente
não funcionou. Fomos fechados porque
enviamos o tipo errado de dados, então perdemos nossa conexão. Mas você só precisará ler a documentação
de tudo o que está tentando se conectar e qualquer programa com o qual
está tentando conversar. Certo? Então, se vocês
têm o Python instalado, sinta-se à vontade para dar uma olhada nisso e
copiar esse código para criar seu próprio pequeno servidor de web
socket em
Python para Mas, em última análise, estamos usando
Async e web sockets, é
claro, web sockets
teriam que E tudo o que estamos fazendo
aqui é criar uma função assíncrona, basicamente
iniciando nosso servidor para nós, ou desculpe, aqui embaixo,
iniciaremos nosso Mas aqui dentro
do nosso servidor, estamos vendo quatro
mensagens no soquete da web,
então, certo, toda vez que
enviarmos uma mensagem aqui, nossa mensagem será
decodificada do UTF Opa. E então vamos imprimir
a mensagem que
recebemos do cliente. Então, se fosse, digamos, um aplicativo de bate-papo, você pegaria isso
e o enviaria para quem estivesse
falando, certo? Com base na identidade deles ou qualquer outra coisa. E aqui esperamos um momento
e enviamos a mensagem de volta. Estamos enviando a mensagem de
volta para o GOTO aqui para que
possamos dar uma olhada e
ver que podemos enviar e receber dados,
diretamente, de um lado para o outro E então estamos apenas iniciando o servidor no host local,
que no GoTo , se
você não soubesse, o endereço IP
tem um host local É 127,0 0,0 0,1. Também estamos usando a
porta 5.000 para isso. Que estamos apenas imprimindo
em nosso console, na parte inferior, aqui embaixo, que
o servidor foi iniciado
e, em seguida, nossos dois loops aqui são basicamente fazer com que nosso
servidor funcione continuamente Tudo bem. Então, se eu
entrasse e executasse isso, podemos ver o servidor iniciado aqui. E eu vou
prosseguir e executar isso no lado
do gatto para que possamos
obter essa boa conexão Ah, e não podemos ver isso
agora por causa dessa camada. Isso é bom. Vou
abaixá-lo para isso. OK. Então aí está. E você verá que vou digitar aqui,
dizer, olá, nova pessoa. Bem-vindo ao chat. E estou super animada. Vou apertar meu
botão Enviar, e aí está. Podemos ver a mensagem
do nosso cliente. Assim, podemos ver que
recebemos dados em nosso servidor de soquete web aqui E se escondermos isso, podemos
vê-lo em nossa versão GTO aqui. O pacote que
recebemos de volta, certo, foi uma mensagem que o
servidor nos enviou dizendo: Recebi sua mensagem e repetiu
qual era a nossa mensagem Então você pode ver que isso funciona, é só uma questão de ter ou formatar o que
você está enviando, certo? Você envia uma mensagem corretamente com base no que quer
que esteja se conectando. Então você vê que esse método aqui
funciona ou essa configuração aqui funciona com um
servidor de soquete web simples e Python aqui , mas esse formato não
funciona ao conectar
ou enviar dados para Então é aí
que entra parte dessa leitura, mas eu queria mostrar que queria mostrar soquetes
da web em funcionamento com um servidor E você vê que o que temos
aqui é nosso conjunto básico criar um bot
de bate-papo ou criar uma sala de bate-papo que já
fizemos aqui, apenas com nosso servidor e cliente. Você só precisa
diferenciar qual cliente é quem e para quem eles estão
enviando cada mensagem Quero dizer, você meio que
configurou um bate-papo, pelo
menos entre um
servidor e um cliente. Mas antes de começar a
apostar, aí está. Acho que há alguma prova de que o envio
desses dados funciona. Depende apenas de como está formatado e ao que você está
conectado. Tudo bem. Vou colocar
isso lá em cima novamente. Então, se você quiser pausar o vídeo
e copiá-lo,
se quiser E você tem o Python
instalado no seu computador. Se você quiser fazer isso e criar seu próprio
servidor, vá em frente. Com isso, cuide de ter
uma boa vida, e é assim que nos conectamos
e usamos websockets
66. Como o desenvolvimento de desktop é diferente: Tudo bem, todos
bem-vindos de volta, e vamos
mergulhar na
seção de desenvolvimento de software aqui. Agora, o que torna o desenvolvimento de
software diferente do desenvolvimento de
jogos? Bem, vamos discutir isso. O desenvolvimento de software ou aplicativos de
desktop envolvem a criação de programas que são executados diretamente no computador do
usuário. Esses aplicativos atendem a uma
ampla variedade de propósitos, desde ferramentas de produtividade
até software criativo e tudo mais. Como desenvolvedor de
aplicativos de desktop, seu foco será projetar interfaces de usuário
intuitivas e criar soluções eficientes
para atender às necessidades dos usuários Uma das principais diferenças
entre o desenvolvimento de jogos e o desenvolvimento aplicativos
de
desktop está na finalidade pretendida. Enquanto os jogos são projetados para entretenimento
e interatividade, os aplicativos de
desktop são desenvolvidos para resolver um problema específico ou
melhorar a produtividade No mundo do desenvolvimento de
software, você encontrará uma
grande variedade de aplicativos,
como processadores de texto, ferramentas de
planilhas, editores de
imagens, reprodutores de
vídeo As possibilidades são ilimitadas e você tem o poder de criar ferramentas que
podem
impactar positivamente a vida
das pessoas Além disso, como desenvolvedor de
aplicativos de desktop, você poderá trabalhar com diferentes linguagens
de programação. Algumas dessas opções populares
seriam Python ou C SHARP, que você poderia usar junto com o
GDScrp para aprimorar ou trazer mais recursos ao
seu aplicativo que você Obviamente, isso é opcional, mas a habilidade
estaria lá para você. Outro aspecto fundamental do desenvolvimento de
software para aplicativos
de desktop é
a experiência do usuário. Ao contrário dos jogos em que a imersão
e a jogabilidade ocupam o centro das atenções, aplicativos de
desktop priorizam a
usabilidade Você se esforça para criar interfaces
intuitivas que tornam as tarefas
dos usuários mais simples
e agradáveis Agora, uma coisa que
também será muito importante quando se trata de desenvolvimento de
software é a aparência geral de
tudo,
a forma como você apresentou
seu aplicativo. Se seu aplicativo
parecer ter sido criado na
época do Windows 95, ele
parecerá antigo, desatualizado e não será
atraente em comparação com
outro aplicativo, mesmo que o seu
seja muito superior. Se não parecer tão bom, poucas pessoas
vão experimentá-lo. É apenas a infeliz
realidade do mundo. Você não precisa apenas criar um programa que funcione
excepcionalmente bem, ele também precisa ter uma boa aparência Portanto, não fará mal fazer um curso sobre experiência de usuário ou
interface de posteriormente, aprimorar suas
habilidades de design de interface de usuário, se isso fizer sentido. E isso, é claro, somente
se você optar por seguir a rota
do software
daqui para frente. Mas aí está uma introdução
simples ao desenvolvimento de software
para aplicativos de desktop. À medida que nos
aprofundamos nesta seção, exploraremos algumas de
nossas ferramentas essenciais, acho que podemos chamá-las usando o
TDScript E algumas coisas eu
posso ajudá-lo com alguns de
seus princípios de design para
ajudar a criar um aplicativo de
desktop fácil de usar.
67. chncoras: Olá, pessoal. E antes de começarmos a realmente
criar qualquer coisa, precisamos falar sobre
âncoras. O que são âncoras Bem, as âncoras são
ferramentas poderosas que ajudam você a criar interfaces de
usuário
responsivas e flexíveis para seus jogos e
aplicativos de software As âncoras são
usadas com eficácia para adaptar seu elemento de interface de usuário a diferentes tamanhos de tela
e proporções Vamos mergulhar nisso. No Goto, as âncoras são amarras
invisíveis que conectam elementos da
interface do usuário às bordas do contêiner ou
da tela principal Eles definem como o elemento de interface do usuário
deve ser dimensionado e
se posicionar quando o
contêiner principal ou a tela são redimensionados Isso garante que sua
interface de usuário permaneça consistente e fácil de usar em vários
dispositivos e resoluções Para entender melhor as âncoras, vamos imaginar que você
tenha um botão de interface no menu principal do seu jogo Você deseja que o botão permaneça
no canto inferior direito da tela, independentemente do
tamanho ou da proporção da tela. Para fazer isso,
você ancoraria a
posição do botão no canto inferior direito do contêiner
principal
ou da tela Então, para isso,
pegaríamos nosso botão, e esses pequenos
pinos verdes são nossas âncoras Então, se movermos todos eles para
o canto inferior direito e dermos uma
olhada na cena aqui, não importa o tamanho que fizermos,
ela sempre permanecerá
nesse canto inferior direito de forma consistente, enquanto se a
deixássemos no padrão, que seria no canto
superior direito,
desculpe, no canto superior esquerdo. E nós definimos isso. E se
fizéssemos isso agora, você verá que ele permanece
nessa posição em relação
ao canto superior esquerdo, independentemente de onde esteja
o canto inferior. E como você pode ver, a
parte inferior não importa e podemos removê-la
completamente da tela apenas
fazendo uma pequena. No entanto, se nossas âncoras estivessem no canto superior esquerdo
e no canto inferior esquerdo, e fôssemos dar
uma olhada
nisso , ela permaneceria
nessa posição, mas também se
estenderia na parte inferior, porque ficaria
muito perto da parte inferior e tão
próxima
da parte superior em direção
ao outro canto E ainda podemos, é
claro, ultrapassar. Assim, você pode ver como as âncoras
podem afetar
a aparência da sua interface no final do dia Então, se quisermos isso
no canto inferior direito, vamos colocar nossas
âncoras no canto inferior direito E agora essa parte da nossa interface sempre permanecerá nessa posição em
relação a esse canto. Agora, quando você executa o jogo em dispositivos
diferentes ou
redimensiona a janela como
você está vendo lá, o botão ajusta
automaticamente sua posição com
base nas âncoras, garantindo que ele permaneça sempre
no canto inferior direito Agora, no goto, você pode usar as predefinições de âncora para definir
o comportamento desejado dos elementos da interface
do usuário Essas predefinições incluem
superior, esquerda, direita e inferior. As âncoras são elementos
nas bordas especificadas de seu
contêiner ou tela principal centro vertical, o centro
horizontal, ancora os elementos no centro vertical ou
horizontal do contêiner principal
ou da tela e preenchendo nossa última opção aqui, ancora o elemento nas
quatro bordas, fazendo com que ele se estique e escale com o contêiner ou tela
principal Então, se você quisesse,
digamos, uma imagem para sempre preencher o
verso, por exemplo, se entrássemos e
fizéssemos um retângulo colorido aqui e preenchêssemos a tela Nós entramos. Temos
essa bela cor escura. Temos um marrom escuro aqui.
Talvez queiramos usar um verde escuro sutil como plano
de fundo. E se não
tocarmos nas âncoras, deixamos tudo padrão, e você pode ver
que temos um problema aqui No entanto, se usarmos neste caso, podemos simplesmente usar a predefinição to bull wreck para colocar nossos
pinos nos quatro cantos. Agora, sempre
teremos nossa tela
totalmente coberta
com totalmente coberta No nosso caso, nossa cor. Portanto, ao usar predefinições de âncora
e personalizar seus valores, você tem controle total sobre como elementos da interface do usuário respondem às mudanças no tamanho da tela
e na proporção da tela Tudo bem, aí está
uma introdução
às âncoras em Gato Ao aproveitar o
poder das âncoras, você pode criar interfaces de usuário responsivas e
adaptáveis para seus Agora, para jogos, é claro,
isso geralmente
se aplica apenas ao seu heads-up display, garantindo uma experiência de
usuário perfeita em diferentes dispositivos
68. Layout de pesquisa: Tudo bem. A primeira coisa que vamos
fazer é criar, vamos criar primeiro nossa barra de pesquisa e o que vamos
criar aqui. É que vamos criar nosso próprio pequeno aplicativo de desktop
que nos
permitirá pesquisar um anime e nos dará
uma lista de resultados. Ele terá todas as imagens de todos os resultados de
cada anime individual. Eu terei o título.
Eu terei os gêneros. E se clicarmos
em um, ele abrirá. Isso nos dará uma sinopse. Ele terá uma
versão maior da imagem. E se quisermos dar uma olhada, dar uma
olhada mais adiante, podemos clicar em
um link externo para nos abrir em
nosso aplicativo padrão, que seria seu
navegador padrão se você estivesse no PC. E abra a página do
anime para isso. E a primeira coisa que
vamos fazer neste vídeo aqui é
criar a barra de pesquisa
e o botão enviado para você. Mas vamos
começar colocando
um plano de fundo aqui porque isso é meio
chato, certo? Abrimos e temos
essa imagem cinza chata. Aqui vamos nós. Temos
essa caixa cinza chata Não é muito empolgante.
E mesmo se colocarmos uma linha no
meio, não
vai ser
tão atraente Parece meio M, certo? Então, a primeira coisa que
vou fazer é colocar minha nova cena aqui. Claro, eu o chamei de Main. É uma cena de interface do usuário. Então, meu nó raiz é um controle. E eu vou continuar e
adicionar uma textura reta aqui. Vou renomear
isso como meu plano de fundo. E para a textura, acabei Internet e encontrei
um fundo de anime porque é um
fundo de anime adequado para Anime. Então eu fui em frente e
encontrei um, o trouxe. Agora, isso obviamente é
muito grande para minha inscrição aqui. Então você notará que, se
agarrarmos a alça, não podemos alterá-la, mas podemos torná-la maior, mas não
podemos diminuí-la. Então, vou
entrar
no modo de expansão no inspetor do lado direito e alterá-lo de manter tamanho para, digamos, ignorar tamanho, ajustar com porção, ajustar altura Vou usar o tamanho
Ignore e
reduzi-lo até que o PS
cubra todos os nossos lados Algo parecido. E então
eu vou seguir em frente e colocar suas âncoras em Bull
Wreck. Aqui vamos nós. Isso vai definir. Agora, isso vai ficar muito claro para
exibirmos qualquer coisa. Então, na verdade, vou entrar seção
de visibilidade
do Min Spector Eu vou
entrar no módulo. Na verdade, vou me
automodular desta vez. Nesse caso, não
importaria. Mas se você usar modulate, isso também afetaria
todos os seus filhos Sendo esse o
plano de fundo, ele não terá filhos Então, tudo bem, mas se você quiser afetar apenas
esse nó, você vai
usar a automodulação, e eu vou
escurecê-lo porque o meu é
bem claro Acho que algo por
lá provavelmente será bom. Então, se eu seguir em frente e executar isso tudo bem? Essa é minha janela. Isso não é tão ruim. Não é muito claro para tirar
nada, embora tenhamos
muitos brancos no meu caso Tudo bem. Então essa será
minha formação. Agora, e
a busca real? Bem, na busca real,
vamos colocá-la dentro
de um contêiner. E isso será colocado dentro do
que é chamado de contêiner VBox E isso é um
contêiner vertical, certo? Então, tudo o que você colocar
dentro dele será colocado igualmente
espaçado verticalmente Então, se eu for em frente e
trouxer uma textura, digamos que essa textura
está aqui, certo? Use isso como exemplo. Então, como você vê,
vamos continuar assim
da seguinte maneira. Então aí está. Agora, obviamente, não
vamos ter
tudo isso lá, mas você entendeu a ideia aqui. E só para dar uma olhada aqui, se tivéssemos um controle lá dentro, não
faria nenhuma diferença. Tudo isso
permaneceria o mesmo. Eu excluo todos aqueles que vão. Agora, isso é porque nosso
controle, por padrão, tem um tamanho de zero. Coloque-o em layouts.
Aí está. É transformar. Assim, você pode ver nossos tamanhos Y
completamente zero neste caso. E podemos ver que nossa transformação é,
na verdade, maior, então não podemos controlá-la. Então, o que faríamos é ter nosso próprio contêiner
dentro do certificado. Então, no nosso caso, vamos em frente e, embora os contêineres
possam ser bons, acho que
vamos usar uma configuração do Mrvust, suponho que Então, vamos usar uma linha para
o nosso SRT agora, posso ver que meu
plano de fundo realmente se esconde, então vou
ajustar Escureça um pouco mais para que minha frase realmente se
destaque um pouco Texto reservado,
pesquise anime aqui. E vamos adicionar
um botão com isso também. E o texto sobre isso
dirá apenas, senhor. Isso é um pouco mais amplo. Aqui vamos nós. Agora, você pode ver que
temos cinza sobre preto. Vai ser. É
um pouco difícil de ver. No entanto, a única coisa
que
podemos realmente fazer sobre isso no momento
seria ir
na direção oposta e
seguir uma abordagem mais leve, o que é
perfeitamente normal se é isso que você queria fazer, algo
assim, talvez. Obviamente, isso vai
depender do seu histórico, mas isso é algo
que pode ser corrigido quando chegarmos
à próxima seção, quando realmente
falarmos sobre personalizar Então, nada parece muito
padrão e tudo parece muito mais
profissional, eu diria. Agora, como uma pequena dica aqui,
quando se trata de fazer interface de usuário, se você realmente chegar
ao topo aqui, temos dois ímãs Um vai ser fácil aqui. Como você pode ver, temos algumas fotos
inteligentes acontecendo, e a outra
vai nos dar uma boa grade que
podemos montar. E é isso que vai ajudar a fazer
com que as coisas pareçam bonitas. Vemos que isso vai
até o meio. Vamos construir isso em
relação ao topo central. E eu vou fazer a mesma coisa
com meu botão aqui. R: OK. E agora, em relação a isso, eu obviamente vou
estar um pouco drogado. Como você vai se sentir? Vamos ver se eu executo
isso. Dê uma olhada. OK. Acho que talvez
eu traga isso para lá e o estenda para que possamos
preencher
nossa caixa completa aqui. Em seguida, abaixamos nosso botão de
pesquisa. pequenos quanto
pudermos, então talvez
façamos assim com
uma caixa no meio. Se conseguirmos algo assim, acho que está tudo bem para
o que estamos fazendo aqui. Pelo menos, na minha opinião, não
sou especialista em interface do usuário, mas pelo menos tudo está
alinhado com a grade. Então, começamos bem. Agora, observe como meu botão e minha linha também têm
a mesma altura. Essa é apenas outra coisa
que vai fazer com que
pareça um pouco mais coesa e dar a aparência de ser mais bonita do que talvez seja Tudo bem, então
vou dar um nome a eles, então vou chamar
isso de minha barra de pesquisa, e esse vai ser
meu botão de busca, certo? Isso vai
ocupar o topo aqui. E há mais alguma coisa
para abordarmos neste livro? Vou revisar a pesquisa. Eu acredito que é isso,
e então teremos nossos resultados de pesquisa. Faremos nossos resultados de pesquisa em um vídeo separado. Tudo bem. Então, aqui está nossa busca básica. Agora podemos entrar e começar a digitar coisas
. Nós temos um. Attack on Titan
é popular e podemos clicar no botão de
busca Agora, obviamente, ele não
faz nada agora. Mas você entendeu a ideia, certo? Agora, certifique-se de
que está bonito. Então, sabemos onde está a linha
central aqui. Então, um, dois, três, quatro, dessa forma, um, dois, três, quatro, então você percebe isso. Estamos a quatro quarteirões
à esquerda e quatro quarteirões
à direita, então também mantemos esse equilíbrio nas imagens Pensei ter mencionado
isso também bem rápido. Portanto, temos uma expansão
do mesmo tamanho, então estamos nos mantendo
relativamente equilibrados. Além desse espaço vazio, estamos bem equilibrados visualmente
nas duas extremidades. Tudo bem. Isso é tudo para a busca. No próximo vídeo,
vamos configurar
a seção para mostrar nossos resultados.
69. Layout dos resultados: Tudo bem, vamos
prosseguir e configurar nossa área de resultados de pesquisa E eu só quero anotar
aqui algo depois. Também teremos um
botão de opção aqui. E isso será para nossos gêneros, para os quais teremos
uma seleção suspensa E vou
renomear meu botão de opção para gênero Optas e você notará
que eu apenas movo minha pesquisa,
meu botão mais para a direita
e o alinhei um pouco mais à
esquerda, e tenho que definir as âncoras para o meu botão de
opção Eu acredito que isso foi centrado. É assim. Agora podemos
entrar e eu posso redimensionar isso e ficar bem. Teste. Agora, se quisermos,
podemos seguir em frente e nos basear completamente no topo. Isso também
seria bom. Tudo bem. Então, vamos continuar e configurar nossa seção de resultados. Então, para isso, vou
adicionar
um contêiner de rolagem aqui. E o que isso vai
fazer é permitir ou permitir que possamos usar
a roda do mouse e ter a barra de rolagem
na lateral, como vemos aqui. Certo? E isso acontecerá sempre que tivermos
algo dentro, se estenda por mais tempo ou mais do que
a caixa que estamos usando aqui. Então, para nós, acho que
vamos ficar bem nisso, e isso vai ser
muito nosso. Lá. Agora, acho
que até isso será um pouco demais para as informações que
teremos aqui. Mas quem sabe? Talvez possamos fazer isso funcionar. Então, vou renomear
meu contêiner de rolagem
para contêiner de sais. Tudo bem, então com
nosso contêiner de rolagem, podemos ver que temos
esse pequeno triângulo aqui. E se passássemos o
mouse sobre o mouse, isso nos diria
que um contêiner de rolagem
foi projetado para funcionar com um
único controle infantil Isso seria como uma caixa V
ou uma caixa H, etc. No nosso caso,
vamos usar uma caixa V. Então, será um contêiner de caixa
vertical. E isso nos permitirá continuar
adicionando itens verticalmente, e poderemos
rolar diretamente para baixo
quando excedermos Então, vamos
adicionar esse contêiner VBox aqui E nós realmente não podemos fazer
nada a partir daí. Então, o que faremos é
entrar em uma nova cena. Vou selecionar
outro nó aqui para poder criar um
contêiner H box como meu telhado. Vou criar dois blocos I e vamos ver, dois ou seis. Vamos usar apenas seis de largura por enquanto. Agora, tudo isso vai
depender de como você deseja
classificar o seu, é claro. Agora, meu alinhamento será do início, o que significa
começar da esquerda
e empilhar a pilha para
a Se começarmos do final
, nossos itens
começarão do final. Então, veja, uma vez que eu adicione uma
textura rect aqui, vou dar a ela o ícone
goto como padrão Então você vê que a
partir do final, vai
começar desse lado. Comece do
começo. Vou começar pela esquerda e
começar pelo centro. Vou construir a partir do meio. Tudo bem, então
eu vou
usá-lo para começar do começo. Dessa forma, nossa imagem do nosso anime sempre
estará à esquerda. E isso vai
ser miniatura de anime, imagem de
anime, imagem de anime Chame esse anime de resultado, eu suponho, do meu contêiner. E agora eu quero que eu pense diretamente ao lado
da imagem aqui. Acho que queremos
ter o título no topo
e, logo abaixo dele,
ter todos os nossos gêneros Então, se prosseguirmos e
fizermos isso, obviamente
precisaremos de uma caixa V porque
precisamos ocupar um slot
dentro da nossa caixa H, certo? Caso contrário, você pode
entrar e podemos adicionar algum texto aqui e
adicionar outro rótulo, que ficará diretamente
ao lado dele, assim. Mas nós o queremos diretamente
abaixo dele,
certo ? Queremos ir para a vertical. Então, se eu deixar assim, por exemplo, e adicionar a caixa, você vê que quando adicionamos esses dois
rótulos dentro dessa VBox, ela se torna uma
pilha vertical como Certo? Então,
vamos fazer isso. Mas vamos
definir o alinhamento aqui para estar no centro E definiremos que o primeiro
rótulo será um título de anime. O segundo rótulo será, se eu
puder renomeá-lo, gêneros de anime. E chamaremos esse
contêiner de Anime Info. Agora, eu não gosto do quão perto
isso está dessa área, então vou
até minha caixa H aqui. E dentro do inspetor, eu vou para o Mvides Marque a caixa de separação e posso adicionar uma
quantidade personalizada aqui. 20 pixels. 30 pixels, quem sabe, certo? Depende totalmente de você
dar uma olhada, testar e ver do
que você gosta. Vou deixar
no 30 por enquanto. E vou salvar o resultado do
anime da minha cena. Isso é bom. Agora, quando eu voltar
para a cena
principal do nosso contêiner de resultados,
clique no contêiner VBox Agora, quando eu entrar
, posso inserir instantaneamente resultado do
meu anime você verá se eu uso o Control D e simplesmente o duplico Temos um monte
lá. E quando o executamos, é o que
parece, e podemos
percorrer todos os nossos resultados
graças ao contêiner de rolagem. Tudo bem. Agora, assim como na oitava caixa, como podemos ter uma
separação personalizada lá Também podemos ter uma separação personalizada
com nossa caixa V. No entanto, não quero tocar
nisso até depois de colocarmos nossas miniaturas
e isso lá, e então talvez eu
volte e as ajuste Mas com isso, temos
nossa configuração de tela de resultados. Tudo o que precisamos fazer é apenas
instanciar um resultado para cada resultado que temos
e preencher suas informações. Então, por enquanto, selecione
todos os meus resultados aqui e eu simplesmente excluirei. OK. E isso bastará
para esta parte. seguir, vamos dar uma olhada em como
realmente fazer uma
pesquisa para criar um certificado. Podemos preencher nossas ondas
também na próxima
70. Fazendo uma pesquisa: Oh, garoto. Tudo bem, vamos dar uma
olhada em nossos resultados Agora, para os resultados, vamos usar
esse banco de dados de anime. Se você voltar e dar uma
olhada na seção API quando
falarmos sobre API rápida e como
converter do Python
para o script GD, usaremos esse banco de dados E, como tal, acabei de copiar
o código dessa palestra. Então você não fez isso, ou precisa voltar e dar uma olhada para
lembrar como fazer
isso ou para ver qual banco de dados
é, vá em frente e faça isso. Prepare-se. Vou
apenas colocar um script no meu nó principal aqui. A e eu vamos colar todas
as minhas variáveis. Então, temos nossos cabeçalhos que
examinamos. Como configurar. Eu tenho meu URL base aqui e meus três pontos aqui, certo? Isso nos permitiu obter. Acho que nos permite
quatro diferentes, temos, dois deles,
três deles, desculpe. Temos que pegar tudo, obter
gêneros e classificação. Agora, acho que só
precisaremos obter tudo isso
em vez de obter gêneros Mas quem sabe, talvez? Talvez possamos. Ah, não, precisaremos obter
gêneros para
preencher nosso menu suspenso Então, acho que a classificação
é a que não precisaremos. Vamos apenas pegar
tudo e obter gêneros. Eu vou me livrar
do primeiro lugar. E então temos o texto da nossa barra de pesquisa
ou pesquisa aqui, nosso gênero que
vamos pesquisar, e EXT representa a extensão da imagem
que vamos
obter agora, vamos ver o que mais precisaremos
aqui? Precisamos de
mais alguma coisa por padrão? Acho que não
precisamos de nada até. Então, vamos em frente e acho que a primeira coisa que vamos
fazer é pegar nossos gêneros e preencher nosso botão de opção Vamos fazer isso. Vamos precisar de
uma solicitação HTTP. Então, vou adicionar um à cena. E vou nomear
isso como meu pedido de gênero. Assim mesmo. Além
disso, vou conectar
meu sinal para isso,
o sinal de solicitação concluída
ao meu script principal aqui, processo de
exclusão. Nós não precisamos disso. Então, agora, em nossa
função writy aqui, posso prosseguir e
obter nossa solicitação de gênero, e podemos fazer essa solicitação
HTTP, certo? E esse será nosso
URL mais nossos gêneros et. E podemos passar nossos cabeçalhos
como segundo argumento. Agora, quando recuperarmos esses dados,
lembre-se de que precisamos
analisá-los, então vamos dizer que
vamos criar uma nova
variável chamada resposta Vamos definir
isso igual a body, string do TFight e veremos o que
acontece se apenas
imprimirmos a resposta e
vermos o que recebemos de volta OK. Assim, podemos ver todos esses pequenos
ditários individuais de uma chave e um valor, e parece que todos os
nossos gêneros são valores do ID de
sublinhado chave Está bem? Então, dentro da
nossa resposta aqui, precisamos realmente ter
esse Jsonificado corretamente, porque temos apenas
uma string longa no momento,
tecnicamente Então, podemos chamar isso de nossos gêneros, se eu puder soletrar, string JSON e colocar em nosso lugar Nenhum erro é bom. E agora
podemos entrar e imprimir, digamos
, a resposta. Podemos dizer quatro gêneros e gêneros impressos, e queremos lembrar
a chave para sublinhado, I
minúsculo, D minúsculo.
Então, se tocarmos isso agora,
devemos ter Aí está tudo impresso
para nós aqui, premiado suspense de ação
para Etti Avant Garde,
esportes, fantasia sobrenatural,
gourmet, drama, comédia Nós entendemos. Então, podemos ver
todos os gêneros aqui agora Fantástico. Então, agora
precisamos realmente adicioná-los ao menu de opções
que temos, certo? Ou leilões de gênero. Então, nós os imprimimos. O que precisamos fazer é adicioná-los. Eles dirão: gênero,
leilão, precisamos realmente nos
apossar disso Opções de gênero. No item. E agora vamos
adicionar esse
ID de gênero que estamos imprimindo. E agora que jogamos agora, podemos dar uma olhada, e
aqui estão todos os nossos itens. Agora, vemos que isso é um pouco
maior do que era. Então, está meio que esbarrando
na nossa barra de pesquisa. Então, neste caso, talvez eu
queira dar uma
olhada e talvez deslizar para cima, agora que
sei o quão grande é. Como encontrar um equilíbrio em
algum lugar lá dentro. Isso parece? Eu acho
que parece bom. Quando estamos realmente do
lado do nosso projeto agora. Aqui vamos nós. Agora temos todas as
nossas opções aqui. Sempre dê uma olhada em todas as nossas
opções.
Fantástico. Então, temos nosso conjunto de gêneros e podemos
digitar o que quisermos lá. Agora, queremos ter um
substantivo frequentemente no topo. Então, na verdade, vou adicionar um item antes mesmo de começarmos. Então, está pronto, e
eu vou definir isso como. Não, eu gosto disso. E isso deve
ser selecionado automaticamente por padrão. Não estou enganado? Sim. Aí está. E em vez de nenhum,
se você quisesse, você poderia fazer com que ele selecionasse o
gênero, se quisesse. A questão é que, se
tivermos
isso selecionado, não vamos
introduzir nenhum gênero, certo? Vai ficar vazio em
nossa busca. Mas lá vamos nós. Temos a parte do gênero
preenchida e pronta para
criar nossas pesquisas. E agora precisamos
da busca real para obter todas as nossas
informações, certo? E você pode ver aqui,
estou recebendo uma página, mas meu tamanho é de 1.000
itens por página. Então, isso pode ser mais do que suficiente para preencher qualquer um desses. Então, vamos usar get all
em nossa próxima solicitação aqui. Então, vamos adicionar mais
uma solicitação de PTP aqui. E esse será o nosso
nome de busca de anime. E também conectaremos esse sinal de
solicitação concluída. E assim como os dois primeiros aqui, vamos analisar o corpo,
certo, pegar a string do UTFA e então temos uma variável,
não gêneros, mas E agora teremos uma lista de
todos os nossos animes. Então, se fôssemos
imprimi-los
e continuarmos, acho que podemos fazer isso
hipoteticamente por enquanto Na verdade, vamos
configurar nosso botão. Até agora, nosso botão de pesquisa,
quando pressionado, conecte esse sinal de pressão. E é aqui que está nossa solicitação Então, obteremos nossa missão de busca de
anime, teríamos URL mais G all e passaríamos o segundo argumento de nossos
cabeçalhos E antes disso,
precisamos realmente preencher
parte da célula. Nossos gêneros, se tivermos
algum, precisamos preencher. Você os construiu lá.
OK. Então, diremos que pegue tudo. Então, na verdade, vou colocar parênteses ao redor da variável
or get all porque aqui é onde vamos adicionar
espaços reservados Então, porcentagem e depois um
par de colchetes. E isso envolve a busca
pelo primeiro, espaço reservado e gênero ou
gêneros pelo segundo Tudo bem, então vamos com
o que temos que comprar? Temos que obter nosso texto de pesquisa. Portanto, nosso texto de pesquisa
será o que estiver dentro da nossa barra de pesquisa. Então, vamos dizer que a pesquisa é
igual à nossa barra de pesquisa, texto. E então limparemos
nossa barra de pesquisa. Ou, na verdade, não
precisamos neste caso, já que estamos fazendo uma pesquisa
real. E garantiremos pesquisa não seja igual
a uma string vazia. Dessa forma, você precisa
fazer uma pesquisa real
e, dessa forma, recuperamos
os resultados, não importa o que aconteça. Não importa se não
temos gênero. Só importa se
tivermos uma busca. Agora, não temos as partes do
gênero configuradas, mas vamos continuar e
garantir que possamos
obter resultados aqui. Então, entraremos aqui e
diremos adeus à busca de Titãs. E lá vamos nós. Temos
muitas informações e, como você vê, a
saída transborda, imprime menos texto Portanto, temos muito
mais informações do que a saída
deseja nos permitir, o que está perfeitamente correto. Mas podemos ver que o
importante é que podemos ver todas essas informações nossa pesquisa para que saibamos que nossa
pesquisa está pelo menos funcionando. Tudo bem. Então, e
as nossas opções aqui? Bem, para opções de gênero, selecionamos nosso menu de opções. Vamos conectar o item
de sinal selecionado. Conecte isso ao nosso script
principal aqui. E vamos criar
uma variável temporária aqui. E vamos
chamar esse gênero de texto, é igual às
opções de gênero, nossa barra de opções. No entanto, o texto do item e passamos o índice que é
automaticamente passado para nossa função com
nosso sinal, certo? Então, obtemos nosso índice.
Quando clicamos em algo da nossa barra
suspensa, obtemos o
texto desse item, que será definido como
o texto do nosso gênero aqui. E agora vamos
dizer, de forma simples, que
podemos usar um
fósforo aqui, se quisermos. Diga que corresponda ao texto do gênero. E se corresponder ao
que colocamos, fale, que estamos usando um gênero selecionado. Agora, se você não estiver usando nenhum, então você
não colocaria nenhum lá. Se corresponder a isso, os gêneros equivalem a
uma string vazia E usaremos esse sublinhado
para agir como um curinga. Então, se não forem gêneros selecionados, diremos que gêneros são
iguais Certo. Agora, se quisermos testar isso, podemos ir em frente e
voltar e simplesmente imprimir gêneros toda vez
que selecionarmos uma nova opção Então, veremos abaixo em nossa
produção toda vez que
selecionarmos algo,
esportes, comédia. Então, vemos que
tudo está funcionando bem. E se selecionarmos o
gênero selecionado aqui na parte superior, nada será impresso
porque é uma string vazia.
Então aí está. Temos nossos gêneros funcionando, e temos nosso texto de pesquisa. Agora, a última coisa que precisamos fazer quando obtemos nosso resultado é saber quantos
resultados temos E com base nisso,
podemos adicionar nossos itens de resultado, certo? Então, se entrarmos aqui,
faremos uma busca aqui. Na verdade, quero deixar isso um pouco
mais bonito de se ver Então, vou usar animes
JSON Spring Pi. Dessa forma, seria um pouco mais fácil dizer o que
estamos vendo. Vou fazer Attack on Titan
novamente, fazer uma busca
e, sim, não vou
imprimi-la. Lá vamos nós. Tudo bem, então eu adiciono Titan para ter uma visão melhor do que
estamos vendo aqui Não era assim
que eu queria que chegássemos ao topo. Então, vemos que
tudo estará dentro dos dados. OK. Então, vamos imprimir animes e entrar na seção de dados E vamos verificar isso. De volta
a Titan, faça uma busca E é inválido o índice de obtenção do. Está bem? O que eu fiz de errado aqui? Apenas pense, oh, isso não
vai nos dar nada. Isso realmente nos
deu algumas coisas. Isso é interessante. Oh, é um
D minúsculo, é por isso. Eu tinha questões de
capitalização de capital. Vamos usar os dados. Faça a
pesquisa, dê uma olhada. E vou rolar
até o topo. OK. Então, agora temos tudo isso. Então, para cada resultado
dentro dos dados, podemos criar algo
novo, certo? Então, podemos dizer que podemos
configurar nossos animes agora novamente, então vamos dizer que animes são
iguais aos dados de anime Dessa forma, agora ele
contém apenas os dados,
em vez de ter que
passar por essa
chave extra sem motivo. Agora podemos ir em frente e verificar. Podemos dizer quatro
animes e animes. Anim vai escrever aqui
por um segundo, não
temos uma instância ou não temos nada carregado
a partir do qual criar uma instância Então, eu vou dizer que o resultado da barra
é igual ao resultado do anime aqui. E vamos carregar esse G. E voltar
para animes e animes. Vamos fazer RI para resultado, instância,
resultado, instanciar Oh, porque estamos fazendo com
que seja passado para lá. Tudo bem. Então, diga o resultado do anime. Sim, longe porque
temos uma confusão aqui. Ele está tentando pegá-lo
da função aqui, então está pensando que é
um número inteiro. Então, vamos chamar
essa mudança
de instanciação de
ponto de resultado de anime Tudo bem. Agora, obteremos um VBox que está dentro do
nosso contêiner de resultados E criança. E estamos no RI, certo? Então, agora, se executarmos
isso e fizermos uma pesquisa, isso deve preencher
completamente nosso resultado, ataque à
busca de Titã. Lá vamos nós. E veja a quantidade de resultados de pesquisa que temos
para Attack on Titan Isso aqui, busca no
ensino médio. E temos muito mais. Então, o que realmente precisamos
fazer é esclarecer isso porque,
embora você não possa ver, nossos resultados estão empilhados uns
sobre os outros, adicionando nossos novos resultados
aos antigos. Portanto, antes de pesquisarmos tudo isso, precisamos acessar
nosso contêiner VBox E vamos ver.
Temos uma clara ou algo assim ?
Tudo bem. Não vejo nenhuma
maneira de simplesmente limpá-lo, então também podemos percorrer outro loop
antes de entrarmos nele. Então, podemos fazer um loop
while ou for. Então, como queremos dizer enquanto R vBox container dot Children Isso vai
nos devolver um número inteiro? Pais em uma variedade de referências. Ok, isso vai
chegar a isso. Então, queremos contar crianças. Portanto, a contagem de Wilchild é
maior que zero. Vamos obter
nosso contêiner VBox
e, ainda assim, o índice infantil zero, mesmo se tivermos um filho que ainda
terá um índice zero Então, vamos
basicamente
remover constantemente a parte superior
até que não tenhamos mais
nada nem um quarto. Coloque um pequeno espaçador lá. Agora veja se entramos, clique em Piton
, pesquise e
temos o L preenchido. E se
olharmos para o contêiner
Rsults remoto ou o VBox, temos tudo isso aqui Então, o que é agora, o que
vamos fazer quando
realizarmos outra pesquisa, vamos pegar a
primeira aqui e excluí-la. Vai verificar. Sim, ainda temos pelo menos
uma criança aqui. Pegue o próximo, que
será movido para cá, exclua-o e assim por diante. Se eu entrar agora e se você
ficar de olho aqui, se você se lembrar de quão
pequeno ficou, você entra, faz
a mesma busca, busca no ensino médio, e vemos que não ficou muito menor
quando fizemos isso Embora demore um pouco
para
examiná-los e
excluí-los todos, o que é um pouco problemático. Portanto, pode ser mais fácil excluir completamente
o VBox inteiro Ok, então vamos tentar excluir o VBox inteiro e
criar um novo quando precisarmos,
então diremos que obteremos nosso contêiner
VBox E então vamos
adicionar outro. S V NubX é igual ao contêiner VBox,
NuGet nosso contêiner de resultados, adicione o Neubox filho,
certo ? Então, vamos ver como isso funciona agora. Espero que seja muito mais rápido, já que não estamos
analisando potencialmente
1.000 resultados agora Então, a mesma coisa, ataque Titan Search. Tudo bem. Tínhamos uma opção de valor nulo, então entramos e dizemos o
que aconteceu aqui Contêiner de resultados, e
diremos que sempre obteremos a
criança zero
BRVBx Tudo bem, vamos tentar isso. Tudo bem, então
resolvemos o problema
alterando em vez de
obter o VBox diretamente, pois ele está sempre mudando e tem um nome
diferente Claro, poderíamos simplesmente
chamá-la de nossa nova caixa aqui, e isso provavelmente também
teria resolvido o problema. Mas, em vez disso, vamos apenas
alterá-lo para ainda criança zero. E também fazemos isso
aqui em cima quando não temos sinal. E
como parece que estamos tentando fazer as duas coisas
ao mesmo tempo, remover e adicionar,
ligo e
esperei 0,1
segundo, o que é bom. É um décimo de segundo.
Isso não vai te matar. Então, se prosseguirmos
e executá-lo agora, podemos prosseguir e fazer um ataque de
busca na busca de Titan Espere um segundo. Aí está. Vemos o tamanho do nosso bar
aqui ao lado. Quando digitamos no ensino médio ou em qualquer anime que
apareça com isso, e pesquisamos, notamos que a
barra fica menor
porque vai gerar mais resultados E notamos que a coisa
toda vai piscar, o que está
completamente limpo. Aí está. E você vê que temos
essa pequena barganha. E então, para mostrar
que não está acumulando resultados, podemos voltar a esse ataque agora
devemos fazer
nossa maior barganha Aí está. Tudo bem, então no próximo vídeo, vamos ver Miniatura, faremos nossas miniaturas e
nossas Então, os títulos e os gêneros. Preencheremos essas
informações a seguir.
71. Miniaturas, títulos, gêneros: Tudo bem, vamos preencher
todas
as miniaturas, títulos e gêneros aqui Basta
espaçar um pouco, para tornar as coisas um pouco
mais agradáveis de ver aqui Vá. Tudo bem? Então,
obviamente, isso vai estar dentro do nosso anime aqui. Então, vamos adicionar
está bem. E vamos ver. Precisamos obter nosso , então vamos em frente e começamos dando
uma olhada em nosso resultado. Veja, temos que descer para
animar Info e depois
para o título do anime Então, vamos dizer RI e podemos
dizer get child, get node. Tudo bem. Vamos usar
apenas get node aqui. E a partir daqui, podemos ver
que descemos para animar Info. Meu caso, e aí
dentro, podemos obter o texto do título do anime. E podemos definir isso como anime. Acho que é chamado de
título em nossos resultados. Descubra bem rápido, pois eu
acabei de testar nossa
cena principal e realizar uma busca em Titan, E não é uma
função inexistente, está sendo anulada. Eu me engano, erro de digitação, tudo bem, então agora temos todos os
nossos títulos configurados Então, agora a questão é: onde esses
gêneros estão localizados E, por isso, eu sinceramente não sei nada sobre isso. Mas o que vou fazer é
imprimir JSON,
stringificar, animes e Eu gostaria que isso fosse
mais fácil de ver. Então, vou adicionar um espaço aqui como meu segundo
resultado à sequência de Pi e vou executá-lo novamente. E isso vai ser muito
mais limpo de se ver aqui embaixo. Sinopse da classificação de status. Realmente, gênero não é nada.
Não tem nenhum. Isso é muito interessante. Sim, parece que se chama
apenas de gêneros. Muito parecido com o título. Vamos pegar nosso nó e obter essa propriedade de texto dele. E esse foi
chamado de gêneros de anime. E isso é igual
aos gêneros de anime? Sim. Tudo bem. Então, se dermos uma
olhada nisso agora, vamos ver a tag no Titan SERT E não. Invalido? Sim. Ah, porque, como resultado, obteve uma
matriz. Ok, então teremos que
transformar isso em uma string. Vamos dar uma olhada. Então, se
acessarmos a ajuda da Pesquisa e acessarmos o array, daremos uma olhada? Vamos ver. A matriz
tem duas strings Acho que não. Não, parece
que não. Então, tudo bem. Podemos simplesmente
convertê-lo em uma string, inserir
STR e envolvê-lo com um par de parênteses No entanto, acredito que não
obteremos o resultado desejado aqui. Então, se prosseguirmos e
concluirmos essa pesquisa, você pode ver que estamos recebendo
esses colchetes e isso ainda está envolvido Então, o que devemos fazer
em vez disso é executar um loop aqui. Eu vou dizer quatro gêneros
em gêneros de anime. Então, digamos que texto mais é igual gênero, mais vou
colocar uma vírgula a
gênero, mais vou
colocar uma vírgula no espaço.
Você sabe o que? Acho que faremos isso separadamente
apenas para evitar qualquer problema. Então, teremos duas linhas aqui. Então, se tivermos mais
gêneros lá, adicionaremos uma
vírgula com o espaço
e, em seguida, adicionaremos o Dessa forma, não
acabamos com um espaço de vírgula no final da nossa lista Agora só estamos adicionando gêneros quando temos gêneros para Portanto, nosso primeiro resultado
não será apenas um par de colchetes.
Vai ficar vazio. Ah, bem, nesse caso, será totalmente nossa coisa
padrão,
mas podemos ver drama de ação, ação premiada, bateria, suspense, bateria ação,
suspense Muito drama de ação. Alguns desses, vamos lá. Fantasia de comédia de aventura. Nosso imposto padrão
precisa ser eliminado de lá. Eu estou, então está tudo bem. Podemos
esclarecer
isso aqui, certo? Ou podemos simplesmente ir em frente
e limpá-lo aqui. De qualquer forma, está perfeitamente bem. E acho que vou limpar a
minha ali mesmo. Não tem problema. Então, se o executarmos agora,
devemos estar prontos para começar. E aí Embora
tenhamos o coma no início, é
um pouco lamentável Deve ser uma solução fácil. Eu deveria ser uma
solução rápida. Não tem problema. Quando terminarmos com
tudo isso, eu deveria
poder simplesmente ligar para Oops Na verdade, sim, texto com pontos. Tudo bem. Então, acabamos de
cortar o prefixo dela Então, fora do nosso
loop frontal, quando terminamos, pegamos nossa propriedade de texto e a definimos igual a qualquer que seja
nosso texto em nossa estela de gênero E chamamos de prefixo trim, e estamos apenas cortando
esse Tudo bem. Então aí está. Isso
deve resolver isso completamente. Então, se formos em frente e
formarmos uma pesquisa agora, optamos por restringir
a pesquisa. Aqui vamos nós. Vemos tudo aparecendo que
Justin deveria. É ótimo. Então, agora temos que
ver nossa imagem. Como obtemos essa imagem
para cada uma de nossas coisas? Bem, vamos
precisar de outro HTTP aqui. E vamos
chamar isso de missão de imagem. E você adivinhou,
vamos conectar o sinal de solicitação concluída a ele
ao nosso script principal aqui E eu vou
aumentar isso. E acho que vou
colocá-lo aqui com o resto de nossas coisas e
separá-las. Tudo bem. Então, agora, quando obtemos isso, temos o que teríamos
: nossas imagens aqui. Portanto, precisaríamos
formar nossa pesquisa aqui. Estamos recebendo muito disso. Então, em nossa solicitação de pesquisa de anime, acima do nosso loop for, queremos fazer isso
acima. Vamos ver. Vamos fazer isso aqui em cima. Assim
que tivermos nossos dados de anime , faremos nossa solicitação. Eles dirão imagem, ponto de
missão. Missão. E colocaremos nossa URL, que será animes. E eu acredito que se chama
apenas Imagem E para verificar isso, podemos
prosseguir e imprimir Gotcha, com certeza E não precisamos do
nosso JC Five Fact, podemos realmente verificá-lo aqui antes de começarmos a imprimi-lo Sim, a imagem é
exatamente o que precisamos. Perfeito. Veja, agora
vamos fazer uma busca. Oh, a matriz Get
Image on Base é inválida. É uma
cidade pequena, certo? Como é em uma matriz Bs? Vamos ver. Tudo bem, então vamos prosseguir
e solicitar imagens de animes. E então, dentro do
nosso circuito dianteiro aqui. Vamos não, aqui embaixo, onde
recebemos nosso pedido. Podemos fazer isso, podemos
criar nossa tecnologia, salvar nossa imagem de imagem nova. E podemos combinar aqui, dependendo do
tipo de extensão. Então, vamos combinar EXT
com a extensão. Isso vai eliminar
nosso erro por enquanto? OK. Então, teremos que
colocar nossa extensão aqui
antes de
podermos fazer qualquer coisa. Então, digamos, XT pouco antes de
obtermos nosso resultado. EXT é igual à imagem do Anime. Ainda extensão. E isso nos
dará o final do URL, nos dará PNG,
JPEG, web P, TGA E dessa forma, quando
combinamos a extensão, podemos combinar EG. Podemos combinar JPEG ou JPEG. Poderíamos combinar web P, ou poderíamos combinar TGA E, como de
costume, nada disso coincide Vamos colocar um
curinga e imprimir sistemas dizendo: “Não consigo imaginar E dentro de tudo
isso, seguiremos em frente. Faremos a imagem, carregaremos e
carregaremos do buffer, então carregue E e G do buffer E esse será
o nosso corpo. Este é o nosso corpo,
e estamos fazendo a mesma coisa em Ali,
apenas de tipos diferentes. Carregue do JPEG do buffer, carregue P do buffer
e carregue TGA e carregue TGA Tudo bem. Então isso vai nos
dar nossa imagem. Podemos seguir em frente e depois disso eu quero fazer Du. Tudo bem. Então, vamos seguir em frente
e obter uma nova variável, textura Imagem, textura nova. Nós fazemos o conjunto de pontos de textura Image. E passamos What do you Oh, porque ainda estamos
dentro da bateria. Esse turno e essa aba. Sim. Então, defina a imagem, e o que
vamos colocar lá será nossa imagem variável. E então vamos
devolver a textura para nós. Dessa forma, podemos
usá-lo em outro lugar, o que significa que quando
fazemos nossa solicitação aqui, digamos, nossa miniatura é igual ao valor de retorno de
nossa Eu sei soletrar corretamente. Agora,
aqui dentro, é claro, antes de terminarmos,
precisamos realmente colocar
nossa miniatura aqui, que é nossa imagem de anime Dot get node, Anime.
Vamos adicionar Manco Não. Nós não temos. Tudo bem. Então, quais coisas. Aqui está
uma imagem de anime que está com API, eu acredito. Imagem de anime. Faça.
Textura é igual a textura. Na verdade, miniatura.
Como está aqui? Tudo bem, e parece que
estou apontando um vazio aqui, então precisamos terminar de corrigir Talvez volte
na textura da imagem. E isso é só se você tiver
as setas apontando, certo? Então, se você tem essas setas
aqui, apontando para void, dizendo que retornam void em sua solicitação HTTP para
a solicitação de imagem, você precisa ir até lá e
alterá-la para a Nós apontamos isso porque é para onde você está se voltando aqui, o fim. E eu mostraria
isso funcionando agora, mas na verdade eu uso todas
as minhas solicitações por dia. Então, vou
ter que colocar isso em pausa e
jogá-lo logo no
final deste vídeo ou voltar na próxima vez
e mostrar que está funcionando Acho que isso bastará por enquanto já que não tenho
mais solicitações de EPI Eu atingi meu limite diário. Então, isso bastará aqui e nos
vemos na próxima seção. Tudo bem, então eu não precisei
fazer um pequeno trocador. Fiz com que as informações que tínhamos na parte superior
da nossa solicitação de
pesquisa do Animate fossem concluídas Eu os tenho. Movi
essas três linhas para baixo
e adicionei em uma espera. Então, estamos atribuindo
nossa extensão logo após o loop de quatro para, é
claro, animar e, em
seguida, extensão de ponto de imagem, para que saibamos que tipo
de imagem Em seguida, recebemos nossa solicitação de imagem e executamos a
solicitação de URL, certo? Imagem de anime. E provavelmente deveríamos estar
passando nossos cabeçalhos também lá. Em seguida, aguardamos. E dessa vez, no passado, sempre
criamos um cronômetro para esperar um
determinado período de tempo Desta vez, estamos usando um
sinal de espera para aguardar
nossa solicitação de imagem, solicitação concluída, então estamos esperando até que já tenhamos recebido
as informações de que precisamos. E então estamos definindo
a textura da nossa imagem de anime para
nossa textura variável, e foi aqui que
fiz um pequeno ajuste Eu mudei a textura para
ser apenas uma variável global aqui. Bem, global na forma de estar no
topo do nosso roteiro. E se eu rolar para baixo, onde está aqui, prossegui e estamos
fazendo a mesma coisa aqui. Simplesmente não estamos
devolvendo a textura. Acabei de criar a textura
como uma variável externa, o que significa que tive que
voltar aqui e colar de uma
textura perdida de volta para o vazio Agora, a razão pela qual eu fiz isso é porque, por qualquer motivo,
isso estava voltando como um número inteiro em
vez dos dados Então, eu apenas mudei dessa forma para que possamos
definir os dados aqui, aqui, mas a variável existe
fora dessa função É por isso que
não precisamos voltar. E também para evitar problemas, eu realmente tenho problemas, mas aqui há limites de
API. Fui em frente e mudei meu tamanho para três
para obter apenas três resultados porque
estamos fazendo uma chamada de API para cada
resultado que obtemos, certo? Ou não é realmente uma chamada de API, mas estamos fazendo uma chamada de UR, é por isso que não
precisamos dos cabeçalhos aqui. O que eu estou pensando? Não é para a imagem? Então, se você quisesse manter isso
mais alto, você poderia. Não vai doer nada. Só três vai
ser muito mais rápido. Se entrarmos no padrão, que é 100, e
abrirmos aquele que já
foi capturado, já
dizemos
ataque a Titan, antigo SERT Isso é o que
devemos ver aqui. E vemos que temos nosso
nome, temos nosso anime e temos todos os nossos
gêneros por baixo Certo? Então aí está. blá, blá, Sam,
e nós SERT, bum. Lá vamos nós. Vemos que tudo está
funcionando perfeitamente bem. E se você quisesse, se
estivesse fazendo 1.000, como o que eu tinha lá em cima,
só vai demorar um pouco mais. Não sei por que
pensei que usaria
minhas chamadas extras de API lá,
mas acho que foi minhas chamadas extras de API lá, uma pequena perda de
pensamento. Podemos entrar e
você pode ver que chegamos algum lugar onde
acho que o ensino médio teve ainda mais resultados, certo? Entramos, saímos desse jeito, e você pode ver, olhar aquele bar. Continue bem
pequeno, continue funcionando, continue funcionando, porque temos que
tirar todas essas imagens e elas finalmente pararam. E você pode ver
que temos todas as imagens, todas essas.
Não falta nada. Mas aí está. Então isso funciona. Basicamente,
precisávamos mover nossa variável de textura
para a parte superior do script, em vez
de retorná-la. E eu posso deixar de comentar aqueles que
podemos considerar nossos gêneros agora. E basicamente movi
nossa solicitação de extensão e imagem para baixo depois nossa. Essas são as únicas alterações
que fiz lá, certo? Antes de começar e adicionar
demais, acho que
vou adicionar isso
ao vídeo anterior Tudo bem, aí está. Portanto
, funciona perfeitamente bem. E a seguir, daremos uma
olhada na
abertura de nossa página com a sinopse
da história e outras informações como o
link externo e
72. AnimePage: Tudo bem Então, vamos
mostrar nosso painel que aparecerá com os detalhes
do nosso programa,
como nossa sinopse, e teremos uma
visão clara da E se quisermos, podemos
colocar o título
e as tags lá
também, se quisermos. Agora, o que fiz
foi prosseguir com meus resultados e adicionar apenas um
botão que diz visualizar. Agora, há uma variedade de maneiras de
fazer isso, mas eu só tenho uma
que diz visualização. E na minha cena principal,
eu adicionei uma janela. Eu só tenho um texto direto lá dentro. E observe que você não pode mover a janela em si porque não
consegue segurá-la Então você terá que ir até
o inspetor, ir
até o layout e transformar Lá está na
janela e na posição. E então, quando você
quiser mover as coisas de dentro que
são filhos dela, como minha miniatura aqui, que é apenas uma textura, certo Eu tenho que ir até o layout
Transform e brincar com meus números aqui
para mover as coisas. Por exemplo, a posição aqui, se eu quiser movê-la, tenho
que ir assim para colocá-la. Mas estou lembrando que,
no lado esquerdo,
está minha miniatura Também vou adicionar um rótulo, e esse
será o fim de um título. Vou colocar algumas palavras
aqui para ter uma ideia de onde
essa etiqueta está colocada. Vou para o layout Transform e encontrarei um bom
local para posicioná-lo, digamos: E se ultrapassarmos 300? Isso pode ser um pouco
excessivo, 203 20. Ah, isso mesmo.
Estamos no centro. Eu acredito. Vamos ver. Eu coloquei isso em 200, o que seria
bem aqui em cima, na verdade. Isso é interessante. Então, talvez eu
queira apoiar
um pouco mais, reduzir 50. Tudo bem, eu vou
com 160 e talvez diminua em dez. Então eu posso
tirá-lo da borda. Então esse será o nosso título. E eu vou
continuar e duplicar isso apenas com a seleção de
títulos de anime D. Chame isso de nossas tags de
anime, certo E é aqui que
teremos drama, ação, fantasia, etc Então, isso vai ser baixo. Nosso título. Então, venha
aqui, faça o layout, transforme e reduziremos RY para 30, 30 pode ser o correto. Talvez 40. Só para
esclarecer um pouco. E agora precisamos de
algo para o texto. Então, o que
queremos colocar lá? Poderíamos fazer com que o rótulo
ficasse um pouco prolixo. Poderíamos criar um rótulo de texto rico. Bem, acho que é isso
que faremos. Eu tinha uma etiqueta de texto escrito, como você vê aqui, ao lado Agora, a desvantagem é que não
podemos realmente ver nada. Vou colocar um monte de texto
aqui para que
possamos ter uma boa ideia do
nosso tamanho
e aqui para que
possamos simplesmente
enviar um pouco de spam para lá, acessar nosso layout e transformar. Tamanho. Isso é 100. Acho que 300
provavelmente é bom lá. Talvez 400 lá. E vamos ver
essa posição. Agora, onde exatamente
eu vou querer isso? Queremos isso diretamente abaixo. Pode ser a melhor
opção para isso. Nesse caso, quais
são os X para eles? 179. Você tem algum Oops Esse é o tamanho. Posição W 160. E então eu vou
reduzi-lo em cerca de 100, e essa será a nossa história. Para onde vai uma sinopse. Então,
vamos dizer sinopse de anime Tudo bem, então é assim que minha
janela vai ficar. Talvez eu precise ajustar
isso depois de ver a miniatura ser inserida Mas, por enquanto, vou
ficar feliz com isso. E eu vou voltar
ao meu resultado de anime. Vou adicionar um script
ao resultado do meu anime e vou conectar
o sinal pressionado. Vou
reconectar isso aqui. Desconecte, basta conectá-lo
novamente. Tudo bem E precisaremos de algumas coisas
personalizadas na parte superior. Então,
teremos um sinal personalizado aqui e ele mostrará
detalhes. E vamos
ter uma variável personalizada aqui chamada sinopse, que será apenas uma
string E teremos nossa função
pronta aqui. E quando estiver pronto, quando esse
objeto for carregado em nossa cena, vamos conectá-lo com nosso sinal personalizado ao nosso nó principal aqui
com seu script nele. Então, vamos fazer
self dot connect, mostrar detalhes que
podem ser chamados
e lembrar que
o primeiro argumento é
ao qual você deseja conectá-lo,
então queremos que
três pais subam, digamos get node e faça dot dot slash dot slash dot slash
dot slash Isso nos levará
três pais. E o segundo argumento será o nome
da função. Então eu vou
chamá-lo de Mostrar janela. E eu coloco isso na parte interna
do nó G em vez
de na parte externa. Aqui vamos nós. E vou seguir em frente e
fazer essa função antes que eu esqueça na minha janela principal de exibição de
scripts. Agora, quando nosso botão
for pressionado, emitiremos o sinal,
emitiremos nosso
sinal personalizado, mostraremos E vamos fazer uma vírgula
porque vamos passar alguns detalhes adicionais ou informações
adicionais
com ela, certo? Então, vamos
passar uma textura, então vou criar
uma nova classificação de variável. Então, miniatura, isso
vai ser igual à textura da nossa imagem de anime Então, essa será a miniatura desse objeto
específico E estamos pegando essa textura
e vamos enviá-la com nossos sinais. Enviaremos
esses dados e também precisaremos
enviar nossa sinopse Nosso título e gêneros. Isso é muita
informação aqui. E nós vamos ter que
fazer isso também. Então, vamos ver. Aqui embaixo, vamos ver que
nosso título é igual. E obtemos isso do título de
anime aqui. Título do anime. E tudo isso é coisa que já
definimos como texto. E isso vai nos dizer
que os gêneros não estão definidos. Gêneros iguais ao texto de gêneros de anime. E a sinopse já está
definida na parte superior. Incrível. Tudo bem Então, agora estamos enviando todas as
nossas informações. Agora, vou
copiar todos esses argumentos para
colocá-los na ordem correta. Volte para o meu script principal, minha função show window, e eu vou colar
meus argumentos. Então, o que vamos
fazer com isso é, bem, primeiro de tudo, precisamos realmente
mostrar nossa janela. Então, vou colocar
minha janela lá embaixo e vou chamar o Pop up
centralizado para que ele apareça
diretamente na tela central Em seguida, vou pegar
minha miniatura aqui, a textura destruída
dentro da janela e definir sua textura como miniatura,
os dados que Precisamos definir o título do anime. O texto do título do anime é igual ao título, livros de
anime, tags,
texto é igual a gêneros, e A sinopse do anime faz. Texto. Adicione texto com um rótulo de rich text, adicione texto e sinopse Agora, no momento, não
passamos nenhuma sinopse para nossos objetos Então, precisaremos
dar uma olhada e ver como isso está estruturado. Então, vou descomentar
meu arquivo JCN stringify aqui. Dessa forma, posso dar uma olhada no nome da sinopse Tenho certeza de que se chama apenas sinopse, mas
quero ter Vou seguir em
frente, fazer
isso e fazer uma pesquisa. Eles atacam Titã novamente. E sim, sim, sim, tudo bem. Isso não precisa estar lá. Vocês não deveriam
ter isso aí. Eu esqueci de deletar isso mais cedo. Mas obtivemos a saída, e essa é a principal coisa
que eu estava procurando. E sim, é
chamado apenas de sinopses. Tudo bem Então, vamos ver. Quando inserimos,
transformamos em nossos gêneros um texto na extensão e
na miniatura Definimos a textura,
definimos o texto. E pouco antes de
adicioná-lo, adicionar nosso objeto, certo, nossa instância de resultado, vamos prosseguir e
precisamos definir a sinopse Então eu não faço sinopse. Claro que eu escrevi isso corretamente. Sim, sim, todas as letras minúsculas são
iguais à sinopse do anime. Tudo bem. Vou seguir em frente
e fazer isso de novo. Diga “Attack on Titan Search”. Vou passar.
Não temos problemas. Fantástico. Agora nossa visão está
meio que em todo lugar, o que é um pouco lamentável Mas tenho certeza de que podemos
corrigir isso apenas definindo manualmente o tamanho. Mas vou continuar
e clicar em Exibir, então devemos pegar essa miniatura Bem, vamos pegar um que tenha duas tags e gêneros E como você pode ver, eu preciso mudar
tudo para a direita. E é para isso que serve esse
teste, certo? Então, vamos ver o inspetor de títulos, então vou
deixá-lo rodando aqui E vamos tentar que 2025250 tenha uma
aparência melhor. E eu vou fazer a mesma
coisa com nossas tags, 250, e nossa sinopse 250 Então, tudo
foi mudado. E vamos ver, podemos rolar para
baixo em nossa
sinopse se precisarmos Tudo bem O reg. Nós temos isso configurado. Agora, não
podemos realmente fechar nossa janela, então precisamos corrigir isso
por nós mesmos aqui. Então, vamos prosseguir
e fechar isso. E para isso, teremos
que ir até nossa janela e conectar o sinal fechado solicitado. Vamos nos conectar à nossa rede principal, e eu vou seguir
em frente e aumentá-la. Vá. Então, quando recebermos
uma solicitação para fechar, isso acontecerá sempre que
clicarmos no X no canto. Tudo o que vamos fazer é esconder a janela. Então,
vamos abrir nossa janela e vamos ligar para
Hide. Tão simples quanto isso. E vamos ver. O que
podemos fazer com nossa caixa aqui? Bem, poderíamos ampliá-lo. E o nosso título de anime? Acredito que podemos simplesmente
configurá-lo para clicar. Tudo bem Agora, quais
são especificamente esses
modos de embalagem automática? Como não se tratava de força
herbácea, digamos que o texto é dividido arbitrariamente dentro do retângulo que delimita
o nariz , permitindo linhas quebradas. Tudo bem, isso soa bem. Quebra suave, não. Tudo bem, então vou usar o Word Smart Ah. Talvez não usemos isso. Isso acabou completamente com tudo
. Arbitrário. Não. Palavra pode ir com palavra, mas isso simplesmente não está acontecendo. Então, certo, o que
eu vou fazer é clicar em Clip text. Eu não gosto que tenha subido um pouco. Esse tamanho
só foi para um. Você não é assim.
Então, o que podemos fazer aqui? Então, o que vou fazer
para corrigir isso é que eu só quero meu botão esteja dentro da
minha caixa de informações animadas aqui Dessa forma, está apenas de acordo com nosso gênero de título e depois com nosso botão. E eu configurei meu botão
para Não sou um botão. Eu coloquei minha caixa de informações de anime aqui. Eu defino a horizontal para
preencher e giro para expandir. E agora o que vou fazer é definir o título do anime, o
alinhamento horizontal para estar no centro e
no centro vertical E eu vou fazer
a mesma coisa com os gêneros aqui, no centro E então, para o texto do botão, o texto do botão
deve estar centralizado, embora isso deva ser bom Então, vamos
abrir isso, ver como está agora. Digamos, ataque a Piton, tudo
bem, então vamos lá. Então, ele se estende por toda
parte. Oh, esse foi
um pouco longe demais. Mas isso pode ser um
problema meu. Pode definir alguma coisa, fazer
asneiras. Talvez tenha sido
isso aí. Vamos tentar novamente e
ter certeza de que foi apenas algo que
eu deixei em Ok, então isso está se estendendo até
o fim,
porque temos um título
ou algo em andamento . Tudo bem Bem, você pode ver, é só uma questão de
brincar com essas coisas agora e conseguir
algo que você goste. Então, talvez eu
volte às minhas informações sobre anime e talvez eu simplesmente
desligue isso. Talvez eu simplesmente desligue o Phil. Eu apenas volto e dou uma olhada. Veja, está tudo bem agora. Novamente, nossos botões
não têm quase o mesmo tamanho, então é só uma questão
de brincar com e encontrar algo que você goste
visualmente depois disso. Mas o
importante é que podemos descer e escolher um,
bum, e aí está,
infelizmente, escolhemos um
sem etiquetas na SEC. Embora
já tenhamos selecionado um, podemos selecionar outro, e isso não afeta nada. Ainda temos as tags de título, e eu posso ver todo o texto
padrão lá. Precisamos esclarecer
isso. Então, vamos ver. Estará em
nosso roteiro principal. Vamos ver antes de definirmos
esse texto. Onde está? Bem, se eu apagar isso por culpa, ainda
teremos?
Essa é a pergunta. Vamos ver. Sinopse,
exclua tudo isso E vamos ver se isso funciona, ou se ainda temos uma sinopse
antiga Certo, e vamos continuar
com isso de novo. Engraçado, eu nunca assisti isso de
verdade. Então, vamos ver. Em seu primeiro dia do ensino médio. Em seu primeiro dia de Junior. Ok, então, sim, ainda
temos um texto antigo lá. Portanto, precisamos ter certeza de apagar isso quando definimos a
sinopse do título em um texto Então, antes de fazermos isso,
vamos
pegar nosso ponto de sinopse do anime A etiqueta de texto grande tem
uma função clara. E eu deveria resolver isso. Agora, vamos dar uma olhada. Primeiro no primeiro dia do ensino médio,
segundo, Gabby
Braun e O próximo, Aaron Yeager. Provavelmente
pronunciou isso errado. Há séculos atrás, matança de animais em Van. Não se sinta ameaçado pelos
Titãs. Aí está. Então, nós o atualizamos
completamente agora e ele está recebendo o
texto certo. Tudo bem Portanto, cabe a você decidir como deseja fazer
essa aparência visual. Mas é isso que
vamos fazer. É assim que estamos fazendo
e o que temos feito. Alternativamente, se você quisesse. Vou te mostrar uma maneira
alternativa fazer isso se você não quiser usar um botão lá. E para manter isso, em vez de
usar uma destruição de textura aqui, poderíamos entrar e eu simplesmente clicar com o botão
direito do mouse e clicar em Alterar tipo e
mudar
isso para um botão de textura E então eu posso simplesmente arrastar
isso para o normal. E agora temos esse botão. Vamos ver se precisamos
ajustar algum texto. Acho que não o faríamos, mas,
na verdade, talvez fosse o texto, talvez
precisemos especificar
que ele vai para o normal. Vamos com Narrato desta vez. E sim, tudo bem. Então
isso o quebraria. Portanto, teríamos que especificar
especificamente que era o normal. Vou dar uma olhada aqui.
Informações sobre anime. Isso. E vai ser
textura, sublinhado, normal. Ok. Então isso
seria apenas uma pequena idade. Então, onde definimos nossa textura de imagem
animada, faça textura de pontos, sublinhado,
normal, assim E isso deve ser
apenas uma mudança de linha. E isso funciona
corretamente, certo? Colocamos nossas miniaturas lá e elas pareciam exatamente iguais E como agora é um
botão que tem nossa textura,
poderíamos configurá-lo, de forma que,
ao clicarmos nele, em vez de
clicarmos no
botão de visualização, certo? Assim, podemos levar a imagem
animada para lá. Vou copiar a mesma cópia. Então, em nossa imagem animada,
clico em Pressionar e vou garantir que elas tenham
a mesma função E agora você vai ver W we in? Posso clicar na miniatura, pegar nosso Windows e
sublinhar Mudança. Mas essas são duas linhas de textura que
tivemos que mudar. Se você quiser seguir esse caminho, o botão, então podemos
clicar nele, aí está. E isso pode ser um pouco mais natural ou um pouco
melhor para você, e então você pode simplesmente
remover completamente esse botão juntos. Então, vou
escondê-lo da vista para que
você possa vê-lo dessa maneira. E então você pode ter
lá. Então aí está. Veja como você pode fazer isso com nossos
botões lá. E então, se você
quiser se livrar disso, basta fazer com que a miniatura real seja
clicável para abrir nossa
janela Isso é tudo que você precisa fazer. Conecte um sinal de pressão,
altere-o de um registro de textura para um botão de textura e, em seguida, altere toda a textura de pontos da imagem
animada
para a textura de pontos da imagem animada sublinhado normal E aí está. Então, resolvemos tudo isso, vou comentar que está sendo impresso
aqui novamente. Mais uma vez, não
precisamos mais disso. Aqui vamos nós. Então, agora podemos pesquisar animes, obter uma sinopse, ver as tags, obter títulos e percorrer uma grande lista antiga de 1.000 ou 2000 ou
quantas quisermos E será uma
chamada de API por pesquisa. Hum, na verdade, serão
duas APIs inicialmente, porque temos que adicionar
nossos gêneros lá Vou simplesmente descomentar isso.
Coloque isso de volta lá. Vocês não deveriam
ter comentado isso. Acabei de
desligar isso apenas para economizar em algumas chamadas de API enquanto
testava algumas coisas, certo? Agora podemos entrar
e fazer, tipo, busca
sobrenatural e congelada Não congelado. É congelante o que eu estava procurando. Congelando. Não procure nada por sobrenatural. Que tal fantasia? Interessante Então, não estamos
conseguindo nada lá. Se formos para No gender,
há brisa. Ficção científica. Isso é o que poderia ter sido o
que eu estava procurando. Ação Di Pi.
Vibração intensa. Eu gostaria. Então, eu estava
completamente desvendado meu segredo só para
ter certeza de que funcionava, certo? Vamos para a pesquisa de ações. E aí está.
Só temos uma ação. Então, se tivermos tudo isso, se formos ao drama,
teremos ainda menos. Podemos ver que podemos filtrá-lo cada vez mais se
quisermos usar os gêneros Temos que preencher uma pesquisa, mas os gêneros são leiloados Tudo bem, então
aí está. Aí está. Temos nossos pequenos pop-ups.
Nós temos nossas informações. Temos nossas buscas.
Então aí está. Agora você tem
um aplicativo de desktop que pode ser usado para talvez se
encontrar samatam Talvez encontre algo para
assistir quando estiver entediado. E eu encorajaria você a seguir em frente e adicionar
mais recursos a isso. Talvez adicione uma
lista de favoritos, se quiser, ou uma lista de observação ou algo assim. Dessa forma, você tem algo
que pode acompanhar. Tudo bem. Isso é tudo
para esta seção. E
continuaremos com a próxima semana, onde
falaremos sobre algumas das personalizações
mais
avançadas para falaremos sobre algumas das personalizações
mais realmente fazer com que seus programas pareçam mais
exclusivos e com uma aparência mais
profissional
73. Fontes: Tudo bem, então uma
das coisas que podemos fazer
para que nosso aplicativo ou jogos se destaquem e sejam mais exclusivos ou tenham uma aparência mais
profissional Bem, uma dessas
coisas são as fontes. Agora, as fontes podem ser muito
examinadas, especialmente por desenvolvedores mais novos, mas as fontes podem mudar todo
o campo do seu
jogo ou software E é como quando
você tem uma fonte para, digamos, um restaurante, certo? Se você tem uma fonte
que tem apenas um pouco de inclinação para a
direita e seus caracteres, temos a impressão, quer percebamos ou não que é algo gordo, certo? Temos a sensação de que
essas letras se movem rapidamente com elas se
inclinando desse jeito, especialmente se estiverem
inclinadas para a direita Então, com essa impressão, podemos assumir
internamente que este
é um restaurante de fast food E temos tudo isso
sem nem mesmo saber o nome do lugar ou que
tipo de lugar é, quão grande é, que
tipo de comida serve. Não sabemos nada,
exceto que as letras em sua
placa estão inclinadas. Isso mostra o quão
poderosas as fontes podem ser. Pense se você estivesse
jogando say dead so Oh, not dead souls. Almas negras. Dead souls é uma coisa completamente
diferente, mas imagine que você estivesse jogando dark souls e tivéssemos
essa fonte alegre Há por todo o lugar. Não seria, não se encaixaria porque não teria
o mesmo tipo de vibração Certo? Eu me sentiria mal colocado Isso o distrairia
da sensação do jogo ou diminuiria a seriedade
do jogo e os tons sérios
que ele emite Portanto, as fontes podem ser muito
poderosas quando usadas. Portanto, é importante não
ignorar essas coisas. Então, vou
ver nossos resultados de anime e vou usar nosso título
aqui para que possamos ter uma
boa visão dele. Agora, sem tocar em
nenhuma personalização real, vou
entrar e ir para a seção do moide dentro
do inspetor com meu título
selecionado E você já pode ver
que temos cores para a fonte, a sombra e o contorno Então, se eu definir a fonte como branca, talvez defina a sombra como um
pouco mais transparente. Está bem? Temos
algo acontecendo aqui. Podemos passar para a próxima seção, que são constantes. Podemos dar um deslocamento
à sombra. OK. Então, agora temos
o texto saindo da página. Podemos dar a isso um tamanho de contorno que realmente torne nosso
texto muito mais visível Sombra no contorno. Nós
poderíamos fazer isso também. Isso realmente vai melhorar
nossas sombras lá embaixo. E poderíamos adicionar um espaçamento entre linhas. Podemos reduzir os tamanhos de fonte, e poderíamos, vamos até 23. E nesse caso, todas as opções
que realmente temos aqui, mas vamos aumentar um pouco mais
o deslocamento aqui,
e um pouco mais
o deslocamento aqui, talvez mudemos
a sombra para ficar um pouco mais púrpura. Ok, que
possamos ter mais
desses tons frios E agora vamos em frente e se executarmos nossa cena principal,
eu vou seguir em frente. Faremos nosso ataque usual
em HTonfmersearch. E você já pode
ver que, embora não
tenhamos feito muita coisa, na verdade, apenas adicionar esse contorno
a esse texto padrão aqui já
fez com que esse texto se destacasse e se destacasse muito mais para
você E quase não fizemos nada. Assim, você pode ver o quão
importante até mesmo pequenos ajustes suas fontes podem ser Agora, você está preso a essas fontes
padrão, é claro. Porque, na verdade, podemos usar
algumas fontes personalizadas. Vá em frente e desligue
tudo isso. Se entrarmos
na seção de fontes, podemos usar uma fonte personalizada aqui. Não quer
desligar lá. Tudo bem. Vou
abrir o
menu suspenso aqui e selecionar
um novo arquivo de fonte. Tudo bem. E eu
vou abrir isso sem conseguir visualizar a fonte. Opa. Tudo bem. Ele aparece em quatro pontos. Não precisamos selecionar
nenhuma opção como costumávamos
fazer em três pontos X. Então, acabei de baixar
um arquivo de fonte aqui Está no formato TTF, e vou
arrastá-lo
para a seção de fontes, e você pode ver,
desse jeito, que temos uma nova fonte Agora, não temos
muitas opções definidas,
mas, como você pode ver, mas, como você pode ver, ainda
podemos voltar
aqui e ajustar nossos lados e tudo o que está do lado
de fora aqui e ainda ter os mesmos
controles que tínhamos antes E como eu disse,
até mesmo colocando um esboço. Isso. Até mesmo colocar um esboço
realmente fará com que isso se destaque. Basta adicionar um
pequeno fator a ele. Tudo bem. Agora, no
Goto four aqui, parece que podemos adicionar variações
completas Então, podemos ter nosso vínculo básico. Você pode configurar alguns
títulos alternativos por precaução. E você pode definir diferentes
características: forro, figuras de estilo
antigo,
conjuntos estilísticos Então você pode realmente vir
aqui e começar a personalizar
detalhes muito específicos em suas fontes Assim, você pode ir quase tão
detalhadamente quanto quiser. Mas o que é ótimo é o fato de podermos
controlar o tamanho da fonte, mesmo que não
tenhamos uma fonte personalizada em bind no momento Isso nos permite
ter pelo menos um pouco mais de controle sobre
a aparência geral, e sempre podemos escolher
uma fonte posteriormente, o
que, novamente, é ótimo
para prototipagem, possamos publicar algo
rapidamente Mas lá vamos nós. Se pudermos usar
fontes personalizadas e você ver se eu reiniciei isso, Oh, a
fonte desapareceu. Aqui vamos nós. Aí você vê. Você pode ter fontes completamente
novas simplesmente arrastando nosso
arquivo, ele usa TTF,
e acredito que você também pode
usá-lo em um arquivo OTF Mas é tão simples quanto arrastar o arquivo até a seção de fontes
dos thmovides E podemos ver se continuarmos repetidamente,
faremos isso
bem rápido novamente e
diremos que não restringiremos a pesquisa E aí você dá
uma olhada nisso. Linda. Agora, isso obviamente
é um pouco grande
demais para alguns de
nossos títulos aqui, mas você entendeu. Agora, você teria que
entrar e alterar cada parte da sua interface de usuário, e isso pode ser extremamente irritante ou levar
muito tempo para acabar sendo feito E há uma maneira rápida
de seguir em frente
e fazer algo assim E fazer isso nos
levaria ao próximo vídeo, onde
começaremos a falar sobre temas. H.
74. Temas personalizados: Tudo bem. Agora, eu disse que
haveria uma maneira mais fácil aplicar sua fonte a tudo, e essa maneira mais
fácil será por meio do que chamamos de
fontes ou temas. Então, podemos entrar e eu vou dar um zoom aqui
,
e um tema se aplicará
aos nós ativados, bem
como a tudo o
que tem a ver com ele. Então, se o colocarmos em
nosso nó principal aqui, tudo em nossa cena terá esse
tema aplicado a ele. Então é assim que você faria um tema
escuro e um tema claro. dois exemplos, basta
trocar arquivo
do tema e
tudo mudará Então, se viermos aqui
com nosso nó principal selecionado, que é nosso
nó de controle de nossa cena, vá até nosso inspetor, desça até o tema, vá até o menu suspenso
e selecione um novo tema E você
notará, na parte inferior, agora
temos essa guia de tema
e, ao abri-la, podemos
ver todas as nossas opções. E essas são nossas prévias de todos
os nossos botões, controles deslizantes, como você vê aqui Assim, podemos brincar e basicamente ver como tudo
vai ficar, mesmo que não tenhamos
coisas em cena. Tudo bem, então essa prévia
é fantástica para nós aqui. Agora, temos um novo tema e podemos incluir nossa fonte. Vou pegar nossa fonte
e, como você vê
no lado direito, lado daqui,
temos uma fonte padrão. Se eu simplesmente arrastá-lo, agora tudo compartilha
essa fonte tão rápido. Tudo é compartilhado.
O que é fantástico, claro. Mas e
todo o resto, certo? E se quisermos
tornar as coisas mais únicas, com uma aparência mais especial? Bem, podemos seguir em
frente e continuar gerenciando os itens. E com isso, isso abrirá uma nova cena que
espero capturar aqui Isso não foi capturado. Um momento. Experimente o Windows
7. Lá vamos nós. Tudo bem, então temos
nosso gerente aqui, e eu
vou para Importar itens. E no tema Editor, vou clicar em
Selecionar tudo
na parte inferior. Importação selecionada. E lá vamos nós. Eu posso ir em frente
e sair daqui
quando tudo estiver pronto. E agora eu tenho todos os meus itens. Agora, eu posso controlar tudo
do inspetor aqui. Você pode ver todas as coisas
diferentes, desde caixa giratória, barras de
progresso, todos os meus pop-ups,
painéis,
botão
de opção, botões de menu,
rótulos, edições de linha,
à direita, meus controles deslizantes, contêineres e toneladas e
toneladas de coisas que não
usamos em nossa caixa de seleção butts Tudo pode ser modificado aqui no
lado direito, certo? Então, podemos usar as cores
dos nossos botões aqui, certo? E vemos que a
cor da fonte é branca, e você pode ver que ela mudou
para branco em nossa cena, bem
como em nossa prévia. Podemos dizer foco da fonte ou cor de foco
da fonte, certo? Talvez seja mais vermelho. Então, algo parecido. Incrível. Agora, quando eu
passo o mouse sobre o botão, você pode ver, agora podemos visualmente quando nosso
mouse está passando o mouse sobre ele. Da nossa prévia
porque, obviamente, não
podemos fazer isso aqui
porque não está rodando, mas podemos testá-la
em nossa prévia aqui. E, como eu disse, se
você não quiser
passar por tudo
no inspetor, você pode realmente fazer
isso aqui na
seção
do gerenciador de temas, aqui na guia Então, estamos editando nosso botão, então vou
abri-lo, e você verá uma lista
enorme aqui. E me dê um momento para
isso. Vou te mostrar isso. Tudo bem. Então, como eu estava dizendo, tudo o que você
vê ao lado aqui será mostrado
quando abrirmos isso, para que você possa ver tudo aqui, todas as partes que
adicionamos para edição. Então, estávamos editando o botão. Então, se eu abrir isso, podemos ver todas as mesmas propriedades estão
aqui, mas não só isso, elas também estão organizadas maneira que você
imagina que sejam. E você também pode vir aqui
e renomeá-los. Se você não gosta do tamanho do contorno, pode renomeá-lo como
quiser Aqui estão todas as nossas cores. Portanto, é muito fácil
para nós fazer isso. Entramos na fonte. Não, tenho aquele
tamanho do contorno, tamanho da fonte, isso. Então, vamos dar uma olhada aqui, esses pequenos não
temas, mas o estilo. Então, vamos ao normal, um normal, mas aqui. Eu vou fazer um estilo de caixa
plana. Só espere um
segundo. Os temas parecem ter um
pequeno problema . Mas tudo bem. Abra isso. E você vê essa abertura
aqui no inspetor, então você pode querer
usar o inspetor de qualquer maneira, mas não precisa E veja, agora entre,
eu posso adicionar bordas aqui. Assim, podemos adicionar essa
largura de borda em nossos botões, bem
como, é claro, selecionar a cor de nossas bordas. Podemos usar verde brilhante e
começar a adicioná-los. Então, podemos fazer algo
assim, se quisermos. Mas o que podemos
fazer é
entrar aqui e
simplesmente adicionar cantos. Podemos arredondar nossos cantos. E agora, sem precisar
fazer nada complicado, temos esses belos botões
arredondados
e, como coisas como o botão
de opção vêm do botão base, tudo
isso também está sendo
arredondado. E se você quisesse
ser muito mais extremo, por exemplo, pronto. Estamos chegando mais perto de criar um botão cada vez mais redondo aqui e cada vez mais perto apenas criar
um botão circular Veja, isso só
vai nos permitir ir até certo ponto com esses botões reais, então tenha isso em mente. Mesmo assim, temos pelo menos,
na minha opinião, botões
bonitos que parecem mais bonitos do que
aqueles retângulos quadrados pontiagudos. Cantos arredondados
sempre parecem mais bonitos para mim. Talvez você prefira os pontos, mas eu sempre prefiro sete apenas um
canto ligeiramente arredondado, certo? Então, mesmo que entremos
com, tipo, três, certo? Em nossos cantos, para mim, isso ainda pareceria pelo
menos um pouco melhor do que ter esses pontos Mas você pode vir
aqui e alterá-los
completamente o quanto quiser. E então, sempre que estiver satisfeito em modificar todos os diferentes
aspectos do seu tema, basta acessar
o menu suspenso aqui e salvar seu tema E você pode fazer isso algumas vezes
e sempre que estiver pronto sempre que quiser ter
a opção de
alterar temas diferentes, tudo o que você precisa fazer é
carregar o tema e colocá-lo na propriedade do
tema aqui. E você pode fazer isso
em código, certo? Basta acessar a
propriedade do tema e carregar seu arquivo de tema
nela. E aí está. Você aplicou seu tema. Você tem diferentes opções de
tema inseridas. Tudo bem, então se você quiser depois de configurar
alguns temas, agora você pode obviamente
configurá-lo com um botão de alternância claro e
escuro Então, se eu voltasse para
Hootie aqui por um segundo. Se prosseguirmos e definirmos
isso para, vamos ver. Não é um botão de alternância. É um botão de verificação do botão
de entrada e pesquisa. É assim que eles são
chamados aqui. Vou seguir em frente e
trazer isso para cá. Isso realmente não vai importar. E o estilo é a
razão pela qual temos essa experiência. Tudo bem por enquanto. Então, digamos que temos
esse botão de verificação. Vou seguir em frente e apertar
o sinal de pressão alternado anexá-lo ao meu script principal E tudo o que vou fazer é porque esse tipo de coisa surgiu,
porque eu não sei, os temas parecem fazer com
que as coisas parem , pelo menos do meu
lado, o tempo todo Então, se eu vier até aqui e, com base em se está
pressionado ou não, certo, podemos carregar temas
diferentes. Então, vou dizer se o
botão for pressionado porque esse é o argumento que está
sendo transmitido, logo quando o
ativamos, se o botão for pressionado Então, se for verdade, se estiver ativado,
vamos configurá-lo para o tema dois. Caso contrário, entraremos e o
definiremos como tema um, guarde isso. E tudo o que estamos fazendo é obter o nó em
que está, certo? Portanto, não precisamos digitar self, mas eu gosto de fazer isso de qualquer maneira, obtendo a propriedade do tema e apenas carregando
nosso arquivo de tema. É tudo o que estamos fazendo. Agora é quando eu executo isso. Eu posso simplesmente clicar nesse botão E assim, podemos alternar entre o modo claro e o escuro Portanto, é
tão simples quanto isso: se
você quiser trocar temas, será
demorado e
criar criar e
criar todos os
temas diferentes que deseja ter Embora o lado positivo seja que, se você quiser apenas
ter um
tema claro e escuro e, claro, continuando, se
quiser criar vários outros temas,
você pode manter esses arquivos de tema pois os salvamos
como um tema, certo? Você pode pegá-los e
trazê-los para outros projetos no futuro,
e você pode simplesmente se inscrever, e agora você só tem um tema
claro e um escuro pronto para tudo, certo? Todos os seus projetos futuros. Mas é tão simples quanto isso. É uma linha de código
para mudar o tema. É tão simples quanto isso. Defina a propriedade do tema igual
para carregar seu arquivo de tema. Tudo bem. Portanto, os temas
são poderosos. Eles podem ser mesmo se
você quiser
definir sua fonte para todos os
diferentes tipos de nós. Em vez de perder tempo,
basta criar um tema, colocar sua fonte lá
e pronto Tudo bem. Agora, farei mais uma anotação
aqui se você
quiser remover algo
do seu tema. Reserve esse momento porque
, obviamente, isso vai ficar bloqueado por um segundo por causa temas, por qualquer
motivo, certo? Então, digamos que queremos
remover algo do nosso tema porque talvez
não precisemos dele ou isso não
afete nosso projeto, seja o que for. Tudo bem. Podemos simplesmente
acessar o botão Gerenciar itens aqui e abrir isso e clicar novamente, certo? Podemos simplesmente editar itens. Podemos encontrar algo
como editor, editor trolls pop-up, predefinição de
cores, mas,
editando o cinto, aí mesmo,
a ajuda no Então, todas essas coisas que estão aqui
em cima que não importam. Eles não nos afetam,
então podemos vir aqui e
podemos simplesmente começar a excluir todas essas coisas que não importam Dessa forma, também começa a
parecer um pouco mais limpo. Claro, você não
precisava trazer isso aqui para começar. Você só pode trazer
itens selecionados se quiser. Mas se você vai
criar um tema, acho melhor
fazer isso para todos eles de qualquer maneira. Dessa forma, você pode, como eu disse, simplesmente incluir o tema
em qualquer projeto e estar pronto
para começar imediatamente. Aí está.
Veja como você pode remover coisas que talvez não queira mais fazer parte
do seu tema. Aí está. Temas
muito poderosos, muito úteis, dão ao seu programa
uma aparência mais profissional, fazem com que pareça menos padrão, especialmente entre
outros desenvolvedores do Goto e permitem que você tenha mais personalização
para seus usuários,
clientes, clientes, etc Agora, obviamente, isso vai funcionar um pouco mais no lado do software
do que no lado da dívida do jogo, mas talvez você possa pensar algo único que
possa fazer no lado da jogabilidade Tudo bem, isso
bastará para este. seguir, falaremos
sobre como fazer com que nossas janelas realmente se abram e façam parte do sistema
operacional controlado. E o que quero dizer com isso
é que, quando chegamos, sei que isso é difícil
de ver agora porque
mexemos com temas Vou me livrar deles
por padrão, aqui mesmo. Essa janela que
temos todo tipo de
bagunçada agora Não podemos movê-lo, certo? Tipo, vai ficar preso
dentro dessa janela. Então, vamos fazer isso em sua própria janela e ser controlados
pelo sistema operacional.
75. Várias janelas: Tudo bem, vamos falar sobre ter janelas controladas pelo sistema operacional E o que quero dizer com isso é que você vê como essa janela aqui é sua própria janela controlada
pelo sistema operacional. Não podemos nos mover Não
necessariamente o movemos para qualquer lugar. Está meio que lá. Espere um pouco. Isso
será muito mais fácil. Um momento. Tudo bem,
se eu chegar ao modo de exibição aqui
e dermos uma olhada Podemos ver que esta é sua
própria janela independente que pode ser movida
em qualquer ponto. Não está preso dentro
do editor principal aqui, certo? No entanto, Oh, isso é
um pouco grande demais. No entanto, se
entrássemos e, novamente,
realizássemos nossa busca, digamos que Titã Isso tem sido uma coisa do tempo. Tudo bem, desça, sempre que
encontrarmos um programa, clique nele. E agora em nossas janelas você pode ver como está preso aqui, certo? Não é grátis. E a razão disso
é porque ele está embutido na
nossa janela principal aqui. Então não vai ser
, não é grátis, certo? Não é controlado pelo
nosso sistema operacional. Então é isso que eu vou te
mostrar como fazer. Dessa forma, você pode ter
sua própria janela. Então, por exemplo, você
abre uma janela de configurações, um painel de configurações, um painel de
preferências ao
criar um software. Você pode pegar isso e mover a janela. Não precisa ficar
preso em nenhum aplicativo. Correndo. E isso é
praticamente uma coisa padrão. Portanto, seria bom que soubéssemos
como fazer isso. Então, se desligarmos
isso bem rápido, basta entrar em nosso script e podemos corrigir isso com uma
linha de código e pronto. Então, obtemos uma janela de visualização, e ela
obterá a janela de visualização da nossa janela atual, certo A janela principal do nosso programa. E tudo o que vamos
fazer é Goey incorporar subjanelas e definir
essa propriedade É isso mesmo. Agora, se executarmos isso, podemos ver que isso ainda funciona
exatamente da mesma forma o tempo todo. E se prosseguirmos
e fizermos nossa busca. Plastic Attack Titan, seja o que for, analisamos nossos resultados Não importa. Blá. Vamos escolher isso? Agora
é sua própria janela. Podemos movê-lo,
ter seu próprio título de janela e ele é criado e gerenciado pelo próprio
sistema operacional. Três tamanhos e
podemos fazer tudo o que
pudermos , assim como nossas outras janelas. Portanto, é tão simples quanto isso adicionar esse pequeno
recurso. Seria muito útil. Outro exemplo disso
é se você quisesse
ter , digamos, uma guia como essa, para poder despontar, assim
como você pode fazer aqui Nós apenas o retiramos. Tudo bem. Aqui vamos nós. Então, abrimos a configuração aqui e podemos simplesmente
dizer fazer flutuar. E agora é sua
própria janela, certo? E é gerenciado
pela operação. Então isso está funcionando da
mesma forma
que acabamos de fazer com os subventos
embutidos de Dewey O que temos que fazer é
fechá-lo e isso pode voltar para lá. E você pode fazer isso
com qualquer um aqui. Então, por exemplo, você pode fazer
isso com o script aqui. Você pode simplesmente clicar
nesse botão aqui, e agora a
janela do script é própria. E se você tiver dois monitores, agora
você pode simplesmente colocá-los
no segundo monitor sozinho, e você pode se
concentrar na cena real em uma tela e
seu código no. Então, você pode ver como janelas
flutuantes
como essa seria útil apenas durante desenvolvimento e,
dependendo do seu aplicativo, seria mais produtivo para
o usuário final, o que ,
é
claro, significa que seu produto será mais apreciado , mais aproveitado e se
tornará uma preferência, e aquele pequeno recurso, que uma linha de
código poderia
aumente a base de usuários do seu
programa, seu aplicativo. Claro, seu programa
tem que ser bom para começar, mas sim. Mas aí está. Isso é tudo o que precisamos fazer
para criar essas janelas flutuantes
e ter nossas janelas controladas pelo nosso sistema
operacional em vez de ficarem presas
dentro do nosso sistema principal.
76. Barras de menu: Então, vamos falar sobre como podemos
criar uma barra de menu. Agora, por barras de menu, estou me referindo ao que
você vê na parte superior da maioria dos aplicativos com
coisas como arquivo, edição, visualização, talvez
efeitos de camada e assim por diante. Tudo bem. Agora, como
podemos ir em frente e fazer isso? Bem, eu tenho uma nova
cena aqui usando
uma barra de menu como meu nó raiz aqui. E eu apenas coloco uma cor reta no fundo
porque, sem ela, você realmente não tem
nada lá atrás e não pode realmente
diferenciá-la do resto
do seu programa Agora, dependendo do seu design e da aparência que você deseja que suas coisas
fiquem, você pode querer isso. Outras vezes, você pode querer
algo para diferenciar, mesmo que seja apenas uma tonalidade
ligeiramente diferente plano
de fundo padrão com o qual você está trabalhando Então, para mim, eu só quero
usar esse vermelho escuro, meio marrom E se você estiver curioso, a
cor hexadecimal é 391715 OK. Agora, o que podemos fazer? Como
podemos adicionar barras e brincos Se continuarmos jogando isso, terei
que capturar isso para você aqui
em apenas um momento. Oh, não, isso captura
automaticamente. Fantástico. É um pouco grande. Então, vou
diminuir um pouco. Mas, como você pode ver, é
claro que não
há nada em que possamos clicar. É só um bar.
Nada acontece. Então, não é muito interessante. Então, como podemos realmente adicionar
itens a essas barras de menu, é
claro, podemos
fazer isso por meio de código. Mas, na verdade, podemos
nos livrar de parte disso usando outro nó. E se você realmente
quiser , se tiver apenas itens de menu
simples, essa também seria a
maneira mais rápida de fazer isso Tudo bem, então vamos
entrar na barra de menu
e, se apenas pesquisarmos o menu
dentro do nó de criação de novo
, caso já tenha passado algum tempo e você não tenha visto isso
por algum motivo, vá em frente e
apareça novamente, ali mesmo Vamos prosseguir e pesquisar
no menu, e obtemos a barra de menu, mas o que queremos é o botão de
menu neste momento. E agora, com esse botão de menu, podemos prosseguir e
chamá-lo de botão Bo, por exemplo, dar a ele um
bom nome como esse. O texto, é claro,
seria File, Bio, não Bilk. Tudo bem, vamos lá.
E eu só vou me certificar de que é de bom
tamanho, preencha. E este é o
ponto em que agora podemos entrar, abrir nossa cena e executá-la. E você verá
se clicarmos nele. Nós meio que temos esse
pequeno
pop-up aqui, mas
não há nada lá dentro. Agora, a maneira mais fácil de adicionar coisas
a ele seria dentro
do nosso botão de menu. Temos essa seção
chamada itens. Podemos dizer Adicionar elemento, certo? Então, podemos dizer como novo arquivo, adicionar elemento aberto, adicionar novo. Talvez tenhamos salvado, e vamos adicionar
mais um para ser rápido. E está tudo bem
aí no inspetor. Então, se isso é tudo que você precisa para
cada um dos botões do menu ,
pronto.
Você tem isso. Agora você pode clicar
nele e só precisa fornecer um pouco
de código para criá-los. Claro, isso também significa que
podemos simplesmente duplicar nosso botão, deslizá-lo, é claro, alterar as opções que
você quiser
e temos um
segundo botão de menu Agora, eu só vou
ter um deles
configurado aqui só para te mostrar. Mas se você só precisa menus
simples como esses,
isso é tudo que você precisa fazer. Agora, se você quiser ter
um menu que se
destaque um pouco em termos de passar o mouse sobre ele, certo, e então ele
abre outro menu, se você quiser fazer
algo assim,
teremos que entrar no código para acessá-lo Agora, eu tenho meu script na
minha barra de menu. Você pode configurá-los nos botões do
menu, se quiser. Dessa forma, cada botão
pode se controlar, que provavelmente seria
a maneira melhor e mais inteligente fazer isso se você estivesse
criando um produto real Então, para mim, como eu só tenho
um botão de menu aqui, não
é grande coisa. Mas, novamente, se você tivesse, talvez, cinco
botões diferentes, talvez alguns deles tivessem
vários menus diferentes, então você provavelmente
vai querer pelo
menos dividi-los
em cada botão dessa forma. Tudo bem. Então, a primeira coisa
que vou fazer é mostrar como
podemos adicionar esses botões. Com esse botão do meu menu, vou excluir um novo arquivo, abrir, salvar e sair. Portanto, não tenho itens
aqui no inspetor e vou mostrar
como podemos
adicioná-los por meio do Código Tudo bem, então eu vou
criar uma variável. Vamos prepará-lo. Bar, vamos chamá-lo de botão Bile. E esse será,
claro, nosso botão de arquivo. A classe em que podemos
convertê-lo é um botão de menu. Tudo bem. Então,
temos controle disso Agora podemos usar Flebuton Dot. E nós apenas dizemos adicionar item, acredito que é para nós aqui. Oh, não, erro meu.
Na verdade, precisamos acessar o pop-up porque é um menu
pop-up que aparece sozinho Então, queremos que apareça um pop-up. Agora podemos criar uma
variável aqui, por exemplo, podemos dizer arquivo, podemos
chamá-lo de menu Arquivo, que é, obviamente, um menu pop-up. Lá vamos nós. Agora
podemos defini-lo como igual ao botão de arquivo dot Get pop-up. E tudo o que temos que fazer
agora é bilemnu dot, e podemos adicionar mensagens instantâneas E podemos ver o item do ícone do anúncio, o que significa que podemos ter uma
imagem exibida lá. Então, se você quiser ter,
tipo, um pequeno
disquete exibido ao lado do
botão Salvar, você pode fazer isso Também temos itens de cheque. Então, se você quer ser algo que você pode simplesmente ativar e desativar, você pode fazer isso dessa forma. A verificação do rádio, que é
apenas o botão circular. E então temos novamente o item de
verificação e a verificação de rádio e tudo isso sem os ícones, e o submenu que
entraremos em breve E o que é esse item
multiestadual? Bem, vamos dar uma olhada nisso. Vou segurar a tecla
Control e clicar em. E ele adiciona um novo item de vários
estados com rótulo de texto. O rótulo é uma string,
depois maxmun of state, o estado padrão,
ND, Excel, vamos ver Ao contrário dos itens
binários normais, os multistatoms podem ter
mais de dois estados conforme definido pelo Cada pressão ativa o item, mas aumenta o estado em um. O valor padrão é definido
pelos estados padrão. Então, parece
que obtemos um aumento ou podemos ter vários estados. Então, toda vez que
clicamos no botão, talvez
ele mude de modo.
Vamos dar uma olhada nisso. Vamos mudar para definir
o estado como modo e definiremos o máximo
de estados como três. Tudo bem, então vamos
continuar e fazer isso. Vamos dar uma olhada
nesse estado múltiplo. Nós clicamos nele? Bem,
podemos clicar nele e não vemos
nada acontecendo. Mas se dermos
uma olhada , se dermos uma
olhada nisso,
poderíamos fazer com que os estados
afetassem poderíamos fazer com que os estados afetassem o que está acontecendo em
nosso projeto agora, como você vê
aqui, verdade, ele não vai fazer
nada sozinho, certo? É algo que exigirá coisas
adicionais para nos ajudar. Já algo como
um item de cheque, certo? Ligações me verificam. E se fôssemos executar
isso, mesmo que não
tenhamos nada aqui, podemos clicar nela,
e você pode ver que temos
essa pequena caixa de seleção e teríamos que
configurar a obtenção desse item
e definir a capacidade de verificação nele ou
na propriedade de verificação Tudo bem, então como podemos fazer isso? Vamos dar uma olhada em como
podemos adicionar nossos itens novamente. Podemos simplesmente dizer adicionar item, e dessa forma podemos colocá-lo
em uma string e fazer nosso novo arquivo, eu acho,
é como o chamamos. E neste ponto,
podemos seguir em frente e
podemos simplesmente copiar e colar essas informações. Então, podemos dizer que um novo arquivo está aberto. Acredito que nos salvamos aqui e depois desistimos. Tudo bem. Então, se fôssemos executar isso
e dar uma olhada em nosso menu, você veria que todas essas
opções estão aqui agora, assim como fizemos quando fizemos
isso por meio do inspetor Então, se você preferir fazer
isso em código, você pode. Mas se você só precisa de um menu
simples como esse, passar pelo
inspetor seria a maneira mais fácil ou rápida de
adicionar novos itens ao seu Agora, eu disse
que poderíamos ter novos ou arquivos que se
abririam em outros menus. E fazer isso, é um
pouco mais complicado. Nesse caso,
na verdade, precisamos criar um novo menu
pop-up para isso. Então, eu vou salvar New pop. E isso será um menu
pop-up que será igual a um novo menu pop-up, menu
pop-up, ponto novo. E eu vou diminuir
um pouco isso. Novo ponto do menu pop-up.
Então, temos que ir até que possamos adicionar um novo item para
que possamos realmente vê-lo. Então, vamos dizer newpop
dot add item. Diremos que este é meu novo item. Tudo bem. E agora, para
criar isso ou adicioná-lo seu próprio pequeno menu que está dentro do nosso pop-up
original, basta ir em frente e pegar
o menu We get That File. E adicionamos um item de submenu. Agora, a primeira
coisa será uma corda. Então, vamos
dar uma olhada. Vamos chamar isso de
meu item de submenu. E o que vem a seguir? Em seguida, será o submenu real Esse será o novo menu
pop-up que criamos,
que eu chamo de novo Pop. E isso é tudo
que temos que colocar. Não precisamos colocar,
não precisamos colocar uma identificação. Ele será automaticamente
adicionado ao final
da nossa lista,
assim como acontece aqui. Então, se eu quisesse,
poderíamos ir em frente e definir isso. Ah, isso mesmo. Isso deveria ser uma string, que deveria ser
chamada de menu pop-up, mas vou seguir em frente
e garantir que
não tenhamos problemas com isso
no futuro. Nós iríamos em frente e
criaríamos um nome de ponto pop-up e daríamos um nome a ele, certo? Altere essa propriedade. Então,
vamos chamar esse novo nome pop. Opa, isso deveria ser uma string. Lá vamos nós. E mudamos
isso para a variante de string. Lá vamos nós. É isso que ele
vai procurar. Agora, se fôssemos
executá-lo, quando chegamos aqui? Como nome de índice na string de tipo. A que você está se referindo aqui? Vamos ver. Tudo bem,
veja o problema. Isso mesmo. E o nome GB Script
tem letras minúsculas. Eu estava trabalhando com a
C Sharp recentemente, então
misturei um pouco. E o outro problema é que
, na verdade, precisamos
incluir isso como parte do nosso menu. Então, vamos ao menu Arquivo, adicionamos Child e
adicionamos nosso novo menu pop-up. Lá vamos nós. Agora, quando o
executamos, você pode ver, temos nosso arquivo e o
abrimos. E agora temos esse item
chamado item de submenu, e ele tem uma seta
apontando para a direita, indicando que ele se abre, e há nosso novo item
lá. Este é meu novo item. Vá em frente e vamos chamar
tudo isso de nossa configuração. E vamos ao nosso
menu final, eu acredito, certo? E podemos nos conectar. E podemos conectar um
sinal. Qual sinal? Bem, isso não está claro. Então, vamos dar uma
olhada no menu pop-up. Métodos. Não estamos
analisando essas propriedades,
constantes, fontes, tamanhos de fonte,
ícones, estilos e sinais do tema constantes, fontes, tamanhos de fonte,
ícones, estilos e sinais Aqui vamos nós. Foco de ID, pressão de ID, pressão de índice
e alteração de menu. Esses são todos os sinais
que podemos dar uma olhada
e, pensando imediatamente nisso, imagino que
vamos analisar a identificação ou
a impressora de índice. Emitir quando um item
de algum índice é pressionado ou seu
acelerador é ativado O acelerador tem a ver com o multi, o multiestado E vamos dar uma
olhada no ID press, emitido quando um item de algum ID é pressionado ou está
acelerado Não, o ID I é negativo, explicitamente
ou devido ao estouro. Em vez
disso, ele retornará ao índice
correspondente Então, a questão é: qual
deles queremos ver? Bem, acho que
vou usar o índice para isso. Então, vou conectar
minha impressora indexadora. Entre, conecte a prensa indexadora. Será uma maleável
conectada ao Self. E diremos que
chamaremos esse item. Vou chamá-lo de item selecionado e criarei uma
nova função para ele. Bem, estou assumindo que
isso é indexadora, vamos ter
um índice aqui Essa é minha suposição, então
vou descobrir. Vou continuar
imprimindo o índice e veremos se isso funciona. Caso contrário,
teremos que voltar dar uma olhada no sinal novamente. Arquivo. Se eu clicar em sair, obtenho o Índice três,
novo arquivo, índice zero. Ok, então isso está funcionando
exatamente como eu imagino. E, claro, se eu
entrar no novo menu, este é meu novo item
aqui, clique nele. Não vou receber
nada porque isso
terá seu próprio sinal que você precisaria
conectar. Fizemos o índice funcionar. Incrível. O que podemos fazer agora? Bem, podemos dar uma olhada em nosso menu de biografia e ver
quais são nossas opções. Oh, espero que isso não tenha
aparecido o tempo todo. Então, os itens selecionados são indexados, e nosso item será apenas o menu de
arquivo, pegue o
texto do item e passe no índice. E então vamos
fazer uma declaração de partida aqui. Então, combine o item, e
vamos
combinar esse texto se for
igual a novo arquivo, abrir, salvar e sair, e faremos o bloco de código
correspondente. Agora, para sair, vamos
fazer Get tree dot quit. Então, se executássemos isso e
selecionássemos sair do nosso menu, nosso programa deveria fechar. E isso acontece. Então é assim que você
configuraria isso
para fazer tudo o
que você precisa fazer. Obviamente, suas opções
serão diferentes e variarão de acordo com
seu aplicativo. Mas é assim que
você configura esses itens para
que funcionem. Então você tem que
conectar um sinal. No meu caso, estou usando o sinal de pressão do índice
em vez de um ID. E então eu estou apenas
passando o índice para que eu possa obter o texto dos itens. E então eu apenas combino
o texto e executo a seção apropriada do código. Tudo bem. Espero que tenha ficado claro. Espero não ter
bloqueado nada que fosse muito importante
enquanto passávamos por isso Mas é assim que você cria alguns menus para seus aplicativos,
se seguir a rota do
software. Obviamente, nem todos os programas
precisam das barras de menu, mas os que precisam,
será bom saber como fazer isso.
77. O que são partículas: Tudo bem, pessoal, bem-vindos de
volta. E vamos continuar falando
sobre partículas hoje. Agora, as partículas são um mundo
totalmente fascinante envolve as partículas e sistemas de
partículas e seu papel crucial
no desenvolvimento de jogos Os sistemas de partículas são uma ferramenta poderosa que nos permite criar efeitos visuais
fascinantes
adicionando um toque de magia
e realismo O que exatamente são sistemas de
partículas? Bem, imagine pequenas
entidades dinâmicas que poderiam surgir, se mover e interagir com o mundo de maneira caótica,
mas controlada Os sistemas de partículas são uma coleção
dessas pequenas entidades
conhecidas como partículas, e todas elas se juntam para formar efeitos impressionantes,
como fumaça, fogo,
faíscas, feitiços mágicos
e até coisas que você nem
imaginaria, como talvez morcegos
voando rapidamente para fora de uma caverna Essas podem ser
partículas. A magia dos sistemas de partículas está em sua capacidade de
criar a ilusão de fenômenos
complexos usando elementos individuais
simples, seja criando
um céu noturno estrelado ou uma Os sistemas de partículas
nos dão a flexibilidade de
criar experiências
imersivas e de cura visual para nossos jogadores Agora, você pode fazer isso
em dois D ou três D. E os sistemas, na maioria das vezes,
funcionarão da mesma forma. Pode haver algumas
pequenas diferenças. Uma delas, é claro, é aquela dimensão extra com a qual
temos que nos preocupar, o que é natural quando
passamos de dois D para vermelho. E é muito
fácil criar partículas no motor
Gatto aqui Como você pode ver aqui, acabei de adicionar algumas partículas de GPU
na minha cena Estou apenas usando o
ícone como minha textura. Tudo o que vou fazer é
processar o material e selecionar o material de processamento de
partículas E assim, você
pode ver que já temos partículas trabalhando no motor. Agora, tudo se resume a
ajustar e alterar vários valores diferentes para
fazer as coisas acontecerem Eale apenas aumentaria
a vida útil disso. E olha isso.
Isso é aumentar esses talvez 50% na quantidade. E aí está.
Temos isso simples, mas tecnicamente, é um sistema
de partículas apenas do ícone E quando você entra em
coisas como três D, pode usar esse sistema de
partículas para criar coisas
adicionais,
como efeitos climáticos como chuva e neve. Tudo bem Espero que isso tenha feito você saber
exatamente o que são as partículas, diferentes maneiras pelas quais
elas podem ser usadas,
e espero que tenha deixado você
um pouco animado para
começar a brincar com o sistema de
partículas sozinho
78. Criando um fogo em 2D: Tudo bem. Tudo o que tenho aqui são minhas partículas de GPU (dois
D) adicionadas em uma cena E a partir daqui, vamos
seguir em frente e
criar um efeito de fogo de dois D. Agora, você pode seguir
em frente e, claro, experimentar mais,
aumentar seu fogo, torná-lo algo um pouco
mais exclusivo para você. Se você quiser, hum,
vamos entrar. Agora, eu vou usar
um cigarro. O que é isso? Textura de fumaça. E você pode encontrá-los
em toda a Internet. Este vem
especificamente do
Kenny Particle Pack ou do Kenny's Particle Pack E você pode descobrir que acredito
que está no Kenny dot NL. Tem muitos ativos gratuitos para
você brincar. E então eu
vou pegar aquela
fumaça e trazê-la para minha textura. Para minhas
partículas aqui. E agora vou
processar o material aqui, clicar
na seta aqui e selecionar um
novo material de processamento de partículas Tudo bem. E
isso é o que eu tenho. Agora, isso é bem grande. Então, a primeira coisa que eu quero
fazer é
ajustar essa escala. E eu vou descer até
a seção de escala aqui
dentro do meu material. Vá até a curva de escala e
selecione uma nova textura de curva, abra-a, abra minha curva. E só porque eu já sei o que
vou colocar aqui, vou
descer para cerca de 0,34 para o lado esquerdo e o lado direito
virá totalmente para baixo E é com isso que
vou trabalhar. Agora, eu poderia voltar e ajustar isso mais tarde, mas é isso
que estou começando Tudo bem, então vamos
começar do início, aleatoriedade
temporal, tudo bem Encontro. Nós podemos fazer uma observação. Em certas situações, use uma esfera e você
pode contornar isso, mas vou
usar apenas um ponto. Bandeiras de partículas. Não
precisamos de nenhum desses. Direção. Bem, não
queremos ir a lugar nenhum no X, mas queremos ir para
algum lugar no Y. Agora queremos ir menos um, na
direção do Y,
porque queremos subir Gravidade, podemos simplesmente
remover se quisermos. E a velocidade inicial, vou seguir
em frente e dizer 32 Eu quero dar uma olhada. Isso realmente
não vai a lugar nenhum. Estamos aumentando um pouco esse
jogo com
isso, para que possamos ver que está subindo. E se eu simplesmente aumentar
minha vida útil para 2 segundos? Então, podemos ver que está
começando a tomar forma. Então, vou
continuar e brincar com alguns deles aqui. Vou reduzir meu
spread talvez até 16. Agora, não temos
muitas partículas. Estamos trabalhando apenas
com oito, então é por isso que está do jeito que está. Mas e se chegarmos ao
valor no topo aqui e talvez até mesmo chegarmos a 50? Ok, então isso é olhar um
pouco mais perto de um incêndio. E se eu mudar minha vida volta para uma, como isso parece? Parece que está tudo bem.
Acho que vou ajustar um pouco a minha escala
aqui no começo No momento, estou com 0,19
no início. Vamos
ver como isso vai acontecer. E, claro, com uma fogueira, precisaremos de um pouco de cor. Faça dentro da seção de cores, eu vou
para minha rampa de cores E, do menu suspenso, é
como uma nova textura gradiente. Para onde foi isso? Aí está. Então, vou clicar na
minha rampa de cores agora, clicar na minha textura gradiente. E agora vou clicar
na seção preta. Vou transformar isso em amarelo. Vou clicar na minha seção branca, puxá-la talvez até a metade e vou transformá-la em vermelha ou laranja Vou clicar
na minha textura em uma posição aleatória para
adicionar outro slot. E com isso,
vou diminuir totalmente
a
opacidade Agora, meio que temos aquele desvanecimento que você está
vendo aqui no topo E eu vou
adivinhar isso um pouco. Agora, vamos ver. Você pode dizer a diferença
se formos assim? Nós não podemos. Ok, então eu vou te mostrar esse pequeno truque mais tarde. Tudo bem. Portanto, temos nosso
amarelo, nosso laranja e uma seção transparente
dentro da minha rampa de cores Agora, para fazer com que pareça mais com fogo e não com essa
nuvem que estamos vendo, vou rolar até
o
material abaixo do item Canvas. Vou clicar no
menu suspenso. É como material de item de tela. E para o modo de mesclagem,
vou apenas
definir isso para adicionar. Tudo bem. Agora, com essa
única mudança de opção, já
temos algo que se parece muito mais com um incêndio Agora, se você quiser ter aquele centro
branco em seu fogo, então tudo que você precisa fazer é
pegar sua cor e ver como eu tenho Oh, você
não pode ver lá. Tudo bem. Um
momento. Tudo bem. Vou abrir aquela
captura de tela para você lá. Você vê como eu tenho minha
cor aqui na borda? Bem, se você quiser
aquele centro branco, o centro branco quente, tudo o que você precisa fazer é se
afastar um pouco da borda e ver que quanto
mais perto você
a puxa, maior
será a área branca
quente , então há uma pequena dica que você pode fazer para
a cor original. Vou
afastá-lo um pouco, talvez me
aproximar um pouco mais da laranja. Não queremos ir até a laranja, certo, porque não queremos que a
laranja se transforme em laranja Vou escolher uma
bela laranja amarela,
uma laranja dourada
e me afastar do centro da parte para obter
aquele lindo centro branco quente. Tudo bem. E com isso, basicamente
temos uma fogueira
toda acesa aqui. Agora, dependendo do que
você está procurando, a quantidade, certo, pode variar. Então, se formos para 12, podemos
obter algo assim, que perdemos aquele centro
branco quente, mas isso pode ser algo mais próximo do que
você está procurando. Oito era o padrão.
Portanto, dependendo do visual artístico que
você está procurando, você pode ajustar a
quantidade aqui para o que
for adequado para você e o que
você deseja E é por isso que
quando você está
vendo um incêndio, por exemplo, em um jogo, se você tem
uma máquina de especificações mais baixas, você pode perder vários quadros ao olhar para o fogo E então, quando você desvia o olhar, suas molduras
voltam a subir porque fogo pode conter uma tonelada
de partículas. Especialmente se estivermos falando
mais em três D. Eu suponho, mas
é por isso que as partículas
podem ter, digamos, 1.000 partes, e então cada uma dessas partes e então cada uma dessas partes terá
sua própria textura. Então, é quase como adicionar 1.000 sprites à sua tela, certo? De repente.
Bem, com isso, temos uma fogueira. Vou reduzir o
meu para 50 porque eu realmente não
sinto que precisamos de 100. E poderíamos entrar e brincar com algo como variação de
matiz aqui, que vai ajustar a tonalidade, que vai se
parecer com a Então, se disséssemos, aumente
o mínimo para talvez 0,2 e depois altere o
máximo para 0,6, ou, você sabe o que? Vamos aumentar o máximo até
o fim. E olha isso. Agora, em vez disso, temos esse fogo
mágico. Que estamos
chegando. Agora, poderíamos usar isso, já que está
na forma vertical, podemos usar isso para
algo como uma fogueira Agora, se fosse
para D, obviamente, provavelmente
tuitaríamos a
escala e tornaríamos as coisas ainda menores, ainda menores do que isso. Mas é claro que isso
vai depender do tamanho da textura que
você está usando para começar. Então você pode ver com
isso, podemos ter essas duas variações e ter
mais desse visual mágico. E, assim como outras seções, podemos adicionar uma curva se quisermos fazer isso
para nossa variação. E podemos
brincar com eles, e isso afetaria a base de. Embora a minha não esteja mudando. Isso é um pouco interessante. O valor mínimo
que tínhamos lá é zero. Muito interessante.
Não está afetando. Talvez seja um pequeno bug com essa curva ou algo assim
no momento. Eu não sei Mas você pode ver como a
variação de matiz pode instantaneamente
adicionar aquela sensação mágica a
ela com todas essas cores Se você quiser, talvez você possa ajustar o ângulo ou a velocidade
se quiser, isso terá a
ver com virar, certo Seu Texas entregando isso, então você vê
que se virarmos isso até o fim, isso é realmente girar
em mais uma bola Eu só vou
abaixar isso de volta. O orbital será como você vê, tudo
vai girar em uma órbita ao redor do seu
ponto aqui no meio Agora, com isso lá em cima, obviamente, isso não vai
fazer diferença, mas aqui está para
ver algumas filmagens. Agora, você pode obter
diferentes tipos de efeitos, e são todos esses pequenos
efeitos que nós meio
que juntamos juntamos para criar esses incríveis
efeitos visuais dentro dos jogos Mas acho que isso é tudo o que
precisamos abordar aqui, fornecer uma boa
base para partir? Obviamente, a vida útil quanto tempo
esse incêndio vai durar. Você vê a razão pela qual
damos uma pequena tragada lá. E isso porque os outros
incêndios ainda existem. E dissemos que tantos, 50 podem existir ao mesmo tempo. Eles duram 200 segundos, então eles vão
viver por um bom tempo. Mas você vê que em 1 segundo, obviamente, eles morrem rápido, então eles
continuarão reaparecendo Um tiro significa que
vai acontecer apenas uma vez, apenas uma popa rápida Então isso é algo
que você
usaria para algo
como uma explosão. A corrente está sendo emitida novamente
aqui no topo. E podemos adaptar isso facilmente. Então, se dissermos zero
na direção ali e você puder ver um
no X ali e ver se
aumentamos a
vida útil ou algo assim, você pode ver imediatamente como
podemos sair de uma fogueira E então, com alguns
pequenos ajustes, agora
podemos modificá-lo para
talvez um ataque de lança-chamas
ou um sopro de fogo consistente
para um dragão ou algo assim ou um sopro de fogo consistente
para um dragão ou E tudo o que precisamos fazer é
fazer talvez três
pequenos ajustes Mas, certo, vou evitar que
eu continue divagando. Vou seguir em frente e deixar
isso aí. Aí está. Seguimos em frente
e criamos um fogo em dois D para o nosso mundo. Então, se você quisesse adicionar
algo como fumaça, você simplesmente adicionaria isso como uma partícula
secundária, certo? Então, como um show rápido,
temos apenas outra partícula. Queremos que a partícula
esteja por trás do nosso fogo. Vou puxar minha
textura de fumaça de volta. Em um material de processamento de partículas, mude minha escala
com uma nova curva E tudo o que estamos fazendo
é seguir
as mesmas etapas que
fizemos anteriormente. Como fizemos antes. Mas
nós fomos com lá. Eu vou usar
cores em vez de uma rampa. Vou usar um cinza
escuro na minha cor aqui. Vamos definir nossa direção. Menos um no Y. Dê-nos alguma velocidade inicial Gravidade ajustada para zero. Minha propagação é
semelhante à fumaça. Também vou adicionar um
material a isso. Um item do Canvas apenas para que eu possa
adicioná-lo como aditivo. Nós pegamos algo um pouco mais fumegante, como você vê lá. E, como você vê, apenas
fazendo esses poucos ajustes, quase
temos a
aparência que queremos A quantidade aqui e oito, talvez
adicionemos algumas para 12, e tudo o que temos é que
não está durando muito. Vou seguir em frente e
a velocidade aumentar um pouco. Lá vamos nós. Vou
mover isso de volta. Você pode ver agora que temos essa
fumaça saindo do nosso fogo. Certo. Então aí está. Vou abaixar isso, aumentar minha fumaça um pouco mais. Mas eles têm essa simplicidade e aquelas poucas
reviravoltas desde o início E você vê que nós adicionamos
uma fumaça em nosso fogo. Tudo bem. Então, com isso, temos um incêndio. Temos fumaça com ela.
Isso bastará para este. Em seguida, vamos
dar uma olhada em como criar
um incêndio usando partículas
em três D. Dessa forma, você pode ter uma ideia de quão semelhantes e
diferentes dois D e
três D são ao
criar partículas e quanto do seu conhecimento será transferido de um para o outro.
79. Criando um fogo 3D: Tudo bem, pessoal,
vamos
criar um efeito de fogo novamente, mas desta vez em três D. Então eu só tenho uma cena em
três D aqui, e vou adicionar um grito Basta adicionar partículas GP três
D em nossa cena de três D. Agora, a princípio, você pode
estar um pouco confuso porque, de qualquer forma, não vê uma
textura em nenhum lugar. Bem, para criar esse
fogo, o que precisamos fazer, já que estamos usando dois sprites D vamos usar nossos passes de
entrega. Vá passar um. E no menu suspenso, vá em frente e selecione uma malha
simples. Abra isso. Agora, você vê que está apontado para cima. Obviamente, isso não vai funcionar porque vamos
ver isso,
você sabe, de um
lado assim, certo? Então, precisamos que ele fique de frente para nós
em vez de ficar de frente para o céu. Então, dentro da nossa passagem um, dentro da nossa
malha plana, olhamos para baixo. Vemos a orientação e podemos mudá-la para essas direções
diferentes. E se você ver configurado para X, podemos ver que ele estará
voltado para nós, o que é ótimo. Agora, o outro problema
que temos é que, obviamente, se virarmos,
o fogo, certo, o avião desaparece porque a
parte traseira não está renderizada Olhamos de lado, não
podemos realmente ver, então só podemos ver
de um lado. Isso não é ótimo. Precisamos fazer o que é chamado de outdoor Mas eu adiciono este outdoor a nós para que
possamos sempre
olhar para Vamos
adicionar material aqui logo abaixo nossa orientação e apenas
adicionar um material padrão. E lá dentro, se
entrarmos e rolarmos para baixo, veremos uma seção
chamada Billboard Agora, se abrirmos isso e
configurarmos o molde como ativado. Bem, parece que
simplesmente desapareceu de nós. Então, vamos tentar o porquê do outdoor. Bem, isso também não está funcionando. Que tal um cartaz de partículas. Agora você deve estar
se perguntando por que nenhuma dessas opções funciona
em cartazes E para nós, porque estamos
usando partículas aqui, na verdade
temos que definir
isso de uma maneira diferente. Então, nenhuma dessas opções de
outdoor realmente funcionará
para nós Então, para divulgar
isso adequadamente, temos que ir
até nosso material de processo e, é claro, adicionar esse processo
de
partículas E então, no desenho, você vê, ainda é da mesma
forma, nada mudou. Vamos até a
linha do transformador e a enviamos para Z ou Z,
outdoor, e ok,
nada Vamos passar para a próxima, ampla até a velocidade. Dê uma olhada. OK. Ok, parece que
nada está realmente funcionando aqui. Bem, isso é
interessante. Agora, você pode estar um pouco confuso. Por que nada está acontecendo? Por
que nada está acontecendo? E é por isso que é importante
que eu também queira examinar essa seção
de três D, em vez de apenas chamá-la de
partículas e dizer:
Ei, sua
transferência de conhecimento em dois D acabou, porque três D pode ser
um pouco confuso quando você não
trabalhou nela Então, com as linhas do transformador
definidas como cartazes Z ou Z, precisamos também
descer até nossa orientação
e mudá-la para
a face Z ou para a face Z. E agora podemos ver. E à medida que giramos, sempre
podemos ver isso. Sempre ficará de frente
para a câmera. Tudo bem, então isso é incrível. Então, agora podemos realmente
começar a trabalhar na criação desse comprador para nós. Bem, vamos
entrar no nosso material em
nosso avião, certo? Então, a gota passa por
um, nosso avião, dentro de lá, material
lido sob orientação. E dentro do Albedo, assim como nos três D normais,
tudo parece o Vamos
usar textura, e eu vou
trazer minha fumaça para dentro. E você verá que
tem um fundo preto. Bem, isso não é legal. Isso não é realmente
o que planejamos. Eu pensei, bem,
o que esperávamos. Então, o que fazemos para isso é
ir até
a seção de transparência e
defini-la como Alpha. E você tem outras opções
aqui: tesoura Alpha, hash
Alpha e profundidade de Agora, dependendo do que
você está fazendo, isso pode ter efeitos diferentes. Mas para nós, o único que queremos
especificamente é o Alpha aqui. E para o modo de mesclagem,
vamos configurá-lo para adicionar, assim como fizemos em
dois D, quando adicionamos aquele item de tela, material. Ok, agora estamos
chegando mais perto do que estamos
acostumados . A ligação realmente não importa. Podemos deixá-lo no verso
para que não renderize o outro lado, já que, de qualquer forma, nunca
vemos o outro lado. E isso é o que significa ligar. Então, se colocarmos na frente, ela ainda está lá, mas
não está renderizando na frente Está sendo renderizado na parte de trás, mas como a frente
está sempre voltada nós, nunca a veremos Então, vamos
configurá-lo ou deixá-lo
no padrão de voltar, porque
nunca vemos o verso. Nós
só vemos a frente. E isso também ajudará no desempenho de
seus jogos, se você estiver fazendo algo
em três D. Dessa forma, você basicamente não está
renderizando o que não pode ver Agora, para sombreado,
se girarmos, você verá que
fica escuro aqui E, obviamente, se for um
incêndio, ele tem sua própria luz, então não
faz sentido que o fogo seja escuro de um
lado e brilhante do outro. Então, vamos
entrar na
seção de sombreamento do nosso material
e, a partir de por pixel, vamos defini-la como
não Agora, a última coisa que
precisamos fazer dentro
desse material é,
sob o sombreador de vértice, ativar o uso como E se não usarmos isso, não
poderemos
usar a cor em
nossa partícula ou a variação de matiz ou a rampa de cores Não poderemos
usar nada disso. Só ficará branco liso
com isso desligado. Temos que usar a cor aqui
em Albedo, e pronto. Agora, obviamente,
não queremos isso. Queremos realmente usar
a rampa de cores nisso, então é por isso que
vamos usar esse albedo
e ativá-lo
sob a cor do vértice Tudo bem, então empate e passe. Podemos minimizar completamente
essa seção e pronto. Podemos simplesmente entrar especificamente no material
do processo
ou em nossas partículas. Agora, assim como antes,
temos nosso tempo, nossa forma de emissão
e tudo mais. Agora, como estamos em três
D, vou realmente
mudar nossa
forma de emissão para uma esfera e vou
definir meu rtus para 0,4 Agora, basicamente,
isso nos dará um pouco mais de profundidade
para que não pareça tão plano Sinalizadores de artigos, não
precisamos nos preocupar com
essa direção Bem, queremos ir na
outra direção, certo? Então, temos nosso conjunto Y, é negativo Y aqui? Bem, temos a gravidade nos
puxando para baixo. E se a baixa for negativa,
então queremos ser positivos. Então, vou apenas dizer
gravidade como zero e definir nosso Y como positivo com
uma direção. Velocidade inicial,
vou configurá-la para quatro. E a razão pela qual
estou indo tão baixo, você pode ver que quatro é na
verdade um número muito alto, enquanto que em dois D, quando
olhamos para pixels, é um número muito, muito pequeno. Agora, podemos vê-lo saindo
nessa enorme área direcional, e isso é porque
nosso spread é 45, então vamos reduzir isso
para algo como 12 Agora podemos ter
algo um pouco mais razoável
para um incêndio. Nós vamos. E mesmo assim, talvez
você queira baixá-lo
ainda mais do que isso. 12 parece que seria muito bom para fumar. E eu vou entrar e,
assim como fizemos antes, adicionar uma nova
textura curva à minha escala. E vou
reduzir isso para
começar e depois
reduzi-lo começar e depois
reduzi-lo até o final
e meio que encontrar algo aqui
que funcione E sim, acho que
ir de um a zero desse jeito com o tempo,
acho que vai ficar bem. Minha cor, vou
usar uma rampa de cores, uma nova textura gradiente. E, assim como antes,
vou
usar algum tipo de amarelo
aqui no início. Eu vou jogar laranja em
algum lugar lá dentro. No final,
seremos transparentes. Se eu simplesmente mudar isso,
pegue algo parecido, e acho que vou
jogar mais um taco laranja do outro lado Só para realmente afetar muita coisa lá. Eu não jogo preto no feijão. Só para obter
um maior gradiente de fogo, mas, como você vê,
está perfeitamente bem aqui Vou jogar outro
preto neste lado. Tudo bem. Então, desse jeito, estamos recebendo uma boa
fogueira aqui. E, claro,
dependendo da quantidade de partículas que você
deseja colocar aqui, talvez 200, como você vê, isso fará
uma grande diferença na aparência visual. Então, obviamente, oito não é o número que
queremos usar com isso. 50 que estávamos usando em
dois D é bastante decente. Portanto,
você provavelmente poderia usar 50 para desempenho em vez
de algo como 200, mas sempre poderia
escolher 200 se quisesse. Mas, na maioria das vezes, seguimos em frente e
recriamos nossos dois fogos D aqui em vermelho. E, claro, podemos entrar
e brincar com o Q para que possamos ter um fogo
mágico, criar nossa variação Que. Agora, vamos em frente e
podemos ver o rádio linear de
velocidade angular Você pode jogar com todas
essas coisas se quiser. Ângulo é
o ângulo em que a textura vai aparecer Então, se você quiser
brincar com isso, poderia. Então, se eu subir, digamos,
até 45 graus, isso vai dar
um pouco mais de variação e, com sorte, fazer com que
pareça menos copiar e colar, faça com que pareça um pouco mais bonito Mas, no geral, é isso. Todo o
resto será exatamente igual
a dois D aqui. Pequena configuração segura que
tivemos que fazer no início. E você verá essa esfera, se você mudar o raio da lança Quanto maior fizermos
isso, basicamente, maior será
o fogo. Eu só vou adiar
isso. D 0,4, apenas para olhar.
Sim, aí está Nós temos isso. Então,
algo que vou mencionar aqui é que, como
você está em três D, você terá um
ambiente mundial, é claro, e se quiser adicionar uma fumaça, será exatamente
o mesmo
que fizemos em dois D,
sem fumaça, faça a configuração como
fizemos em três D aqui e meio
que coloque-a dentro do fogo. Mas você vai ter um ambiente mundial em
três D em algum momento. Se você estiver fazendo
praticamente qualquer jogo de três D, especialmente se quiser ter algum tipo de pós-processamento. Então, com o ambiente mundial aqui, acabei de adicionar um à cena. E eu vou
para um novo ambiente, e é aqui que,
claro, você entra, e acho que
já falei sobre
isso em algum momento. Nós vamos entrar
e criar um céu. Isso é vir ao céu,
criar um novo céu. Eu digo céu rural assim. E podemos
preparar nossos céus para um jogo de três D. Mas o que você também pode fazer
neste ambiente mundial é que,
se descermos para
brilhar, ativá-lo Veja, nosso fogo tem
um pequeno brilho laranja ao redor e o que é bom,
especialmente com fogo aqui, no modo de
mistura, se o definirmos como
aditivo, dê uma olhada nisso aditivo, dê uma olhada Agora temos aquela aparência ardente saindo dela,
como uma flor, certo? E podemos ajustar a floração aqui. Se quisermos, eu posso ficar louco
muito rápido. É aí que
estaria sua opção de floração , se você
quisesse. E seu limite de HDR, você pode realmente entrar e
ajustar todas essas coisas, e você pode ver exatamente como isso
afetaria algo
como nosso Veja, nós até temos aquela
cintilação circulando. Eu só queria mostrar
como suas três partículas D podem ser afetadas pelo ambiente
mundial, por opções como sua floração,
seu modo de mesclagem, ter brilho ativado e
coisas assim Mas agora eu vou fazer isso
aqui para três partículas D.
80. Como codificar qualquer mecânico: Tudo bem, então vamos dar
uma olhada em como podemos codificar praticamente qualquer mecânica
que possamos imaginar Então, neste exemplo,
vamos criar um salto duplo para nossa pequena
plataforma ou personagem. E se pensarmos bem,
temos que saber que
vamos pular do chão
e pular uma vez no ar. Agora, para acompanhar essas duas vezes, precisamos saber
quantas vezes
pulamos para saber
se podemos ou não Então, para isso, vou
me concentrar nas variáveis aqui
para acompanhar isso, certo? Por padrão, a contagem de saltos
é zero. Tudo bem. E quando pulamos
do chão, obviamente, nossa contagem de saltos tem que
aumentar em um mais igual Legal. Agora, e quando não
estamos no chão? Mas quando não estamos no chão, podemos fazer a mesma coisa que
estamos fazendo aqui, onde
verificamos se pressionamos
nosso botão de pular, e aqui podemos dizer que contagem de
saltos é menor que dois. Tudo bem, então isso significa que
podemos pular quando temos zero e podemos pular quando
temos um em nosso balcão. Isso nos dá dois saltos, certo? Zero e um. E tudo o que vamos fazer aqui é
a mesma coisa que
fazemos quando normalmente pulamos, certo? Subimos e
aumentamos nossa contagem de saltos. Agora, você
notará um problema aqui. Vamos pular
uma vez no chão, outra no ar, certo? Temos nosso
salto duplo. Mas se tentarmos novamente, não funcionará. Estamos de volta a um único salto. Agora, por que você acha que é isso? Bem, é porque nossa contagem nunca reinicia em
nenhum momento, certo? Começa do zero, certo? Vamos dar uma olhada nisso.
Começamos do zero e pulamos. Isso é um, dois, três,
quatro, cinco, seis. Então, depois de darmos o salto duplo
inicial, já
estamos em dois ou mais. Portanto, essa afirmação nunca
será verdadeira, então nunca poderemos dar aquele
salto no ar novamente. O que significa que temos que redefinir essa contagem de saltos em algum momento. Então, quando reiniciaremos essa contagem? Quando deixaremos o jogador
dar seu salto duplo de volta? Bem, normalmente,
você permite que eles saltem duas vezes para trás depois pousarem de volta no chão. Está bem? Bem, como sabemos
quando estamos no chão? Bem, já temos esse
cheque, se estivermos no chão. Então, se estivermos no chão, a contagem de
saltos é igual a zero, certo Acabamos de reiniciá-lo. E agora
temos aquele salto duplo. Aqui vamos nós. Então, tudo o que você precisa
fazer é diminuir a velocidade, pensar no problema e no que
você está tentando fazer. Pense nisso
logicamente e
divida-o em cada etapa E se você fizer isso, poderá
virtualmente criar qualquer mecânica que
você possa imaginar. Tudo bem Então, veja como você pode
criar muito bem qualquer mecânica que você possa imaginar
para seus jogos E isso também pode funcionar
da mesma forma com criação do seu software. É claro, não
dando saltos, mas talvez implementando
um recurso ou
implementando uma ferramenta,
uma ação ou algo assim
81. Gravidade e salto: Tudo bem, então aqui vamos
falar sobre como podemos adicionar gravidade e criar
um salto em nosso jogo E eu estou fazendo isso aqui na seção de bônus
deles porque realmente
não se encaixa
com Roger, por si só Embora você possa
voltar se quiser, você pode tentar adicionar isso
em três versões D. Mas loucura, porque se você estiver fazendo dois
jogos D ou três jogos D, provavelmente
precisará ser capaz de pular
ou trabalhar com a gravidade
em algum momento Então, eu vou jogar
isso aqui de qualquer maneira. Então, o que temos aqui primeiro,
vou explicar, são os três tipos de corpos físicos. O corpo estático, que está aqui
embaixo, está funcionando como nosso piso, e o corpo estático
é algo que não se move, não importa
o que aconteça com ele. Então você pode pensar nisso
como o chão, uma árvore, um prédio, certo? É algo que
não vai se mover e não vai
ter nenhum impacto. O corpo rígido de dois D aqui, que está do lado direito, na nossa foto
já está por padrão Configure para que a física seja
aplicada a ele. Então, isso é algo
com o qual apenas interagimos,
trocamos com o qual apenas interagimos, por algo
como talvez uma bola futebol, certo Correndo pelo
campo, chutando. Ou se você já jogou Sky Rim, toda a bagunça, a comida, as rodinhas de queijo que
voam por todo lugar quando você corre ou
usa barulho para Da, Esses são todos corpos rígidos. É algo que age quando algo interage com ele
ou a força é aplicada a ele Agora, se fizéssemos isso, você veria que o corpo
rígido
cai diretamente por causa da física
natural, e o
corpo estático não se move, então é por isso que o
usamos como piso E, claro, outras coisas,
como edifícios e outras coisas. Agora, não importa que tipo de corpo
físico usemos aqui, você tem uma forma de colisão, e isso define a forma desse corpo físico específico E todos eles
têm sprites apenas para que possamos ver visualmente
o que está acontecendo aqui E o
corpo do nosso personagem, como você sabe, de Froger, é
o que
usamos quando o jogador tem o controle
do personagem definido e ele recebe contribuições Agora, existem raras ocasiões
em que você pode
usar um corpo rígido, mas isso será
muito específico e especializado nesse momento Vamos dar uma
olhada no corpo do nosso personagem. Eu tenho duas variáveis aqui, uma para nossa gravidade,
outra para nossa altura. Tudo bem. E dentro
do nosso processo aqui. Agora, novamente, isso provavelmente
deveria estar sob o processo de física
apenas porque está relacionado ao movimento de nossos
corpos físicos. Mas, neste exemplo, está tudo bem. Agora, para usá-los
em vez de movimento, vamos usar a velocidade, e um corpo de personagem já tem uma propriedade de velocidade
por padrão como um X de quatro pontos. Então, para usar essa propriedade de
velocidade,
temos que usar mover e
deslizar ou mover e colidir Vou usar
mover e deslizar aqui. Agora, vamos pensar sobre isso. Quando queremos que a
gravidade se aplique? Bem, só queremos que seja aplicado
quando nosso personagem estiver
no ar , para que ele possa ser trazido de volta à terra, à direita, de volta ao solo. Ok, bem, como podemos dizer se o personagem
não está no chão, então adicionar gravidade a ele. Bem, podemos fazer exatamente isso. Goto tem uma função
embutida chamada is on the floor, que realiza essa verificação
para vermos se estamos no chão,
que, por padrão, a direção de cima está na direção Y
negativa, então isso significa positivo Y. Quando colidimos com
algo abaixo de nós, isso será
considerado Então, podemos dizer se e
dissemos não está no chão. E precisamos adicionar nossa
gravidade a isso, certo? Então, pegamos nossa velocidade e estamos em dois D e
será o mesmo em três D. Acessamos nosso eixo Y. E definimos isso
com nossa gravidade. Agora, não definimos isso como igual à nossa gravidade porque queremos que nossa gravidade
nos puxe para baixo, certo? E à medida que você cai, você
ganha impulso e se move
cada vez mais rápido É assim que as coisas funcionam, e
se o positivo está caindo, precisamos adicionar mais
igual Tudo bem? Então, se continuarmos jogando isso, veremos agora que o corpo do
nosso personagem cai exatamente como nosso
corpo rígido. Jogue isso de novo. Certo? Portanto, nosso corpo de
personagem pode cair um pouco
mais rápido do que nosso corpo gelado, mas você vê que eles funcionam da mesma forma Então é assim que você aplicaria a
gravidade a um personagem em algum tipo de corpo
físico. Tudo bem. Então, agora,
que tal pular Bem, eu tenho uma variável
lá em cima para a minha altura de salto, e isso vai representar
a velocidade que temos
subindo no ar Bem, quando podemos pular?
Bem, só podemos pular quando estamos
no chão, certo? Então, em vez de verificar quando não
estamos no chão, queremos verificar se
estamos no chão. Está no chão. E podemos adicionar isso como um
segundo argumento e apenas dizer, pressionando nosso botão de pular, ou podemos tê-lo como um recuo
separado aqui, se isso fizer sentido para você, que for mais fácil Seria mais limpo ter as duas declarações
em uma linha aqui. Mas, novamente, depende de você. Você só quer
tentar evitar muitas declarações aninhadas
sempre que puder Então, diremos se a entrada é ação e não
queremos dizer pressionada
porque
vamos ficar sentados
pulando como um Então, você quer dizer que acabou de
pressionar ou acabou de soltar. Então, sempre que nosso dedo
desce ou quando nosso
dedo sobe, quando
vamos dar um salto. E isso é preferência pessoal. Eu prefiro me exercitar, e vou colocar
isso no meu emprego. Como vamos subir Bem, fazemos o oposto
da gravidade, certo? Se a gravidade está nos puxando para baixo, fazemos o oposto para subir. Então, vamos obter nossa
velocidade em nosso eixo Y. E se o positivo nos puxa para baixo, vamos o negativo subir, então menos é igual à nossa Você vê que estamos no chão e podemos ir em frente e podemos pular. Então, desse jeito, já
criamos uma mecânica de salto simples para nós E você notará que não
podemos pular quando
estamos no ar. Se eu apertar o botão, só
podemos pular quando
atingirmos o chão. E se você quiser
se movimentar, trabalhe à esquerda e à direita com sua velocidade como na maioria dos jogos, você o fará Vai funcionar da
mesma forma que nosso salto aqui. Então, se prosseguirmos e verificarmos, vou
desistir do meu “se”, então vou me certificar de que ainda
estamos no chão. Eu vou dizer que minha
contribuição é ação. E é aqui que eu
vou dizer descanse enquanto estivermos
segurando para a esquerda ou para a direita, queremos nos mover. Eu
vou dizer que está certo. Em seguida, vamos
verificar nossa velocidade
e, desta vez,
vamos no eixo X porque estamos nos
movendo para a esquerda e para a direita Agora, se você estiver em três D, trabalhará com o eixo X e o eixo Z, e isso
obviamente terá mais dependência Mas para nós, eu
vou apenas ir aqui. Só precisamos do
ponto de velocidade X para este exemplo. E se formos para a direita, isso será positivo. E podemos ir em frente e
definir isso para algo como dez, e eu copiarei isso para
o outro lado ou para a esquerda, e se ficarmos à esquerda, isso
significa que é menos igual Eu vou fazer isso de outra forma se. Então, se pressionarmos para cima, pulamos e, em seguida, temos uma segunda cadeia de ondas separada aqui. Se pressionarmos para a direita,
vamos para um X positivo, caso
contrário, se
pressionarmos para a esquerda, vamos para menos X. Se dermos uma olhada, vamos lá Oh, lá vamos nós.
Deslizando para frente e para trás. Então, se você não quiser
ganhar essa velocidade, basta configurá-la para uma
velocidade de X igual, e isso fará com que você
vá tão Agora, como você pode ver, estamos
indo um pouco devagar aqui. Então, vamos ver o que acontece
se aumentarmos para 100. Tudo bem, então aí está. E ainda
podemos pular esse tempo todo. Agora, temos um problema
aqui, neste caso, veja se eu parar de pressionar para a
esquerda ou para a direita, M E continuará indo
nessa direção porque
isso nunca é definido. E é por isso que a cadeia
If tem que ser um bloco separado. Então, se pressionarmos para a direita, se pressionarmos para a esquerda, podemos terminar
essa cadeia com um s de Velocidade X igual E isso é tudo que temos que fazer. E agora ele vai parar de se mover quando pararmos de
pressionar nosso botão. E aí está o nosso
salto. Aqui vamos nós. Tudo bem, então aí está.
Veja como podemos trabalhar criando um salto, bem
como aplicando a
gravidade em seus jogos. E suponho que seja uma rápida demonstração de como você usaria a velocidade em vez da posição ou
algo parecido Tudo bem. Então, para esta apresentação rápida, basta mostrar como usar a gravidade e criar um salto, porque é algo que você
provavelmente precisará saber quando estiver criando
alguns shows para si
82. Salvando e carregando arquivos: Tudo bem, vamos falar
sobre como podemos salvar arquivos e os
diferentes tipos de arquivos. Então, vamos começar
com o arquivo de texto, arquivo texto
clássico aqui. Então, vamos em frente e podemos criar nossa função de salvamento aqui. Eu tenho uma cena aleatória aqui. Aquele roteiro nele. Não é grande coisa. Realmente não importa, está
salvo só para que eu possa executá-lo. E vou
criar minha função, salvar texto. Tudo bem. Então, o que precisamos fazer? Bem, pense
nisso logicamente. Precisamos abrir
um arquivo em algum lugar. Precisamos ter as
permissões de escrita, certo? Porque queremos escrever
um arquivo, salvá-lo. E queremos poder modificar o conteúdo
desse arquivo. Então, a linha Goto quatro com
D descreve dois aqui, podemos realmente fazer a maior
parte disso em uma Então, vou salvar var
F para ser meu arquivo aqui. E podemos fazer isso forma limpa só porque só será usado aqui
nesta única função Não é algo que será usado em todos os lugares. Então, ele só vai usar talvez uma
ou duas linhas, certo? Então, vamos obter a classe de acesso
ao arquivo, e isso é o que chamamos de aberto. Agora, mesmo que o
arquivo não exista, ainda
precisamos
abri-lo nesse local. Como corda,
vou passar Rs. Juntando o slosh,
devemos colocá-lo em nosso lado da pasta do
projeto aqui E vou dar um nome a ele
e
dizer que vou
chamá-lo de ponto de teste de texto TXT Então, o segundo argumento será o
modo que damos a ele. O que depende do
que estamos fazendo. Agora, estamos salvando
um pedaço de texto. Então, como eu disse,
queremos gravar nesse arquivo. Então, vamos
usar o ponto de acesso ao arquivo. E neste momento,
temos um arquivo. Temos um arquivo que foi aberto ou meu diretório específico com permissões para
escrever para esse arquivo. Tudo bem. Então, o que
precisamos fazer a seguir? Bem,
precisamos realmente armazenar
uma informação. Bem, para fazer isso,
precisamos ter uma
informação para armazenar. Então, estou entregando
o A MipSum downp com texto que usamos Então, vou criar
minha variável aqui na parte superior e chamá-la de não texto. Não quero confundir. Vamos chamar isso de talvez
uma história, certo? Talvez tenhamos um
aplicativo de história ou aplicativo de
redação, temos todo esse texto aqui
que vamos armazenar. Agora,
realmente não importa o que
seja , mas
vamos fazer isso, para que possamos acessar a F dot Store. E o que podemos fazer é dizer store string, store R, store line. Todas essas
opções diferentes aqui. No momento,
vou dizer linha da loja e vou contar história da loja. Todo o texto que está na história. Mas minha função pronta, vou seguir
em frente e chamar essa função de salvar animais de estimação. E quando eu executo isso, veja, inicial, parece que
nada aconteceu. Vamos fechar e
dar uma olhada em nossos arquivos. Vemos testes de texto, TXT aqui, e há
todo o conteúdo dentro deles OK. Então, como podemos realmente
carregar essas informações? Vou prosseguir e
deletar tudo que está lá. Então, podemos ver que a história é um D. Quando começamos isso? E vamos dar uma olhada em
como carregaríamos um pedaço de texto ou carregaríamos informações desse arquivo
de texto. Carregar texto. Agora, começando do mesmo jeito, temos que abrir nosso arquivo. Só que desta vez, queremos ter as permissões de leitura porque queremos ler o
conteúdo que está nele. Então leia em vez de escrever. E se usássemos a string de armazenamento, agora
podemos obter como texto o
que podemos chamar em nosso arquivo. Agora, no nosso caso, podemos seguir em
frente e atribuiríamos uma história igual a qualquer que seja esse
texto nessa situação. Então, se carregarmos texto, podemos então colocar o preenchimento automático
nele e imprimir a história. Se dermos uma olhada na saída. Podemos ver que nossa história
foi impressa, mas nossa história começou vazia. Obviamente, ele foi
carregado perfeitamente e retiramos todos os
nossos dados dele. Então essa parte é fantástica. Tudo bem, então vou mostrar
a vocês a loja VR, se você quiser escolher isso
em vez da linha da loja Você precisa armazenar suas variáveis individualmente, uma
por uma, assim. E se formos dar uma
olhada no arquivo depois, veremos que não podemos
realmente ver nada. Na verdade, não podemos ver as
informações que estão aqui. E pode haver uma coisa boa ou ruim
dependendo de você, eu suponho. Mas então, para carregar
essas informações, temos que usar o Get Navar, e temos que fazer
isso continuamente para
quantas variáveis armazenamos lá, e elas
voltarão na mesma ordem em
que foram salvas Portanto, você precisaria
se certificar de
carregá-los exatamente na mesma
ordem para salvá-los. Então, sempre que
você salvar o arquivo, você também precisará acessar sua função de carregamento e editá-la todas as vezes. Então você poderia fazer isso dessa maneira, e há algumas pessoas que fazem isso pessoalmente. Eu
não gosto disso. Se eu quiser armazenar vários
trechos de código como esse, ou vários
dados, devo dizer. Existem
maneiras melhores, na minha opinião. E um deles seria
apenas um arquivo JSON. E, claro, com isso,
basta salvá-lo e carregá-lo. Não importa se
adicionaremos dados a ele mais tarde
no futuro ou não. Então, vamos
dar uma olhada nisso. Vou seguir em frente
e colocar tudo isso lá embaixo. E vamos criar
uma função aqui, certo? Então, vamos dizer
funk, salve Jason. E como
salvaríamos o arquivo JCN? Bem, muito parecido com o
que fizemos anteriormente. Precisamos ter um arquivo
com permissões de escrita. Obviamente, não
vai ser uma mensagem de texto. Vai ser um JSON. E tudo o que temos que
fazer é armazenar a
linha aqui também. Então, podemos dizer ou não a linha de lojas
Var FDA. E a forma como
armazenamos isso seria json dot springify e passaríamos no
dicionário de informações Então, vou seguir em frente e
criar esse dicionário com as mesmas
três informações aqui. Tudo bem, então vamos
em frente e começamos com isso. Temos esse salvamento configurado, certo? Armazene, filtre, stringifique
e compre dados, o
que, obviamente, é o nosso
dicionário que temos aqui E chamamos nossa função de Salvar
Jason, então vamos executar isso. OK. Isso deve ser longo
o suficiente, feche-o e daremos uma olhada em nossos arquivos, e temos o JCNFle aqui Aí está. Então, essa é a aparência do nosso JSON
five agora. E agora podemos
analisar e atribuir
informações individuais, para que possamos dizer que experiência é igual
e, em seguida, extrair
a experiência disso, por exemplo,
ou podemos simplesmente pegar extrair
a experiência disso, por exemplo, a coisa
toda e dizer que meus dados são iguais aos nossos dados
temporários
depois de realmente os carregarmos Então você pode ver como isso
funcionaria muito melhor, e há até, é claro, o bar da loja, certo? mesmo se armazenássemos VR, teríamos vários conjuntos de
dicionários, certo? Portanto, temos várias JC Bile
ou JSON Lies lá. Mas vamos dar uma olhada em como
carregaríamos essas informações. Então, vou prosseguir e apagar tudo dos meus dados Por enquanto. Na verdade, não aceite isso. Eu só vou comentar isso para que não exista. Portanto, é a mesma
coisa como se fosse um dicionário vazio neste
momento. E vamos dar uma olhada em
como carregar um arquivo JSN. Criamos uma função, carregamos Jason e, assim como
tudo antes, precisamos ter um arquivo aberto com as permissões
corretas Então, vamos ler
em vez de escrever. Então, o
que fazemos de diferente? Bem, para isso,
na verdade precisaremos um objeto JSON porque não
podemos chamar a função de que
precisamos sem criar uma instância
real dela Então, vou dizer que
var J é igual a JSON. Novo. Tudo bem. E queremos
analisá-lo ou verificar se há algum
erro ao analisá-lo,
então vamos dizer que erro de análise é igual
a Serão J dot pars onde passaremos nosso
texto Val, certo? Ponto F como texto. E agora podemos verificar. Então, vamos
dizer que eu pars error. É igual a zero, certo? Então, o dobro é igual aqui. E se for zero, isso significa que não
tivemos problemas quando se tratou de analisar nossas
informações O que significa que é seguro
usar esses dados. Dessa forma, podemos
prosseguir e assinar meus dados. É igual a J porque, lembre-se, analisamos para
que as informações sejam armazenadas dentro
desse objeto JSON Dados do JG. E se viéssemos até aqui, poderíamos seguir em frente e até
fazer tudo
antes, certo? Então, imprimimos, por dados,
vemos que está vazio. Vá em frente e carregue nosso arquivo JCN, imprima seus dados
novamente depois. Veja aquela corrida. Veja, tínhamos um dicionário vazio e depois
carregamos tudo. Então aí está. E não importa em que ordem essas coisas estejam, pois
são pares de valores-chave. Pode ser uma
ordem alfabética,
pode ser uma ordem pode ser uma Desde que a chave e o
valor ainda
correspondam, não faria nenhuma diferença. Mas aí está.
É assim que você faria algo para arquivos JSON E, pessoalmente, eu costumava odiá-los e
evitá-los a todo custo. Eu estava sendo teimoso
na época
e
preferia, na época, ter usado dez arquivos de texto aleatórios em vez
de apenas um arquivo JSON Era um
hábito muito ruim na época, mas agora eu uso arquivos JSON, e essa é a minha forma
preferida de armazenar todas as minhas variáveis
pessoalmente, pelo menos Então, se você tem
várias variáveis que deseja
armazenar, aí está. Você pode ir em frente e definir isso. E mesmo que você
quisesse , mesmo que você apenas crie um dicionário
temporário, apenas para armazenar tudo. Mas esses não são os únicos
dados que podemos obter. Há mais dados. E, o mais importante,
aquele que realmente será importante para
desenvolvedores de software aqui, especialmente para desenvolvedores de jogos em que você deseja
organizar coisas como suas opções de áudio
e opções de exibição, usaremos o que é
chamado de arquivo de configuração Agora, um arquivo de configuração tem uma aparência muito
profissional. E se você modificou o sky room, toque no arquivo INI e saberá exatamente como será
. Parecem. Esses arquivos de configuração ou arquivos de I&I são
arquivos de configuração. E eles nos permitem manter
todas as nossas informações ainda mais limpas e organizadas do que algo como
um arquivo JSON, por exemplo Tudo bem, então eu vou empurrá-los para o lado, e vamos dizer
funk, save config E, ao contrário dos JSNFles, isso será salvo de
forma bem diferente E também precisaremos de um
dicionário para isso. Só essa, vou
chamar isso de minhas configurações. Então entramos e
teríamos,
digamos, as configurações de exibição aqui, certo? E isso seria definido
como seu próprio dicionário. Vou excluí-los. Dentro dessa tela, não
sei, talvez tenhamos um gráfico parecido. Bem, obviamente, será
capturado que predefinimos. Talvez o usuário tenha
média por padrão. E, novamente, talvez essa seja a
opção índice dois, você sabe, o que quer que
você vá armazenar o Alright, nós descemos Podemos fazer outra opção, diremos que há um lucian
e eu vou
continuar e
encher completamente o sabonete para nós com alguns exemplos de
informações Certo? Então, eu só tenho um exemplo de algumas configurações aqui de uma tela, um
pouco de áudio e, claro ,
você pode continuar ,
adicionar quantas informações
quiser, adicionar categorias,
diríamos. Então, este é o dicionário
que vamos
usar ao salvar e
carregar para configuração A primeira coisa que precisamos
fazer em nossa função de salvamento é ter uma configuração, então vou criar um
novo objeto de arquivo de configuração Arquivo de configuração. Novo. E agora usamos cerca de quatro loops. Vou dizer quatro
seções em configurações, configurações de
teclas, teclas de pontos. OK. Então, para todas
as nossas seções, haverá
exibição e áudio. Então, temos duas seções aqui. Então, para cada um
deles, e depois para P na seção de configurações, vamos dizer
tela interna e vamos dizer que, para cada uma dessas resoluções HDR
predefinidas, faça o próximo bloco de código Então, dentro do áudio, vamos fazer esse
mesmo bloco de código para a próxima coleção de
chaves dentro dessa seção. E o que vamos fazer aqui é
definir alguns valores. valor definido por pontos C e o valor definido
exigem alguns argumentos. Vai pegar nossa
seção, seguir nossa chave. E, em seguida,
seção de configurações e tecla. Eu tenho um erro de digitação
em algum lugar, não é? Sim, estou usando todas as letras minúsculas. Eles devem estar em
maiúsculas. Aqui vamos nós. Tudo bem, então definimos alguns valores dentro desse arquivo de conflito. E observe que ainda não
abrimos nosso arquivo nem nada. Então, fora desse loop
duplo de quatro, agora
chamamos C dot save e o local que
queremos salvar. Então, no nosso caso, res,
collash por isso. Então, quero observar aqui que
o local de salvamento em todos os dispositivos
será o local do usuário, e isso
será diferente com
base em cada plataforma, certo? Então, o Mac vai ser
diferente do Windows, que é diferente do Linux, vai ser
diferente do Android. Mas cada local terá uma localização de usuário e usuário. Então, estou usando o bred apenas
para que possamos vê-lo facilmente
no sistema de arquivos
sem precisar
fazer várias capturas e
tentar descobrir isso E vou salvar isso como meu arquivo INI de ponto de configuração. Então, se eu salvar essa configuração agora e a executarmos,
será tempo suficiente Nós damos uma olhada em
nossos sistemas de arquivos, e você pode ver aqui, eu
tenho um arquivo INI de configurações. Se eu abrir isso, você pode
ver como tudo está bem organizado em categorias
para tudo Assim, você pode ver como os arquivos de
configuração podem parecer muito profissionais e organizacionais E ainda
usando apenas um dicionário. Tecnicamente, estamos
usando dicionários
e outros dicionários para conseguir E as configurações seriam
minha maior preferência, como afirmei lá,
qualquer coisa relacionada às configurações ou preferências
em um jogo ou aplicativo Tudo bem. Então, como economizaríamos e não salvaríamos. Como carregaríamos o CIFo? Bem, vamos dar uma
olhada no carregamento de uma configuração. Carregar configuração. E, claro, precisaremos de um novo objeto de
configuração para usar E vamos verificar se há
erros como a primeira coisa que fazemos. Então, vamos salvar o
erro c dot load e vamos
procurar esse arquivo de configuração. Provavelmente vai ficar
perto do fundo, pessoal. Eu só vou
tocar no meu teclado. Tem T e
minhas configurações, eu e eu. Tudo bem. Então, agora saberemos se temos
algum erro ao carregar isso. Então, podemos dizer, se Opa. Erro, não é igual. OK. Então, se tivermos um erro ao carregar por qualquer motivo,
podemos prosseguir e simplesmente imprimir
outra coisa com falha no carregamento
e, na verdade, temos um código de
erro, esse também. Assim, podemos dizer código de erro
e fazer nossas porcentagens. Podemos simplesmente começar com o erro. Agora, se eu mantivesse o
controle e clicasse em OK, você pode ver que isso nos leva a esta seção aqui. Ok é zero. Mas se eu rolar para baixo, podemos ver todos os
diferentes códigos de erro aqui. Não consigo escrever, não consigo
abrir, já está em uso, sem permissão,
caminho incorreto, não encontrado,
corrompido, não é possível criar,
tempo limite não é possível se conectar, método não encontrado, link
não encontrado, erro de análise Portanto, você pode ver todos os
nossos códigos de erro aqui. Então, se você receber um código de erro, tudo o que você precisa fazer é
entrar aqui e pesquisá-lo e você poderá ver
exatamente qual era o problema. Tudo bem, agora, supondo que não
tivemos um erro, podemos seguir em frente e começar a
executar nossos quatro loops, e eu vou copiar
os mesmos dois Portanto, temos quatro seções
nas teclas de configurações,
quatro teclas e na seção de configurações. E dentro do
loop desta vez, vamos em frente e vemos. Definimos nossa seção
de configurações eu possa escrever isso corretamente Definimos isso igual às
informações que obtemos
do valor conf C dot t. E literalmente será
a mesma coisa aqui, seção de
configuração. Vai ser escrito de forma
um pouco diferente. Nós apenas passamos a seção E. E então
nosso último argumento, nós apenas o colocamos em nulo, que deve ser o padrão Mas coloque isso de qualquer maneira. E agora você percebe
se subirmos. Observe como nosso mestre
é caneta aqui, certo? Para áudio. E
vamos saber se isso funciona. Então, eu vou melhorar isso. Vou entrar
nas minhas configurações no INI e alterar Master 10-100, salvá-lo Agora vamos executar a configuração de carregamento. Vou ver um conjunto de dez
impresso aqui para o Master. Vamos pegar a
centena depois de carregarmos. Dê uma olhada no
Audiosecon Master 100, para que saibamos que foi carregado
com sucesso. Aí está. Veja como podemos salvar
e carregar arquivos de configuração, arquivos JSON e arquivos de texto Agora, cabe a você determinar qual tipo de arquivo será melhor para sua situação. Mas há como você pode
fazer todos os três.
83. Gatilhos e pedais: Tudo bem, então vamos falar
sobre ter suporte para os gatilhos
em um controlador,
como, você sabe, gatilho esquerdo, gatilho
direito, L dois,
R dois, o que é? ZL ou ZL e Z Z, ZR. Eu realmente não dou uma
olhada nos botões da Nintendo, mas acho que são esses. Agora, infelizmente, basta
clicar
no interruptor do
controlador , então eles
não são realmente gatilhos Eles não têm esse
tempo de viagem, esse caminho de viagem. Ou estão pressionados
ou não. Então, infelizmente, para mim, não
posso usá-los para
mostrar isso aqui. Então, o que vou usar é meu stick analógico para
simular isso para Mas você pode usar isso
para esses gatilhos. Você pode usar isso para
um manípulo analógico, por exemplo, quando você
avança, caminha
e, quando pressiona até o fim, seu personagem está
correndo, isso
seria seu personagem está
correndo, isso
seria outra utilidade para o que
vou mostrar aqui E outro uso,
que eu acho legal, é que você pode usar
esse conceito para apoiar
volantes e pedais se quiser, se estiver criando um
jogo de corrida, por exemplo Porque você tem aquele
tempo de viagem que funcionará
para girar o
volante,
até onde ele está girado para a
esquerda e para a direita, o
quanto o pedal do acelerador está pressionado, o
quanto a embreagem está pressionada , o
quanto o freio está pressionado quanto o freio Portanto, você pode usar isso
para uma ampla variedade de controladores, como você pode ver E você pode pensar em muitos usos
diferentes para isso. Um dos usos antigos é
pressionar o botão de atirar em parte do caminho,
eles miram, você pressiona
até o fim e eles atiram. Então, o que eu fiz
foi criar um botão de disparo nas configurações
do meu projeto. E, como eu disse,
vou usar
meu stick analógico para simular isso porque meus gatilhos Eles não funcionam assim. Este é um controle Super
Nintendo que foi modernizado, então eu não tenho o tipo
certo de gatilho
para mostrar Então, novamente, vou
usar meu stick analógico para emular o que você pode esperar Então, aqui na função de processo, vou imprimi-la para nós. Só para que você possa ver,
esse será o ponto de entrada. E vamos dizer:
obtenha força de ação. Agora, você vê
força e força brutas e pode se perguntar
qual é a diferença. A força bruta
ignorará a zona morta do seu
controle. Obter força
de ação levará em
consideração
a zona morta, certo? Então, eu vou usar
a força, e vou usar o
tiro para mostrar isso a vocês. Então, se prosseguirmos e executarmos isso, você pode ignorar isso.
Nada disso importa. E podemos simplesmente olhar aqui
embaixo na saída, e você verá que, quando eu começo a me
mover, fico para a direita, que você pode imaginar novamente, está se movendo para bloquear
ou para acionar Como você vê, estou na minha zona morta. E quando eu saio da
zona morta, aí está. Então você pode ver até que ponto
meu manípulo está sendo pressionado aqui até
chegarmos até o fim, o que no meu caso é cerca de 0,98 E você pode usar isso como eu estava situando ou sugerindo suas
diferentes situações Então agora eu posso ir
em frente e mostrar isso. E, às vezes, usando
meu manípulo analógico, vou usá-lo para caminhar e correr Então, diríamos que, se a entrada Dot obtiver
machado e força, ela diz atirar, o que
você pode imaginar apenas andando ou avançando
ou qualquer outra coisa. Se a intensidade da ação for
maior que,
digamos, 0,9, vamos
imprimir correndo ou fotografando e então
podemos ter outra, se ou então,
se alguma delas funcionar aqui. E
teremos quase a mesma situação aqui se entrarmos, obtermos a força de ação e atirarmos. É maior que, e
vamos dizer 0,01. Então, dessa forma, basicamente,
estamos
na zona morta e
sabemos que estamos nos movendo. Tudo o que vamos fazer é
imprimir,
e vamos dizer:
caminhar ou mirar, tudo bem Então, agora você verá
aqui embaixo. À medida que avançamos, se tivermos
nosso prigger pressionado parcialmente ou se nossa
pilha analógica se mover apenas parcialmente,
estamos andando ou mirando com nossa arma parcialmente ou se nossa
pilha analógica se mover apenas parcialmente,
estamos andando ou mirando com nossa arma. E quando formos
até o fim e a
mantivermos lá, estaremos correndo ou nossos
gatilhos pressionados até o
fim, vamos atirar Bam. Aí está. Então você pode
ver como isso é útil. Então você pode
transformar isso em série
em termos de pedal de
acelerador, certo Quão rápido ou qual será sua velocidade
, certo? Então você
terá, talvez, sua
velocidade multiplicada pela
sua força de ação, e isso mostrará o quão rápido você está indo e a mesma coisa
com a parada, certo? Se você está pressionando
o pedal do freio, você tem a rapidez com que
vai reduzir a velocidade Você vai pegar isso
e multiplicar pela força
do pedal do freio E agora, quanto mais você
pressiona , mais rápido
você vai parar Tudo bem Então é assim que você pode usar algo
como força de ação, que é algo que é meio que exclusivo
dos controladores Você também pode usá-lo no PC. O problema é com coisas como teclados e geralmente um botão é pressionado ou um muco,
então
pode ser zero ou um, e é por isso
que nos jogos
para PC, geralmente
temos um botão
alternativo, certo Você tem um botão de caminhada ou uma alavanca de caminhada que
você usaria,
enquanto no controle, você apenas move o manípulo analógico parcialmente em vez de totalmente.
84. Vibração do controlador: Tudo bem Então, aqui,
vou mostrar como você pode adicionar vibração ao seu jogo. E estamos falando sobre
coisas como seus controladores. Agora, eu não tenho um controle
que suporte vibração, então não consigo usar o controle no microfone ou na mesa ou qualquer coisa e deixar você ouvir. Então, vou ter que
acreditar na minha palavra sobre isso. E se você não acredita,
pode ler documentação, pesquisá-la, pesquisar e
descobrirá que receberá
a mesma resposta do que vou lhe dizer aqui. Então, sempre que você
quiser criar vibração, agora, por exemplo, eu poderia
colocar isso aqui, certo? Eu posso colocá-la aqui ou aqui em cima, você sabe, onde eu quiser que
essa vibração ocorra. E normalmente
você terá isso em um ataque forte ou quando
o jogador for atingido, por exemplo, sempre que quiser que essa
vibração ocorra. Então, para que isso aconteça, basta pegar
nossa classe de entrada, então o ponto de entrada inicia a vibração
Joy. E isso requer quatro argumentos. O primeiro é o dispositivo, e
esse é o ID do dispositivo aqui. E para o primeiro jogador,
seu primeiro controle, geralmente
será o dispositivo zero. Tudo bem Em seguida, teremos
a magnitude de nossos motores fracos. Agora, os motores fracos geralmente localizados na
parte superior do controle
e, obviamente, não são tão
fortes quanto a
parte inferior, porque
só querem tremer,
alguns chocalhando lá E a razão pela qual eles são
mais fracos na parte superior é porque você tem uma empunhadura mais firme
na parte inferior
do controle do que na parte superior Eles só querem sacudir isso. Eles não querem
dificultar o
aperto dos botões
ou fazer você errar. Então, podemos dizer 0,5 string. O terceiro argumento será
o mesmo, mas nossos motores fortes. Os motores fortes estão localizados na parte inferior do controlador. Geralmente, você pode encontrar isso praticamente onde estão as
palmas das mãos Então, vai ficar
bem embrulhado lá dentro. E observe que essas magnitudes estão
em uma escala de zero a um. Então, podemos dizer 0,5 aqui também. Então, neste ponto,
todo o controlador está tremendo com metade de sua força,
tanto na metade superior superior
quanto na inferior E a última coisa
aqui é a duração, e essa é a quantidade de
tempo em segundos de quanto tempo ela
vibrará. Se colocarmos cinco, ela vibrará
por 5 Então, se você tem esse
avião com uma animação ou um ataque e sabe
quanto tempo vai demorar, você pode ir em frente e
colocá-lo lá. E como eu tenho isso
na função pronta, se eu jogasse isso e tivesse um controle que
suportasse vibração, meu controle começaria a
vibrar imediatamente por 5 segundos
assim que meu jogo estivesse bem, é tão simples quanto adicionar
vibração ao seu Você pega aquela linha
de código e a
coloca onde
quiser que haja vibração.