Desenvolvimento de jogos com Lua e LÖVE: crie um RPG do zero! | Kyle Schaub | Skillshare

Velocidade de reprodução


1.0x


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

Desenvolvimento de jogos com Lua e LÖVE: crie um RPG do zero!

teacher avatar Kyle Schaub, Software Engineer

Assista a este curso e milhares de outros

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

Assista a este curso e milhares de outros

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

Aulas neste curso

    • 1.

      Apresentação

      1:23

    • 2.

      Instalação e configuração

      6:43

    • 3.

      Movimento de jogadores

      8:47

    • 4.

      Sprites e fundos

      4:23

    • 5.

      Animações

      14:08

    • 6.

      Design de nível e azulejos

      7:32

    • 7.

      Câmera

      9:49

    • 8.

      Física

      9:44

    • 9.

      Colisões

      13:36

    • 10.

      Resumo

      2:41

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

Gerado pela comunidade

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

384

Estudantes

1

Projetos

Sobre este curso

Para programadores iniciantes e experientes, uma das melhores ferramentas para aprender desenvolvimento de jogos é LÖVE (também conhecido como Love2D), um mecanismo de jogo de código aberto que permite aos usuários escrever a lógica de seus jogos em Lua, uma linguagem fácil de usar script. Essas joias ocultas da indústria de desenvolvimento são perfeitas para aprender os conceitos básicos, bem como aplicá-las para criar aplicativos em larga escala. Além disso, todo o software é de código aberto e gratuito!

Este curso anda pelo processo de criação do seu ambiente de desenvolvimento, como baixar todo o software necessário e saltar para criar um jogo! Vamos criar a base para um jogo estilo RPG com um personagem principal que pode se mover com as teclas de seta, ter animações para cada direção e uma câmera que segue o jogador onde quer que eles se movam. Além disso, vamos discutir como usar Tiled, um editor de nível fantástico que permite criar mapas e níveis facilmente que podem ser importados para seu

project.Although você possa acompanhar os vídeos sem ter qualquer codificação de experiência anterior, recomendo ter alguma familiaridade com Lua, apenas para ter algum contexto extra sobre como tudo funciona. Se você estiver interessado, também tenho um curso de Programação Lua no Skillshare, que não requer nenhuma experiência prévia.

Conheça seu professor

Teacher Profile Image

Kyle Schaub

Software Engineer

Professor
Level: Beginner

Nota do curso

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

Por que fazer parte da Skillshare?

Faça cursos premiados Skillshare Original

Cada curso possui aulas curtas e projetos práticos

Sua assinatura apoia os professores da Skillshare

Aprenda em qualquer lugar

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

Transcrições

1. Introdução: Bem-vindo ao desenvolvimento de jogos com a classe Lua e Love. Ao longo dessas lições será discutir o processo de criação de jogos a partir do zero, usando o amor, também chamado de Love 2D. E faremos toda a nossa codificação em Lua. A classe é baseada em projetos. O objetivo é criar este jogo aqui, que poderia atuar como base para qualquer jogo de estilo RPG. Este tipo de jogo é uma introdução perfeita pois envolve movimento do jogador, leitura de entrada do teclado, adição de sprites, animações, colisões com física e design de nível usando azulejos. Enquanto trabalhamos neste projeto, falaremos sobre todos os fundamentos fundamentais do uso do amor para que você seja capaz de criar jogos exclusivos ou construir sobre este. Você não precisa de nenhuma familiaridade com o desenvolvimento de jogos ou gosta de, para fazer essa aula. Falaremos sobre como instalar tudo e configurar no seu computador e depois ir a partir daí. Eu recomendo que você tenha alguma experiência em codificação. Se você já usou outras linguagens de programação além do Lua antes, provavelmente será capaz de pegar o idioma muito rápido. No entanto, se você é novo na codificação ou quer apenas ter uma ideia de Lua. Tenho outra aula do Skillshare chamada introdução à programação Lua, que não assume nenhum conhecimento prévio e o preparará completamente para essa aula de amor 2D. Sempre que você estiver pronto, começaremos as coisas instalando o amor e configurando as coisas para codificar nossos jogos. Vá em frente para a próxima lição. 2. Instalação e configuração: Olá pessoal. Neste vídeo, passarei pelas etapas de instalação da estrutura do jogo. Adoro fazer, para o seu computador e também mostrar como configurar novos projetos e como executá-los. Instalar o amor é muito fácil. Você só vai adorar o d.org. E os links de download estão bem aqui no meio. Se você estiver no Mac, você pode baixar este arquivo e instalar o aplicativo. E se você estiver no Windows, recomendo o instalador. Enquanto você estiver passando pela configuração do Windows , certifique-se de acompanhar esse caminho aqui, a pasta de destino. Vamos usar isso em apenas um segundo. Quando a instalação for concluída, recomendo criar um atalho para amar em sua área de trabalho. Se você estiver no Mac, basta adicionar o aplicativo de amor ao seu documento no Windows. Vamos visitar esse caminho de instalação de apenas um momento atrás. No meu caso, está aqui nos Arquivos de Programas C, amor. E se dermos uma olhada mais de perto, e encontraremos esse arquivo EXE de ponto de amor , bem nesta pasta. Se você não vir a parte EXE do ponto, você pode ir até Exibir e, em seguida, escolher essas extensões de nome de arquivo. E isso mostrará a extensão de cada arquivo. Então, queremos criar um atalho para este ponto de amor EXE. Então, vou até Enviar para o desktop. E então veremos que há um atalho aqui. Vou ir em frente e renomear isso para amar. Quando isso estiver pronto, você pode seguir em frente e clicar duas vezes nele para começar. Ou, se você estiver no Mac, basta executar o aplicativo e você deve ver uma janela que parece algo semelhante a esta, apenas uma animação estranha. Pode parecer um pouco diferente, dependendo da versão do amor que você está usando. Mas esta é a tela que mostra quando o amor está sendo executado, mas nenhum jogo é encontrado. E se você ver algo assim, isso significa que tudo está bem até agora. O próximo passo é instalar algum editor de texto que você usará para codificar. Você pode usar qualquer coisa com a qual se sinta confortável. Mas eu recomendo vivamente o Visual Studio Code, é por isso que uso nesses vídeos. E é totalmente gratuito. Você pode obtê-lo a partir do ponto de código Visual Studio.com. E os links de download estão aqui em cima. Basta baixar o correto para o seu sistema operacional. Depois de baixar e instalar o código do Visual Studio, vá em frente e inicie-o. Neste programa, poderemos editar e criar arquivos para o nosso jogo. Para fazer isso, vamos precisar criar um novo projeto de amor. Projetos e amado por D têm uma estrutura muito simples para fazer um. Você só vai criar uma nova pasta em qualquer lugar do seu computador. E meu caso, vou apenas fazer meu na área de trabalho, então vou clicar com o botão direito do mouse e escolher Nova pasta. E vou chamar essa pasta de meu jogo. Então agora eu só tenho uma pasta chamada meu jogo na área de trabalho, ou essa pasta pode estar em qualquer lugar do seu computador. Então, de volta ao Visual Studio, o código desejará abrir essa pasta. E podemos fazer isso com o File. E, em seguida, Abra a pasta. E criei minha pasta na minha área de trabalho e aqui, então vou selecionar esta pasta e escolher Selecionar pasta. Então, agora nossa pasta está aberta. Podemos ver o nome do meu jogo nesta seção e o canto superior esquerdo aqui. Agora que estamos aqui, o próximo passo é criar nosso primeiro arquivo Lua. E podemos fazer isso usando esse novo botão de arquivo. Talvez você precise passar o mouse sobre esta seção para vê-la, mas clique em Novo arquivo e precisamos nomear esse arquivo ponto principal Lua. Ele deve ter esse nome exato. E depois de pressionar Enter, o arquivo será criado e ele deverá abrir esta nova guia aqui. Diz ponto principal lu up. É apenas um arquivo vazio agora. E é isso. Esta é a estrutura simples de que todos os projetos de bricolage começam com simplesmente uma pasta que contém um arquivo chamado main que Lua. Claro, você estará adicionando mais a essa pasta, mas apenas ter isso sozinho nos permite executar o projeto através do amor. Existem algumas maneiras pelas quais você pode executar um projeto. Aqui eu tenho minha pasta de projeto, apenas meu jogo. E como acabamos de ver, ele só contém esse arquivo main.py e que acabamos de criar. E uma maneira de executar esse código é pegando a pasta do projeto e arrastando-a para um atalho de amor. E se for bem sucedido, ele deve aparecer. Uma janela de amor pode dizer sem título, e é apenas uma grande tela preta. Se você vir isso, isso significa que funcionou. Como nosso arquivo main.py está vazio, espera-se um jogo vazio. Depois de adicionarmos código a este arquivo, a janela começará a mostrar o que escolhermos o nosso jogo. Como uma nota lateral, você pode arrastar e soltar pastas de qualquer lugar do seu computador. Não precisa ser especificamente da área de trabalho. Agora, embora arrastar e soltar seja fácil, podemos facilitar ainda mais executando nosso projeto por meio do Visual Studio Code. Para fazer isso, só precisamos instalar uma extensão. E a extensão é apenas um plug-in que faz com que código VS faça algo específico. Então, nesta guia Extensões aqui, vamos procurar o específico que é essencial que queremos, que é chamado de suporte 2D amado. Então, quando você procura por isso, você deve encontrar esse amor para fazer o plug-in Support. Então você pode ir em frente e instalar isso. E depois de ver os botões Desativar e desinstalar, você sabe que a extensão foi instalada com sucesso. A partir daqui, porém, precisamos configurá-lo um pouco. Então, usando esse ícone de engrenagem, podemos ir para as configurações de extensão. E então, aqui, precisamos verificar se esse caminho, o caminho 2D do amor, é preciso. Anteriormente, quando você instala o love to D, fomos para o caminho onde ele foi instalado para criar o atalho. Esse mesmo caminho é o que precisamos incluir aqui. Se você estiver no Windows, o caminho que é mostrado aqui, que é Arquivos de Programas C, amor, amor, ponto EXE. Esse caminho provavelmente está correto. E se você estiver no Mac, se você instalou o aplicativo de amor em seus aplicativos, o caminho provavelmente será esse caminho que está na tela. Mas sempre verifique onde você realmente instalou e coloque o mesmo caminho aqui. E depois de especificar esse caminho, podemos ir em frente e fechar essas guias e testá-lo. E você pode simplesmente voltar para a aba inferior do ponto principal na parte superior ou ir até a parte do Explorador de Arquivos e clicar duas vezes em main.py. Então, uma vez que estivermos aqui, podemos executar o projeto usando um comando. No Windows, o comando é Alt L, e se você estiver no Mac, o comando é Command L. Então, usando esse comando, vou executar o Alt L. E ele inicia nosso jogo. Ele pegou o código que estava nesta pasta do meu jogo e o executa através do amor. A mesma coisa é se arrastarmos e soltarmos a pasta. No entanto, isso é muito mais rápido e fácil. Portanto, certifique-se de manter esse comando no fundo da sua mente sempre que quiser executar seu projeto. Neste ponto, você está pronto para começar a codificar seu jogo. Você começará colocando o código neste arquivo main.py. E à medida que você desenvolve, você pode adicionar mais arquivos à pasta do projeto. 3. Movimento de jogadores: Olá pessoal. Neste vídeo, vou analisar como criar um personagem simples do jogador apaixonado por d, onde você pode movê-los pela tela com as teclas de seta. Quando você estiver pronto, tenho um novo projeto pronto para começar. É apenas uma pasta chamada meu jogo e dentro dela como um arquivo chamado main.py. Essa é a base para qualquer projeto de amor. E podemos seguir em frente e executar esse arquivo como está. E veremos uma tela preta que é esperada, já que nosso arquivo main.py ainda não possui código nele. O ganho resultante é executado como apenas uma janela preta. A primeira coisa que devemos fazer com qualquer jogo é colocar nas três funções principais que usamos para todos os projetos de amor, que é função amada dot load. Em seguida, a função adorou atualização de pontos com DT entre parênteses. E então a função adorou dot draw. E usando essas três funções, criaremos nosso objeto player e adicionaremos alguns controles a ele para que ele possa se mover. Uma nota rápida antes de começarmos, a função de carregamento acontece logo quando o jogo começa. A função de atualização acontece em cada quadro. Então, ele funcionará como nosso loop de jogo. E a função de desenho é o que exibe nossos gráficos para a tela. Não se preocupe se você não estiver totalmente claro sobre tudo isso. Assim que tivermos algum código no lugar, isso fará muito mais sentido. Para começar, vamos criar nossa mesa de jogadores, que ocorrerá em carga de pontos apaixonados. Faremos o jogador igual, abriremos e fecharemos chaves. Agora tenha em mente que em Lua, os aparelhos encaracolados tendem a se referir a tabelas. Então, já que estamos fazendo uma cinta aberta e fechada aqui, isso significa que o jogador está sendo configurado para ser uma mesa vazia. Em seguida, daremos algumas propriedades a ele. Então, digamos que o ponto do jogador x seja igual 0 e o ponto y do jogador seja igual a 0. Eles atuarão como os valores da posição. O mundo do jogo é como uma grande grade onde o eixo x vai para a esquerda e para a direita, e o eixo y sobe e desce. Nosso jogador começará na posição 0, 0 ou na origem da tela. Em seguida, vamos usar o objeto do jogador para desenhar algo para a janela do jogo. Todo o desenho ocorre na função de desenho de pontos de amor. Então, aqui, vamos em frente e desenhe um círculo que atuará como jogador por enquanto. Vamos dizer que gráficos amados círculo de pontos. E então, entre parênteses, temos quatro parâmetros diferentes que precisamos fornecer. Primeiro é o modo. Temos duas opções. Temos Phil ou linha, então preencha, então nosso círculo será preenchido. Então precisamos da exposição, que será o jogador dx. Então precisamos da posição y, ponto y do jogador e, em seguida, do raio do círculo. Você pode fazer isso o que quiser. Vou fazer o meu 100. Então, para recapitular, esta linha aqui vai desenhar um círculo na posição 0, 0. O raio do círculo será 100 e será preenchido. Agora, se salvarmos nosso arquivo e depois executarmos, veremos que temos um círculo de corte no canto superior esquerdo. Agora, a razão pela qual ele é cortado porque o círculo está na posição 0, 0 e 000 é o canto superior esquerdo da janela do jogo aqui. Vamos mudar a posição do nosso jogador para posição, digamos 400, 200. Então agora nossa posição x é 400 e nossa posição y é 200. Se salvarmos e corremos agora, nosso círculo está completamente na janela do jogo e agora podemos vê-lo completamente. Mais especificamente, o círculo moveu-se para a direita, 400 pixels para este ponto aqui e, em seguida, para baixo para 100 pixels para que o centro do círculo esteja na posição quatrocentos , duzentos. E tenha em mente que quanto maior for o valor y, mais abaixo será a tela. Então, desde que dissemos 200 aqui, isso significa que diminuímos para 100 pixels. Agora que temos um objeto de jogador que está sendo exibido na tela, agora podemos trabalhar para fazê-lo se mover. Essa lógica acontecerá na função de atualização de pontos de amor porque a atualização lambda executa cada quadro. Então, para começar, vamos fazer algo simples. Faremos o ponto do jogador x igual ao ponto do jogador x mais um. Então, em outras palavras, cada ponto x do jogador de quadro aumentará em um. Se salvarmos e corremos, veremos que nosso círculo agora está se movendo lentamente para a direita. Especificamente, é mover um pixel a cada quadro. Gosto de chamar isso de ilusão de movimento. Cada quadro está atualizando um pouco, o que faz parecer que está se movendo. Da mesma forma, se mudássemos este para um três, isso significa que agora estamos mudando a exposição por três a cada quadro. E se salvarmos e executarmos, ele ainda está se movendo para a direita, mas está se movendo mais rápido agora, especificamente, está movendo três pixels a cada quadro, então isso é três vezes mais rápido. Agora nossa tarefa é fazer esse mesmo tipo de movimento, mas fazê-lo corresponder às teclas de seta que o jogador pressiona. Você pode ler a entrada do teclado com muita facilidade, e podemos fazer isso usando uma instrução if. Vamos dizer que se amou Schottky board, ponto está para baixo. E então, entre parênteses aqui, precisamos especificar qual chave estamos verificando está inativa. E começaremos com a direita, ou em outras palavras, a tecla de seta para a direita. Então. E vamos recuar esta linha e colocar um fim no final da instrução if. Então aqui estamos perguntando, está a tecla de seta para a direita pressionada para baixo. E se assim for, vamos mover o jogador para a direita em três pixels. E isso acontece a cada quadro. Então, ele está constantemente verificando isso. Se salvarmos e corremos agora, o jogador não está se movendo, mas assim que eu pressiono a tecla de seta para a direita, ele se move. E só vai fazer isso quando eu tiver a tecla de seta pressionada para baixo. Agora vamos fazer a mesma coisa, mas para uma direção diferente. Vamos manter isso fácil e começar com a direção esquerda. Então, desta vez, em vez de aumentar em três, cada vez, diminuiremos em três. Como quanto menor o valor x for do jogador, mais à esquerda da tela será se salvarmos e corremos agora, se eu mantiver à direita, ele se move para a direita. Mas se eu ficar à esquerda, jogador agora está se movendo para a esquerda. Então, agora temos ambas as direções horizontais funcionando. Em seguida, vamos fazer com que o jogador possa se mover para baixo. Se copiarmos esta seção novamente e colá-la aqui, vamos verificar se está abaixo a tecla de seta para baixo. Desta vez, não queremos atualizar a exposição dos jogadores porque queremos nos mover verticalmente. Mover-se verticalmente significa que temos que atualizar a posição dos jogadores y. Então o jogador dot y é igual ponto y do jogador e queremos descer. Então isso significa que vamos adicionar três. Se salvarmos e corremos, se eu segurar, o jogador se move para baixo. E, finalmente, temos mais uma direção a fazer. Se copiarmos isso, queremos verificar se há. E se quisermos subir, apenas diminuímos em três. E com isso, devemos ter todas as quatro direções para a esquerda, direita, para baixo e para cima. E, na verdade, é mais do que apenas as quatro direções. Se eu segurar as teclas de seta de uma só vez, nós nos movemos em uma diagonal. E isso ocorre porque as propriedades x e y podem ser atualizadas ao mesmo tempo, o que resulta em movimento diagonal. Antes de terminarmos o vídeo, algo que podemos limpar é que temos mais 3 escritos em quatro linhas diferentes. Isso geralmente é uma má prática porque se eu quisesse mudar a velocidade dos jogadores ou o quão rápido ele está se movendo, eu teria que mudar essas três em todas essas quatro linhas e isso fica meio irritante. Faria mais sentido se criássemos uma nova propriedade para o jogador, digamos que a velocidade do ponto do jogador, e vamos defini-la igual a três. Agora posso pegar isso e, em vez de escrever três em todos esses lugares, posso fazer a velocidade do ponto do jogador. E agora sempre que eu quiser atualizar a velocidade do jogador, só preciso atualizar esse valor aqui. Digamos que eu queria aumentá-lo para cinco. Agora meu player está se movendo a cinco pixels por quadro. Então, se eu salvar e correr, agora, estamos nos movendo mais rápido e é muito mais fácil de gerenciar. E uma última coisa que quero mencionar é esse horário d t ou delta. Você pode usar esse valor para fazer seu jogo funcionar e se sentir o mesmo, independentemente da taxa de quadros. Só queria dar uma olhada sobre isso. Não é de todo urgente quando você está apenas começando. Estará construindo isso um pouco mais. No próximo vídeo, mostrarei como desenhar sprites reais para o jogo, em vez de apenas um círculo simples como este. 4. Sprites e fundos fundos: Olá pessoal. Neste vídeo, mostrarei como adicionar seus sprites ou obras de arte reais, bem como planos de fundo ao seu jogo apaixonado. Para mostrar isso, estarei construindo o código do vídeo de movimento do player. Basicamente, temos esta mesa de jogadores. E usando suas propriedades, descemos para a função de desenho e desenhamos um círculo na posição do jogador. E então, em nossa função de atualização, temos essas instruções if que controlam o jogador com as teclas de seta. E no final, temos um círculo que podemos controlar e mover quando pressionamos as teclas de seta. Agora, um círculo plano com fundo preto não é muito interessante. Então, vamos usar ativos de arte ou sprites reais . Em vez disso. Você pode usar todas as imagens que quiser. Você pode desenhar algo sozinho, ou eu usarei essa imagem pai simples, bem como este PNG de ponto de fundo gramado. Se você quiser usar as mesmas imagens que eu, você pode ir para a guia Projetos e Recursos abaixo deste vídeo e encontrar os recursos à direita. Você pode baixar papagaio ponto PNG e fundo desse PNG a partir daí. Os outros recursos serão usados em lições posteriores. Quando você tiver seu arquivo pronto. Na verdade, vamos querer movê-los para nossa pasta do projeto. Então vá em frente e copie esses arquivos. E, em seguida, na sua pasta de projeto real no próximo ano, main.py, vamos criar uma nova pasta. Vou chamá-lo de sprites. E dentro desta pasta vamos colar nessas duas imagens, uma para o plano de fundo e outra para o player. E uma vez que você tenha isso para baixo, você notará que, no Visual Studio Code, agora temos uma pasta sprites. E dentro temos o plano de fundo PNG e ponto pai PNG ou quaisquer nomes que você lhes deu. Agora, o próximo passo é que precisamos incluir essas imagens em nosso código. E começaremos com o sprite do jogador. Tornaremos isso fácil e organizado colocando qualquer propriedade para a mesa do jogador. Vamos dizer que o sprite de ponto do jogador é igual gráficos de ponto de amor, nova imagem ponto-ponto. E então o perímetro aqui é o caminho para onde temos esse arquivo armazenado e que armazenamos na pasta sprites barra papagaio ponto PNG. E esse é o nosso sprite Player. E agora que temos essa imagem carregada no sprite de pontos do jogador, podemos usá-la na função de desenho. Então, em vez de desenhar um círculo, vamos nos livrar disso. E, em vez disso, diremos desenho de pontos gráficos de ponto de amor. E o primeiro parâmetro é o que queremos soltar, que é o sprite de pontos do jogador. Em seguida, é a posição ponto x e o jogador ponto y. E com isso no lugar, se salvarmos e executá-lo, veremos que nosso jogador agora está representado por nosso sprite. No meu caso, é o papagaio. Em seguida, teremos o plano de fundo desenhado no mesmo negócio. Precisamos carregar essa imagem em uma variável. Então, vamos colocar em segundo plano iguais aos gráficos, essa nova imagem. E o caminho é sprites slash background, PNG. Então, agora que o armazenamos em segundo plano, podemos usá-lo mais uma vez na função de desenho. Vou colocar gráficos de ponto de amor, dot draw. Fomos desenhar fundo e vamos desenhá-lo na posição 0, 0. Agora, a posição que fornecemos para qualquer uma dessas chamadas de função de desenho realmente representa o canto superior esquerdo da imagem que estamos desenhando. Então, como nosso fundo é um grande quadrado ou retângulo, colocando sua posição em 000, vamos alinhá-lo perfeitamente com nossa janela de jogo, já que 00 também é o canto superior esquerdo da janela. Se salvarmos e corremos, veremos que nosso fundo de grama está agora no lugar. Mas você notará que os jogadores desapareceram repentinamente. Aqui está o problema. O jogador ainda está lá e ainda está sendo desenhado, mas o plano de fundo está sendo desenhado por cima dele. Então, não é mais visível para nós. Para desenhar sprites, a ordem em que você os desenhe em assuntos. Então, no nosso caso, desenhamos o sprite do jogador, mas depois fazemos o plano de fundo depois dele, que resulta no fundo sendo colocado no topo. Se você quiser corrigir isso, só precisamos mudar esse pedido. Se desenharmos o plano de fundo primeiro, isso significa que o plano de fundo será desenhado e , em seguida, o sprite do jogador será desenhado por cima dele. Então, no final, quando salvarmos e corremos agora, veremos nosso sprite Player desenhado por cima do nosso fundo gramado. E isso abrange os conceitos básicos de desenhar sprites. A partir daqui, eu gostaria de mudar esse spray de pássaro em mais humano com animações ambulantes, o que é muito fácil quando usamos algum software de código aberto. Falaremos sobre isso no próximo vídeo. 5. Animações: Olá pessoal. Neste vídeo, mostrarei como adicionar animações ao personagem do jogador, onde eles enfrentam e andam em qualquer direção que você esteja se movendo. Estarei utilizando esses sprites que foram criados e fornecidos pela largura do amor na abertura do jogo art.org. Você pode baixar este ponto da folha do player de arquivos PNG na guia projetos e recursos abaixo. Ou você é livre para usar qualquer outra folha de sprite que você gostaria de usar. Dando uma olhada rápida nessa imagem, você verá que existem quatro linhas, cada uma representando uma direção diferente. Nosso objetivo é usar cada quadro individual de uma linha específica para criar a animação. Quando cada quadro for jogado em sucessão rápida, isso dará a ilusão de que o jogador está andando. Depois de ter seu projeto pronto, vá em frente e crie uma pasta sprites ao lado do main.py, se você ainda não tiver uma. E por dentro, vá em frente e cole neste ponto da folha do jogador PNG. Uma vez que isso seja feito de volta no Visual Studio Code, você deve ver que na sua pasta sprites você tem um player que ela pontilha PNG, o que significa que tudo está pronto para funcionar. Só precisamos incluir esse arquivo em nosso código, o que podemos fazer isso da mesma forma que qualquer outro sprite. Vou torná-lo uma propriedade do objeto do jogador, e vou chamá-lo de folha de sprite do jogador igual a esses gráficos, essa nova imagem. E então precisamos do caminho que é a pasta sprites. E o nome do arquivo é o ponto da folha do traço do jogador PNG. Agora que isso é importado, vai querer trabalhar para transformar isso em uma animação. Isso será feito usando algum software de código aberto. Em particular, usaremos este produto aqui chamado Animate. Embora este repositório tenha alguns anos agora, ainda é muito confiável e funciona muito bem para implementar animações apaixonadas por D, havia algumas maneiras de incluir esse código em seu projeto. Se você tiver o Git instalado, você pode ir até esse menu suspenso de código, copiar este HTTPS e, em seguida, fazer um git clone. Ou a outra maneira de fazer isso é baixar o zip. E depois que esse zip for baixado, você pode ir em frente e extraí-lo. E então aqui encontraremos um ponto animado lou um arquivo. Você vai querer copiar isso. E de volta à nossa pasta do projeto, vamos criar uma nova pasta, vou chamá-la de bibliotecas. E nesta pasta vamos colar nesse ponto animado Lua. Depois de ter isso, cole-o e você pode vê-lo aqui, vai querer ir em frente e importar isso para o nosso código. Vou fazer isso bem no topo da carga de pontos de amor. E vamos dizer que os iguais ao animate exigem bibliotecas, que é a pasta que acabamos de criar. E então o nome do arquivo é animado. Agora, tudo isso anima esse pequeno código é armazenado nessa variável global chamada animate. Neste ponto, podemos começar a criar nossas animações. O primeiro passo é criar uma grade que ajude a biblioteca a dividir sua planilha em suas imagens individuais. Você pode verificar a página animates do GitHub para obter mais detalhes sobre tudo isso. Então, vamos começar criando uma grade para o objeto player. Vou chamá-lo de grade de pontos do jogador igual a animate dot new grid. E nesses parênteses aqui, existem vários parâmetros que precisamos definir versus a largura e a altura de cada quadro individual. E, no nosso caso, cada quadro tem 12 pixels de largura e 18 pixels de altura. Se você olhar atentamente para a planilha que estamos usando, verá que cada quadro individual tem uma pequena lacuna em torno dele. Mas quando incluímos essa lacuna, cada imagem é 12 por 18. Depois de redefinir essa dimensão, precisamos dar a largura e altura da planilha completa, que podemos obter com muita facilidade. Vamos dizer planilha de pontos do jogador. E então podemos dizer dois pontos, obter largura. Então esta linha aqui vai ter a largura da nossa folha de sprite. E da mesma forma, queremos obter a altura para o próximo parâmetro, pontos do jogador, folha de sprite, chamada e obter altura. Então, essa é a coisa toda que precisamos para definir nossa grade. Temos a largura e a altura de nossos quadros individuais e a largura e altura da folha de sprite completa. E no final, isso nos dá nossa grade. Agora, usando essa grade, nosso código saberá como dividir nossa planilha em imagens individuais. E com isso, podemos criar nossas animações. Então, vamos armazenar todas essas animações em uma nova tabela. Na verdade, vou chamá-lo de animações de pontos do jogador igual a nova mesa vazia. E vamos começar com essa animação simples. Faremos animações de pontos do jogador pontuando para baixo. Esta será a primeira animação. Em seguida, implementaremos a direção descendente. E para criar uma animação, animamos novas animações de pontos. E nesses parênteses, precisamos definir quais quadros dessa folha de sprite queremos incluir. E fazemos isso usando a grade. Então, diremos que o jogador essa grade. E então, nesses parênteses, precisamos definir quais linhas e colunas queremos incluir. O primeiro parâmetro aqui são as colunas que queremos incluir, que são as colunas de um a quatro. Porque temos quatro quadros indo da esquerda para a direita. Então, dizemos de um a quatro em aspas simples assim. Então vamos colocar uma vírgula. E depois disso, queremos definir de que linha queremos que isso venha, que no nosso caso, a direção para baixo vem da linha um. Então, vamos colocar um aqui. E depois de definirmos nossas informações de grade de jogadores, colocamos vírgula. O próximo parâmetro é o tempo em segundos entre cada quadro. Então, novamente, nossos quadros estarão tocando um após o outro em rápida sucessão, mas precisávamos descobrir a rapidez com que queremos que eles fossem. Vou dizer algo como 0,2 e você pode ajustar isso menor ou maior. Isso significa que o quadro mudará dois segundos para nossa animação, o que é bem rápido, mas você verá que parece realmente natural quando reproduzirmos a animação de volta. Portanto, isso é tudo o que precisamos para definir nossa animação e ela está sendo armazenada neste jogador animações de ponto para baixo. Então, vou realmente copiar isso e agora precisamos atualizar essa animação e desenhar a animação. Então, na atualização depois de todo esse código, vou colocar em jogo que a animação é atualização de dois pontos abaixo. E essa atualização exige que passemos no DT. E novamente, d t vem daqui. Apaixonados por atualizar, estamos simplesmente passando esse perímetro para a nossa atualização de animação. E depois que isso for atualizado, podemos descer aqui e eu vou me livrar do nosso sorteio circular. Ou você também pode se livrar de qualquer outro desenho que você esteja fazendo além do plano de fundo. E eu vou fazer animações de pontos do jogador, pontuar para baixo dois pontos. E o primeiro parâmetro aqui é a planilha que usamos para desenhar essa animação, que é a folha de sprite de pontos do jogador. Então, depois disso, é a posição que queremos desenhar esta animação, que é o ponto x do jogador e o ponto y. E isso deve fazê-lo. Devemos ver a animação sendo reproduzida. Então, vamos salvar esse arquivo e começar. E um problema, mas você notará imediatamente é que essa animação é muito pequena desde que eu fui com alguns gráficos retrô, esse sprite tem apenas 12 pixels por 800 pixels, o que é muito pequeno, mas somos capazes de ampliá-lo um pouco. Então, vamos em frente e nesta animação é desenhar. Existem alguns parâmetros adicionais muito semelhantes aos que habitualmente adoraram nossos gráficos para desenhar a função. O próximo parâmetro aqui é o campo de rotação opcional. Não queremos girar a imagem. Então, vamos fazer nulo, o que significa que não altere a rotação. E depois de nulo como nosso fator de escala X. Então podemos colocar algo como 10. E isso significa que a escala da nossa animação será aumentada em dez vezes. E colocar um valor para a escala x significa que a escala y também adotará esse valor já que não especificamos nada para ele. Então, com isso, devemos esperar que nosso sprite seja 10 vezes maior, ou devo dizer nossa animação. Então, vamos em frente e comece. E lá está ele. É muito maior, mas um problema notável é que está embaçado. Podemos evitar que nosso dimensionamento desfoce as imagens se subirmos ao topo. E faremos isso logo após nossa importação animada. Vamos adorar o filtro padrão do conjunto de pontos gráficos. E os valores aqui são mais próximos, mais próximos. Então, com essa linha no lugar, ela fará com que, quando aumentarmos nossos gráficos, ela não faça nenhum borrão. É simplesmente pega os pixels e os dimensiona. E agora, quando começo, vemos nossa animação funcionando e ela parece muito boa. E como está vinculado aos valores de ponto x e y do jogador, podemos nos mover normalmente, mas agora nossa próxima tarefa é fazer que as outras direções funcionem, mas nenhuma das outras. Então, vamos em frente e implementá-los. Nós os faremos de uma maneira muito semelhante à que caímos. Na verdade, vou copiar toda essa linha aqui. E vamos fazer o próximo. Diremos à esquerda. Agora, a direção esquerda está na segunda linha. Vou mudar este para a linha dois. Em seguida, temos agora, à direita está na linha três. E então, finalmente, temos para cima e para cima está na linha quatro. Agora, todas essas animações são muito semelhantes. Eles ocorrem em linhas diferentes. Agora vem o desafio de mudar entre as animações. Porque agora nossa animação está sendo desenhada e atualizada escolhendo manualmente animações de pontos do jogador pontilhadas para baixo para aqui e aqui. Quando, na realidade, não sabemos o que procurar animações que queremos usar. Podemos acompanhar isso com uma nova propriedade. Vou chamá-lo de player.com. E vamos defini-lo igual a alguma animação, digamos que animações de pontos do jogador pontuam à esquerda. Então, agora nosso player, essa propriedade contém o player para as animações que saíram. Então, podemos usar isso para rastrear a animação de nossos jogadores. Então, em vez de atualizar manualmente, as animações diminuíram. Em vez disso, estamos, de acordo com a atualização do jogador dot enum. E o mesmo com o nosso sorteio. Vamos apenas fazer o empate de ponto de jogador A & M. Dessa forma, seja qual for a animação que atribuímos a esse valor, essa é a que vamos ver. Então, neste momento, temos o jogador para animações que deixaram atribuídas a ele. Então, se salvarmos e corremos, vemos que a direção voltada para a esquerda agora é a animação que vemos aqui. Neste ponto, queremos apenas mudar a animação dos jogadores para corresponder a qualquer direção que eles estejam se movendo. Isso pode ser feito adicionando aos nossos controles de movimento e à função de atualização. Por exemplo, aqui estamos segurando a tecla de seta para a direita. Isso significa que provavelmente queremos mudar a animação para ser ponto do jogador, ponto de animações, certo? Então, é bem aqui. Posso ir em frente e fazer isso. Eu vou dizer que o jogador dot nm é igual ponto de animações do jogador, certo? E da mesma forma, podemos fazer exatamente a mesma coisa em todas essas quatro direções. Então este é deixado, este próximo está em baixo. E, finalmente, este último acabou. Então, com isso no lugar, se eu salvar e correr, sempre que mudei de direção, a animação dos jogadores é atualizada para corresponder a essa direção. Funciona muito bem. O único problema restante aqui é que o jogador continua a andar no lugar mesmo depois de parar. E, idealmente, eles são animações também parariam e mudariam para uma posição parada. Essencialmente, queremos mudar a imagem do jogador para este quadro, o de pé, quando nenhuma tecla de seta for pressionada para baixo. Você notará que esse quadro em pé é a segunda imagem e cada uma dessas linhas. Então, quando nenhuma tecla de seta for pressionada, forçará a animação a ficar com este segundo quadro. Isso novamente acontecerá em nossa seção de atualização, vamos precisar verificar se nenhuma tecla de seta foi pressionada nesse quadro. Então, vamos acompanhar isso com uma variável local muito simples. No início do quadro criará um local está se movendo. E vamos definir isso como falso. Então queremos mudar isso está se movendo para verdade. Se alguma das teclas de seta for pressionada neste quadro. E podemos fazer isso de novo, bem nesta declaração IF está em baixo, podemos simplesmente dizer que está se movendo igual a verdadeiro. Porque se a tecla de seta para a direita for pressionada para baixo, isso significa que estamos nos movendo. Então, precisamos mudar esse valor. E vou copiar essa linha e colocá-la dentro de todas essas quatro declarações if para cada uma das quatro direções. Então, no final do nosso método de atualização, saberemos que o movimento será falso se as teclas de seta não forem pressionadas ou verdadeiras se alguma delas for pressionada para fora. E se nenhum deles for pressionado, e vamos ver. Se estiver se movendo é igual a falso. Então, neste ponto nesta declaração if, queremos mudar a animação dos jogadores para ser segundo quadro em que eles estão parados. E isso é feito com player.com. E há uma função ir para quadro de dois pontos. E o quadro para o qual queremos ir é o quadro número dois, que está parado. Se salvarmos e corremos agora, o jogador está parado. Assim que eu me mudo, ele começa a andar novamente em todas as quatro direções. E quando eu paro, eles voltam a ficar parados. E isso funciona para todas as quatro direções. 6. Design e embalagem de níveis e embalagem em embalagem: Olá pessoal. Neste vídeo, mostrarei o básico do uso de azulejos, um editor de níveis fantástico que é essencial para estruturas de jogos como o love 2D, que não tem nenhum tipo de editor embutido, passará pelo processo de adicionar um folha de estilo, projetando um mapa e importando nosso nível para um jogo 2D de amor. Primeiro, você vai querer ter um conjunto de blocos para usar para isso. Esta é apenas uma imagem grande com um monte de peças individuais que usaremos para projetar nosso nível. Você pode baixar esse ponto PNG do conjunto de blocos na guia projetos e recursos abaixo. Uma vez que você o tenha pronto, eu gosto manter minhas coisas organizadas. Então, na pasta do meu projeto de jogo, vou criar uma nova pasta e vou chamá-la de mapas. E então, nessa pasta de mapas, vou colar na imagem PNG do ponto do conjunto de blocos. Em seguida, você precisará baixar azulejos. Observe que este é um nome de sua própria ferramenta de preços. Então, embora você possa baixá-lo gratuitamente se achar útil, eu recomendo pagar alguma quantia de dinheiro para apoiar o desenvolvedor. Depois de instalar o lado a lado, vá em frente e inicie-o. E podemos criar um novo mapa indo até Arquivo novo e novo mapa. E nesta janela, desculpe, é um pouco menor. Este texto não é bem dimensionado aqui, mas as partes superiores aqui podem permanecer em seus valores padrão que são CSV ortogonal e anotar. Em seguida, é o tamanho do mapa. Podemos escolher quantas peças largura e alto nosso mapa será. Acho que esse padrão, 30 por 30 está bem aqui. E, finalmente, precisamos especificar nosso tamanho de ladrilho, que é o tamanho de cada ladrilho individual. Isso depende do conjunto de blocos que você está usando. Mas com o meu, cada bloco tem 64 pixels de largura e 64 pixels de altura. E, em seguida, clicaremos em Salvar como você vai querer navegar até a pasta do projeto do jogo. E vou salvar isso na pasta maps. E Alice simplesmente chame este mapa de teste e clique em Salvar. Depois que isso for salvo, o editor de mosaico deve aparecer, que é onde estaremos projetando nosso nível. Primeiro, precisamos importar nosso conjunto de azulejos. Isso acontece neste canto inferior direito com este novo botão de conjunto de mosaico. Primeiro, precisamos dar um nome novamente, desculpe, isso é pequeno. Vou nomear esses blocos de teste e, em seguida, certificar-me de que você tenha incorporado no mapa ativado. Então precisamos de um toot, nossa fonte, que se navegarmos, vamos voltar para nossa pasta de mapas e encontrar nossos blocos, essa imagem. Em seguida, especifique novamente a largura e a altura da nossa telha, que no nosso caso é 64 por 64 e, em seguida, margem e espaçamento. Você pode ajustar esses valores se houver lacunas entre ou ao redor dos blocos. Mas no meu caso, todas as peças estão bem próximas umas das outras, sem lacunas entre elas. Portanto, o espaçamento será 0 e não há margem ao redor da borda do conjunto de ladrilhos. Portanto, a margem também será 0. E o que o outro está configurado? Vá em frente e clique em, OK. E no canto inferior direito você deve ver seu conjunto de azulejos aparecer. Agora, neste momento, você pode clicar em qualquer um desses blocos individuais e usá-los para desenhar partes do seu mapa. E você pode usar isso para projetar seu nível. Na verdade, vou começar colocando uma linha de base dessa imagem de grama. E eu vou usar essa ferramenta de preenchimento de tinta para colocar grama ao redor. Então, a partir daqui, posso escolher peças individuais e usar a ferramenta de carimbo para desenhar como meus caminhos individuais para o resto do nível. Uma coisa que você pode notar ao projetar é que, se você tentou fazer, digamos, uma dessas árvores e colocá-la aqui, ela meio que exclui a grama embaixo dela. Então, e isso ocorre porque as porções circundantes do ladrilho são transparentes. Então, ele substitui a grama ao seu redor com a mesma transparência. Podemos contornar isso fazendo uma nova camada. Agora estamos trabalhando fora desta camada de mosaico 1. Bem, podemos criar uma nova camada de azulejos e eu vou chamá-la de árvores. Agora, se eu voltar para este ar de cauda um e substituir este azulejo por grosseiro. Assim que eu voltar para o ar de azulejos das árvores. Agora, sempre que eu colocar será colocado nesta nova camada. Então, as coisas em azulejo, todos não serão substituídos. Então, isso corrige esse problema. E enquanto estamos nisso, eu poderia muito bem substituir esse nome por algo como terra. E, a partir daqui, é apenas uma questão de projetar seu nível. Então vá em frente e vá e projete seu nível como quiser. Estou mantendo isso muito simples por enquanto, mas sempre que você terminar o seu mapa, você pode ir em frente e salvar o projeto e depois ir para Exportação de Arquivos Como então agora vamos exportar nosso projeto. Então, navegue até a pasta do projeto do jogo. E novamente, vou colocar essa aversão à exportação em nossa pasta de mapas. E você verá na parte inferior que estamos salvando como um arquivo Lua. Vou chamá-lo de mapa de teste. Portanto, isso é muito conveniente, já que o amor hoje usa Lua, o que torna o processo de convertê-lo em muito simples. Então vá em frente e salve. E nosso mapa agora o exporta como um arquivo Lua. Agora, para colocar este mapa em nosso projeto de amor será necessário utilizar algum software de código aberto. Você pode usar esse URL para acessar a página do GitHub para a implementação simples de lado a lado da biblioteca. Esta biblioteca lerá esse mapa explorado e ajudará a retirar todas essas peças no jogo. Então, para obter esse código, você pode clonar esse repositório se souber como fazer isso, ou se você não souber como fazer isso, você pode acessar o código e vamos apenas baixar o arquivo zip. Depois que for baixado, você vai querer extrair o arquivo zip e, em seguida, navegar para essas pastas. E o que realmente queremos é essa pasta STI. Sti significa implementação simples em mosaico. Claro. Agora, vou copiar esta pasta e depois voltar para a pasta do projeto do jogo. Gosto de manter todo o meu código-fonte aberto na pasta de uma biblioteca, mas você pode organizá-lo como quiser. Vou colar naquela pasta STI. E uma vez que você tenha essa pasta STI pronta, podemos incluí-la em nosso código com carregamento de pontos de amor. Mas no topo do amor que a carga eu vou colocar em STI iguais exigem. E então, nessas aspas simples, vou colocar o caminho para essa pasta, que era bibliotecas de barra STI. E isso importa todo o código STI para essa variável STI. E depois disso, podemos criar nosso mapa ou carregá-lo no jogo armazenando-o em uma variável. Vou chamá-lo de mapa do jogo igual a STI, parênteses. E nesses parênteses precisamos fornecer o caminho aspas simples para nosso arquivo de mapa exportado, que estava na pasta Mapas, teste de barra IMAP dot Lua. Desde que nosso mapa foi exportado como um arquivo Lua. E agora que esse mapa está carregado no mapa do jogo, tudo o que resta a fazer é desenhá-lo. Então aqui embaixo e função de desenho, vamos nos livrar de qualquer outro plano de fundo que estamos desenhando. E, em vez disso, vou fazer o mapa do jogo, dois pontos, desenhar. E é isso. Uma nota muito pequena é que se você estiver usando o projeto de amostra, eu vou mudar essa escala do jogador para seis em vez de 10, só para que ele corresponda aos blocos um pouco melhor. Mas sempre que estiver pronto, vá em frente e salve o projeto e execute. E funcionou. Temos nossas peças no lugar e podemos jogar o jogo normalmente. Isso abrange os conceitos básicos do uso de mapas em azulejos e importação para seus projetos 2D amorosos. Um problema notável, porém, é que estamos presos neste canto superior esquerdo do nosso nível de jogo. Portanto, não há como vermos o resto. No próximo vídeo, adicionaremos uma câmera que segue o player ao redor que nos permitirá explorar todo o espaço. 7. Câmera: Olá pessoal. Neste vídeo, mostrarei como adicionar uma câmera aos seus jogos 2D amorosos que ela siga o jogador e você possa explorar mais seus níveis. Tudo o que você precisa para começar em algum projeto onde você tem algo que deseja que a câmera siga. No meu caso, tenho este objeto do jogador e ponto x do jogador e o ponto y jogador representa a posição do jogador. Se eu executar o jogo como está, é assim que parece atualmente. Mas é claro que não há câmera, então não consigo explorar todo o espaço. O mesmo acontece com muitas tarefas. Podemos adicionar uma câmera com muita facilidade utilizando algum software de código aberto. Acesse este URL para acessar a página do GitHub para hump, que significa ajuda ou utilitários para progressão maciça. Hump é uma coleção de várias ferramentas diferentes, incluindo este arquivo câmera.capture. Vá em frente e clone este repositório. Ou se você não tiver certeza de como fazer isso, você pode ir em frente e subir para o código e depois baixar isso como um Zip. Então você só vai querer extrair esse arquivo zip. E então, dentro da pasta, encontraremos esse arquivo câmera.capture. Vá em frente e copie isso. E então, de volta à pasta do projeto do jogo, dentro da pasta da biblioteca, vou ir em frente e colar neste ponto de câmera lou um arquivo. Se você atualmente não tem uma pasta de biblioteca, você pode ir em frente e criar uma ao lado ponto principal Lua e chamá-la de bibliotecas. Depois que isso for adicionado, volte para o seu código e vamos importar esse código da câmera em carga de pontos apaixonados. Eu simplesmente vou fazer com que a câmera seja necessária. E dentro das aspas simples, farei o caminho para o arquivo camera.capture, que é a câmera de barra de bibliotecas. Então, agora o arquivo camera.capture é carregado nessa variável da câmera, e podemos usá-lo para criar um objeto de câmera real. Vou chamar essa câmera igual a câmera. Portanto, chamar isso como uma função gera essencialmente um objeto de câmera e está sendo armazenado dentro do CAM. Então, sempre que quisermos trabalhar com a câmera, chamaremos essa variável cam. Agora que isso criou, podemos alterar nossas seções de desenho para que tudo seja visualizado através da lente desta câmera. Fazemos isso, no início da seção da mandíbula. Faremos o cólon da câmera e, em seguida, recuaremos todo o resto. E depois que tudo for desenhado, fará o separador do câmaro. Assim, pode anexar marcas o ponto em que começamos a desenhar as coisas da perspectiva da câmera. E o desligamento do CAM é o ponto em que paramos de olhar pela câmera. Então, neste caso, tudo está sendo desenhado da perspectiva da câmera. Agora, se você estiver desenhando um mapa em mosaico usando implementação de mosaico simples, como estou fazendo aqui. Na verdade, não podemos mais usar esta notação de drauf de dois pontos do mapa do jogo. Isso infelizmente entra em conflito um pouco com uma câmera. Então, o que precisamos fazer é realmente desenhar cada camada do nosso mapa de mosaico individualmente. Se você der uma olhada rápida no meu mapa de mosaico, eu tenho duas camadas. Tenho terra e tenho árvores. Então, precisamos desenhar cada uma dessas camadas individualmente. E eu posso fazer isso me livrando deste mapa do jogo cólon mandíbula. E, em vez disso, vou fazer a camada de desenho de dois pontos do mapa do jogo. E dentro dos parênteses precisamos especificar a camada que queremos desenhar irá desenhar primeiro a camada de terra. Então, conseguimos isso com um mapa do jogo, camadas de pontos. E então, entre colchetes, precisamos especificar o nome da string da nossa camada, que é moída. E mesmo negócio, vou copiar isso e faremos a mesma coisa, mas para árvores. Então, neste ponto, temos todas as camadas do mapa do jogo sendo desenhadas, bem como o jogador sendo desenhado dentro da perspectiva da câmera. Se fôssemos salvar e correr agora, o jogo provavelmente não parecerá diferente. E isso porque nossa câmera está imóvel no momento. Precisamos mudá-lo para que ele esteja sempre seguindo. O jogador fará isso de volta em nosso código nas seções de atualização. Então, na atualização amada, provavelmente na parte inferior da atualização do ponto de amor. Depois de tudo isso, vou colocar no cólon do CAM. Olhe, vamos colocá-lo na posição do jogador ponto x e jogador ponto y. Então, cada quadro vai mover a posição das câmeras para corresponder onde quer que o jogador esteja localizado. Se salvarmos e executarmos agora, está funcionando. A câmera agora está seguindo o player. Ele pode notar um pouco de um problema de compensação no entanto. O jogador está um pouco fora do centro, ele está um pouco baixo e à direita demais. E isso ocorre porque a câmera está atualmente seguindo o ponto x do jogador e o ponto y do jogador, que no momento representa o canto superior esquerdo da imagem dos nossos jogadores. Por padrão, todas as animações e todos os sprites serão desenhados no ponto superior esquerdo. E neste caso, preferimos desenhar a partir do centro da imagem para que nossa câmera fique centrada em tudo. Então, de volta ao nosso código, iremos até onde desenhamos o jogador que está bem aqui. Estamos desenhando nossa animação. E precisamos atualizar essas variáveis de deslocamento. Então aqui temos nossa rotação, então temos nossa escala x. e depois da escala x é a escala y, que será colocada como nula. Mas depois da escala y é 0 x e 0 y, que é o que queremos especificar. Para OX, queremos metade da largura do sprite, que é 6, já que a largura é 12. Então, para o deslocamento, por que queremos metade da altura, a altura é 18, então vamos colocar em nove. Então, com isso no lugar, se salvarmos e executarmos agora, veremos que nossa câmera agora está centralizada e o player está diretamente no centro da foto da câmera. A última coisa que você pode abordar, e isso é completamente opcional, mas você pode impedir que a câmera mostre esse fundo preto fora da tela que vai além de onde está nosso mapa, tudo o que temos que fazer é parar o câmera de se mover quando chega muito longe e perto da borda. Vamos começar abordando a borda esquerda primeiro. Então, em nossa função de atualização, logo após olharmos nossa câmera, faremos uma declaração if onde verificamos a largura e a altura da tela. Então, primeiro vamos obter a largura da tela e vamos armazená-la em uma variável W local. E obtemos a largura fazendo gráficos amados mortos e papai ganha largura, e isso terá a largura da nossa janela de jogo. Então vamos fazer h local igual aos gráficos Ag amados ponto GetHeight. E isso terá a altura da nossa janela do jogo. Agora, quando precisamos fazer é verificar a posição da câmera e compará-la com essa largura. Então, vamos fazer uma declaração if. Diremos que se cam dot x ou a posição x da nossa câmera tiver menos da metade da largura, o que significa que estamos apenas na borda, mas não queremos ir mais longe. Então. Nós só queremos mudar o ponto de câmera EXE para metade da largura. Metade da largura coloca a câmera longe o suficiente da borda da tela para que ela não mostre esse fundo preto. E se salvarmos e corremos agora, se eu for longe demais para a esquerda, veremos que as câmeras param assim que chegarmos a essa fronteira. Não está mostrando esse fundo preto em nenhum lugar do lado esquerdo da tela. Vamos fazer a mesma coisa para a borda superior. Fazemos isso de forma muito semelhante. Só vou copiar isso. E em vez de verificar Campbell x, vamos verificar kim dot y em ambos os pontos e também verificar h. Estamos verificando a altura da nossa janela do jogo desta vez. Se salvarmos e corremos agora, veremos que não podemos mais passar por essa borda superior. Ele não mostra o contorno preto. Então, para as bordas direita e inferior um pouco mais complicado, porque precisamos obter a largura e a altura do nosso fundo. Então aqui depois de todas essas coisas, vou conseguir uma outra variável local. Vou chamá-lo de mapa local W, como na largura em pixels do nosso mapa do jogo. Isso é feito com a largura do ponto do mapa do jogo vezes nmap dot tile width. E o que isso representa é o número de peças de largura. Nosso mapa K é, isso representa quantos pixels de largura é um bloco em nosso K-map. Como você mencionou, essa parte só é possível se você estiver usando um mapa em mosaico. Se você estiver usando um plano de fundo normal, esses seriam apenas os planos de fundo sem nenhum desses cálculos aqui. Faremos a mesma coisa pela altura do mapa. Mapa h é igual a altura do ponto do mapa do jogo vezes mapa do jogo, pai, altura da maré. Então agora temos a largura e a altura do nosso mapa em pixels. E irei em frente e mostrarei o código final. Se mapeamos a altura do mapa, usamos isso para calcular onde cam e cam, por que devem ir sempre que atingirem as bordas direita e inferior? Para a borda direita, colocamos igual à largura do nosso mapa, que é essa variável aqui, menos metade da largura das janelas do jogo. E isso nos coloca na fronteira onde não mostra nada fora da tela. A mesma ideia com a câmera. Por que obtemos a altura do nosso mapa. Então, na parte inferior, subtraímos metade da altura da nossa janela do jogo, o que coloca a câmera bem na borda onde ela não mostra nenhum daquele fundo preto. Se salvarmos e corremos agora, se eu andei até o canto inferior direito, ele pára na borda direita e também pára na borda inferior. Então, agora, neste momento, nossa câmera não pode sair da tela. Uma última coisa que quero demonstrar para a câmera é se você quisesse ter um HUD ou algo que simplesmente apareça na frente da câmera. Você faz isso desenhando algo fora da lata se desanexar. Por exemplo, vamos testar isso com uma impressão de pontos gráficos de amor. E vou imprimir olá. E isso será impresso na posição 10. 10. Embora seja muito pequeno, você pode ver aquele pequeno olá. E no canto superior esquerdo, e fica lá, não importa onde a câmera vá porque está sendo desenhada fora da perspectiva das câmeras, ela age como um HUD. Na próxima lição, discutiremos o básico da física, que é algo com o qual precisamos estar familiarizados antes que possamos implementar colisões reais neste jogo. 8. Física: Olá pessoal. Neste vídeo, vou abordar os conceitos básicos do uso da física dentro do amor 2D e como podemos criar rapidamente coliders que interagem uns com outros e, opcionalmente, responderem à gravidade. Você não precisa de nada para começar com este projeto 2D de amor, faremos até mesmo um novo se você estiver acompanhando as lições anteriores, este vídeo fornece algumas informações extras que precisamos para cobrir antes de continuar com isso. Agora, para a física, há um módulo para isso incorporado diretamente no amor, e é muito poderoso. Infelizmente, isso significa que também é complicado. Mas existem bibliotecas de código aberto por aí que facilitam muito o trabalho com física. O mais popular é o campo de vento. Quando o campo fornece um monte de ferramentas realmente fáceis de usar , que tornam o início muito mais rápido e seu código será mais fácil de escrever. Eu pessoalmente uso a biblioteca para todos os meus jogos, embora ela tenha sido arquivada recentemente, ela ainda é totalmente confiável com as versões mais recentes do amor. E isso realmente faz uma grande diferença. Para incluir esse código em seu projeto, você pode clonar o repositório se souber como fazer isso, ou você pode ir em frente e acessar o código e baixar o zip. Então você só vai querer extrair a pasta. E então, dentro, queremos encontrar esta pasta de campo de vento que está ao lado do Leia-Me. Então vá em frente e copie isso e navegue até a pasta do projeto do jogo. No meu caso, estou usando novos projetos para esta demonstração. É apenas um arquivo main.py. Vou criar uma nova pasta. Vou chamá-lo de bibliotecas. Como sempre coloco meu código-fonte aberto na pasta de uma biblioteca. Vou aqui e depois vou colar naquela pasta de campo de vento. Agora vá em frente e abra seu ponto principal Lua. E para essa demonstração estou começando com um arquivo vazio. Então, para começar, eu sempre coloco a atualização de carga e desenho funções como fiz aqui. E a primeira coisa que faremos é importar a pasta de campo de vento que acabamos de copiar para nossas bibliotecas. Então, faremos isso com o WWF igual exigir. E então, nessas aspas, faremos o caminho para aquela pasta que era o campo de vento de barra das bibliotecas. Tenha em mente que estamos importando toda uma pasta de campo de vento e ela será colocada nessa variável WWF. E isso é importado, podemos usá-lo para começar a trabalhar com física. O primeiro passo para trabalhar com a física do amor é criar um mundo. Alguém diria que World é igual a WWF dot new world. Um mundo é simplesmente um espaço onde existem objetos físicos e usamos o mundo para realmente criar nossos objetos. Como, por exemplo, vamos criar um objeto de jogador. Jogador é igual a dois pontos do mundo. E vamos fazer dele um retângulo. Vamos dizer novo colisor retangular. Em seguida, esses parênteses, exceto alguns parâmetros. A primeira é a posição que queremos que nosso jogador comece. Então vou colocá-los na posição 354 x, e depois 100 para Y. Então queremos a largura e a altura do nosso retângulo. Vou fazer isso com AT e altura 80. Então agora nosso jogador é um colisor retangular e está sendo armazenado nesta variável de jogador. E quando digo collider, estou me referindo a um objeto físico que existe em nosso mundo. Parte do que quando o campo faz é que ele torna os colliders tão fáceis de trabalhar. Normalmente, com a biblioteca de física amada padrão, você precisa definir um corpo de fixação e uma forma e depois acompanhar tudo separadamente. Um colisor do campo de vento, porém, é uma combinação de todos os três em um só lugar, tornando-o muito mais simples. Antes de salvarmos e executarmos o jogo, devemos adicionar duas coisas rápidas. Primeiro, queremos adicionar atualização de dois pontos mundiais. Portanto, isso garante que o mundo seja atualizado e toda a física seja atualizada. Então, no sorteio, vou colocar no sorteio de dois pontos do mundo. Agora, o que o desenho do cólon do mundo faz é que ele desenha as formas de todos os coliders em nosso mundo. Então vou seguir em frente e salvar e correr. E aí está, esse objeto retangular aqui é o nosso colisor de jogadores. Mas não está fazendo nada. Uma coisa que poderíamos fazer é dar a este mundo alguma gravidade. Esta nova função mundial aqui aceita alguns parâmetros opcionais, sendo que os dois primeiros são a definição de gravidade. Então, se eu fizer 0, vamos tentar 100. Isso seria a gravidade indo para baixo. Este é o valor x para o que é nossa gravidade, e esse é o valor y. Então, como temos apenas um valor positivo para y, positivo significa ir para baixo. Então, todos os nossos objetos físicos devem ser afetados por uma gravidade descendente. Então, se salvarmos agora e corremos, veremos que nosso colisor de jogadores agora está caindo para baixo. Mas estava caindo muito devagar. Então, o que poderíamos fazer é bater este 100 até 500. Isso torna a gravidade mais intensa. Portanto, nosso jogador cai em um ritmo mais rápido. No entanto, nem todos os objetos precisam ser afetados pela gravidade. Vamos demonstrar isso criando uma plataforma para o nosso jogador pousar. Vamos chamá-lo de chão, e faremos dois pontos do mundo, nova confusão retangular. E sua posição. Vou colocá-lo em cem. Quatrocentos é sua posição. E então a largura será 600 e a altura será 100. Então, se fôssemos salvar e correr agora, vemos nosso terreno, mas também segue com a gravidade. Para tornar o solo menos propenso à gravidade ou ignorar a gravidade completamente, precisamos mudar seu tipo. Podemos fazer o tipo de conjunto de cólon terra para estático. Então, se salvarmos e corremos agora, nosso terreno é estático, o que significa que não é afetado pela gravidade e o jogador cai sobre ele. E agora mencionei que existem forças que você pode aplicar aos colliders. Vamos fazer nosso jogador pular usando um impulso. Então, depois de tudo isso, vou colocar em uma função adorei nossa tecla pressionada. E aqui vamos verificar se a tecla é igual a AP, o significa que pressionamos a tecla de seta para cima, então aplicaremos nosso impulso. Vamos dizer que os dois pontos do jogador aplicam impulso linear. E o impulso que aplicaremos é 0. E vamos tentar menos 5000. Agora, um impulso linear é apenas uma força rápida empurrando o colisor. Nesse caso, aplicamos um valor y negativo sendo aplicado ao jogador. Como esse negativo 5000 está na posição y, isso vai empurrar o jogador cima porque o negativo sobe. Se salvarmos e executarmos. Quando pressiono a tecla de seta para cima, o jogador faz um pequeno salto porque estamos aplicando esse impulso linear. Existem muitas outras ações que você pode aplicar a um collider. Vamos fazer o jogador se mover para a esquerda e para a direita usando uma força desta vez em oposição a um impulso. Então, faremos isso em nossa função de atualização e, em seguida, vamos amarrar isso às teclas de seta dirão, se amado, que o ponto do teclado está baixo e diremos à esquerda. Então, quando a tecla de seta para a esquerda for pressionada, aplicaremos uma força, diremos que os dois pontos do jogador aplicam força. E faremos menos 5000 na posição x desta vez. Então, vai nos mover para a esquerda. E então diremos o outro, se amou nosso teclado que está para baixo para o certo. E neste caso, faremos a mesma coisa. Aplique força, mas faremos 5000 positivos, o que nos moverá para a direita. E isso deve ser suficiente se salvarmos e corremos, onde se eu pressionar para a esquerda, começo a me mover para a esquerda, e se eu pressionar para a direita, começo a me mover para a direita, meio que deslize ao longo do chão. A coisa a notar sobre as forças, porém, é que a continuação se empilhando e crescendo mais intensamente. Por que o jogador acelera tanto quando se move para a esquerda e para a direita. Se você quisesse limitar isso, você só poderia aplicar uma força para que o jogador ainda não esteja se movendo na velocidade máxima. Podemos fechar isso. Então, vamos aplicar essa força aqui somente se o jogador precisar dela para chegar à velocidade máxima. Caso contrário, não queremos aplicá-lo, caso contrário, haverá ir muito rápido. Então, primeiro para obter a velocidade real dos jogadores como está neste quadro, podemos fazer PX local, PY é igual a dois pontos do jogador, obter velocidade linear. E esta função aqui vai pegar a velocidade dos jogadores e colocar seu valor x em p x e seu valor y em PY. Então agora podemos verificar o valor de P x aqui para determinar se queremos realmente aplicar essa força. Então aqui nesta linha eu vou dizer, e px é maior que menos 300. Então, vamos fazer com que menos 300 seja a velocidade máxima que podemos ir. Então, só vamos aplicar a força se estivermos abaixo desse limite. A mesma coisa para a direita. Vamos dizer, e P x é menor que 300 positivo. Então, fazendo menos 300 para a direção esquerda, movendo-se para a esquerda e positivo para a direção certa. Além disso, para tornar as coisas um pouco mais rápidas, vou mudar este 5000 aqui para 8000. Isso nos fará acelerar um pouco mais rápido. Então, se eu salvar e correr agora, se eu me mantiver à esquerda, mudei para a esquerda, e se eu mantiver à direita, eu me movo para a direita. Mas você vai notar que eu não acabo indo muito rápido como eu estava fazendo antes. No geral, porém, este jogo que criamos agora pode ser o início de um projeto de plataforma completo. E conseguimos configurá-lo rapidamente. A página do GitHub para campo de vento fornece muitas informações úteis sobre como trabalhar com física. Eu recomendo ler isso. Para o próximo vídeo, vou pegar os conceitos discutidos aqui e aplicá-los ao jogo com estilo de cima para baixo dos vídeos anteriores. 9. Colisões: Olá pessoal. Neste vídeo, mostrarei como adicionar paredes e colisões ao seu jogo 2D de amor para que seu personagem não possa simplesmente caminhar pelas paredes. Além disso, mostrarei como gerar essas paredes no jogo do seu bloco para o mapa. Para começar, precisaremos utilizar o campo quando, sobre o qual falei em um vídeo anterior. Esses primeiros passos serão os mesmos desse vídeo. E primeiro você vai para a página do GitHub aqui e cloná-lo em seu projeto ou você pode baixá-lo como Zip. Então, é claro que você vai querer extrair esse arquivo zip. E então vamos entrar aqui e pegar esta pasta de campo de vento. Está bem ao lado deste arquivo README. Vou copiar isso. E de volta à nossa pasta de projeto de jogo, vou para a pasta da nossa biblioteca e colar esta pasta de campo de vento aqui. Quando essa pasta estiver pronta, precisaremos incluí-la em nosso código. Então, no topo, vou adicionar o WWF igual a exigir. E então o caminho é o campo de vento de barra de bibliotecas. Tenha em mente que isso carrega toda a pasta de campo de vento nessa variável WWF. Agora podemos usar essa variável para criar nosso mundo, dirá que World é igual a WWF e esse novo mundo. E então, para os parâmetros de gravidade, este é um jogo de estilo RPG de cima para baixo. Então, não teremos gravidade 0 vírgula 0. Também precisamos atualizar o mundo, então para baixo e nossa função de atualização. E vamos colocar isso após código de movimento do jogador. Então, provavelmente aqui. E vamos dizer atualização de dois pontos do mundo. E então precisamos passar em DT assim. E, finalmente, desça e desenhe temporariamente, vamos desenhar o mundo. Então, vamos dizer sorteio de dois pontos do mundo. Isso nos permitirá ver os colliders que criamos. Mas no final, provavelmente vamos querer remover isso, já que não queremos realmente ver todos esses planadores e o produto final. Também saiba que estamos desenhando dentro da nossa câmera para que ela apareça dentro da lente da câmera. Agora que isso está no lugar, precisamos dar ao nosso jogador um colisor, ou essencialmente um objeto de física que permita que ele colida com paredes. Então, faça backup no topo, onde definimos nosso jogador. Eu também vou dar um colisor. Então o colisor de pontos do jogador é igual a dois pontos do mundo, e então vamos fazer dele um retângulo BSG. Então novo colisor retangular BSG. Agora, um retângulo BSG é muito parecido com um retângulo comum, mas seus cantos são cedidos em um pouco. É mais como uma forma de octógono, que na minha experiência funciona um pouco melhor para os personagens dos jogadores. Agora, para os parâmetros, a primeira são as posições x e y. Então, para x eu farei 400, e para y farei 250. Então precisamos do tamanho, da largura e da altura deste retângulo BSG com eu farei 40 e altura vou fazer 80. E depois há mais um parâmetro que determina o quão longe estão esses cantos. Para ajudar a demonstrar isso, vou fazer 14 para começar. E então mais uma coisa que vou fazer com este Collider não vai torná-lo incapaz de girar algo como um colisor de pontos do jogador definir rotação fixa como true. Portanto, isso evita que o colisor gire ao redor. Então, agora que isso está no lugar, vou salvar e correr. E podemos ver que nossa desordem está bem aqui. E você pode ver o que quero dizer com os cantos são cedidos, então é como um retângulo regular, mas esses cantos estão inclinados, então é mais uma forma oval, mais tecnicamente é um octógono. Mas você notará que o colisor não se move atualmente, ele só permanece no lugar. O que realmente queremos agora é a posição do jogador sempre corresponda a essa posição de colliders aqui. Para ajudar com isso, vamos, depois de atualizarmos o mundo, também vamos definir o ponto do jogador x igual ao colisor de pontos do jogador, dois pontos GetX. E o mesmo com o ponto y do jogador branco é igual colisor de pontos do jogador ganhe y. então agora a posição do jogador sempre se alinhará com o colisor. Nós economizamos e corremos agora, somos uniformemente combinados, embora o tamanho provavelmente precise ser ajustado um pouco. Então, vamos fazer isso primeiro. Vou rolar de volta para onde criamos o collider para o jogador. Vou aumentar a largura, digamos para 50. E faremos isso 100. E eu também posso mudar esse 14, então é menos côncavo. Vou mudá-lo para algo como dez. Então, vamos experimentar isso. Isso é muito melhor. É muito mais próximo de corresponder aos parâmetros dos jogadores ou ao tamanho do jogador. Você notará agora que não podemos mais nos mover. E isso ocorre porque estamos sempre bloqueando a posição do jogador para a posição de colliders. E como o Collider não está se movendo, também não podemos nos mover. Então, para resolver isso, vamos retrabalhar todo o código de movimento que fizemos para o jogador, mas alterá-lo para que ele esteja abordando o collider. Então, todo esse código está acontecendo em atualização para essas instruções if que estão verificando a entrada do teclado e como estamos nos movendo normalmente está mudando a exposição. Mas, em vez disso, o que vamos fazer é mudar a velocidade do colisor. Então, para ajudar com isso, vou criar algumas novas variáveis locais. Vou dizer vx local e defini-lo 0 e VY local e defini-lo como 0. Então, estes representarão a velocidade na direção x e na direção y do nosso colisor. Agora, em vez de atualizar Platão dot x, vamos definir vx igual à velocidade do jogador. E o mesmo com todos esses outros, mudará vx. É igual à velocidade do ponto do jogador. Mas como estamos nos movendo para a esquerda, queremos que isso seja negativo. Então, estamos multiplicando velocidade jogada fora vezes menos 1. E então aqui para cima e para baixo, vamos atualizar o VY. Vy é igual à velocidade de reprodução para baixo e, em seguida, v y é igual a essa velocidade do jogador. Mas como estamos subindo, precisamos multiplicar isso por menos um. E depois de tudo isso, nossos valores VX e VY são atualizados para corresponder à entrada do nosso teclado. Então podemos simplesmente dizer colisor de pontos do jogador, velocidade linear definida por dois pontos. E essa função de velocidade linear assume dois parâmetros, um para a velocidade x e outro para a velocidade y. Assim, podemos passar em v x para o x e depois v y para o y. Então, qualquer entrada de teclado que colocamos, ele vai se alinhar com esses dois parâmetros e atualizar a velocidade linear do nosso collider. Então, se salvarmos e experimentarmos isso agora, se eu mantiver algumas direções, podemos ver que estou meio que me movendo, mas estou me movendo muito devagar. E isso ocorre porque estamos atualizando esses valores para a velocidade do ponto do jogador. E se voltarmos para cima, provavelmente encontraremos esse jogador essa velocidade, sim, o jogador que a velocidade é muito baixa. São apenas cinco. Precisamos de algo mais próximo de 300. Isso é uma velocidade mais apropriada. Então, se salvarmos e corremos agora, quando eu me movo, o jogador se move mais especificamente o colisor se move. E está combinando qualquer jogador x e jogador que yé. Então, nosso personagem jogador se move com ele. E com essa mudança, você não deve notar nenhuma diferença com a forma como o jogador se sente ao controlar. Agora, o próximo passo é colocar em algumas paredes para o jogador colidir. Desde agora eu posso simplesmente caminhar por essas árvores, os prédios e outras coisas. Vamos colocar um colisor muito simples para demonstrar. Então, na parte inferior da nossa adorada função de carga de pontos, vou colocar um novo colisor de parede. Vou chamá-lo de parede local igual dois pontos do mundo, novo colisor retangular. Whoops, novo colisor retangular, não retângulo BSG. Então, com este novo colisor retangular, precisamos dar-lhe uma posição saída na posição cem, duzentos. E então, por uma largura, não sei, farei uma largura de 120 e depois uma altura de 300. Então, com isso no lugar, devemos ver que se salvarmos e corremos lá é esse grande retângulo aqui é a nossa parede. Mas você vai notar que quando entrarmos nela, a parede simplesmente cai. Espero que você consiga ver que está meio desbotado, mas a parede cai porque ambos os nossos coliders são dinâmicos. Em vez disso, precisamos do nosso tipo de conjunto de cólon de parede para estático. Estático significa que não é afetado por colisões e não vai se afastar. Então, se salvarmos e corremos agora, quando eu corro para a parede, a parede permanece no lugar e o personagem também parou quando entramos nela. A propósito, olhando mais de perto, parece que a borda do nosso colisor não corresponde exatamente ao sprite do jogador. Se você quiser, você pode aumentar a largura para ser mais preciso. Mas, na minha opinião, estar perto o suficiente é bom o suficiente. De qualquer forma, temos nossa parede funcionando e ela pára o jogador. O que queremos fazer agora é fazê-lo para que possamos gerar essas paredes a partir de azulejos. E tenha em mente que isso requer que você tenha uma implementação simples em mosaico configurada para o seu projeto. Então vá em frente e dê uma olhada neste vídeo no canto para se atualizar. Portanto, implicado para o nosso mapa, vamos começar indo aqui e criando uma nova camada de objeto. E vamos chamá-lo de paredes. Agora que essa camada de paredes é criada e a selecionamos, podemos usar essas ferramentas aqui para objetos. Então, vou clicar nesta ferramenta retangular, e vou desenhar alguns objetos em cima de lugares onde eu quero que haja uma parede. Então desenhei dois objetos. E se você usar esse seletor roxo aqui, você pode editá-los, você pode movê-los e alterar seus tamanhos. Mas eu tenho dois objetos desenhados. Uma outra dica se não encaixando na grade como é para mim, você pode ir até View snapping e, em seguida, escolher sua opção aqui para encaixar se precisar torná-lo mais preciso ou torná-lo encaixe na grade. Então, com esses dois objetos desenhados, vou salvar o mapa. Mas, em seguida, vá até a exportação de arquivos como. E, em seguida, certifique-se de exportá-lo para o local correto. No meu caso, está na minha pasta do jogo, mapas e, em seguida, é esse mapa de teste.get para um arquivo. Vou economizar em cima disso. E isso faz com que nosso mapa seja exportado. Sempre que você fizer alterações no seu mapa, você precisa ter certeza de salvar e exportar, caso contrário, essas alterações não aparecerão no jogo. Agora precisamos criar enquanto colliders que correspondam aos objetos que desenhamos para ladrilhos. Então, vamos fazer algumas coisas por isso. A primeira coisa que vou fazer é criar uma tabela WALS. Então, isso conterá todos os objetos de parede que criamos. Em seguida, precisamos de uma declaração if. Vamos dizer se camadas de pontos do mapa do jogo com colchetes e digamos paredes. Então, o que esta declaração if está fazendo é verificar se temos uma camada chamada Paredes. Caso contrário, não faremos mais nada. Então, se tivermos uma camada de mapa de jogo chamada Paredes, vamos iterar todos os objetos nessa camada. E fazemos isso com um loop for. Vamos dizer para eu vírgula em pares. E então, entre parênteses aqui, especificamos mapa do jogo que camadas. A mesma coisa de antes, paredes. Mas então dizemos objetos de ponto. Então, isso nos leva todos os objetos na camada de paredes. E então dizemos fazer e terminar. Agora, dentro desse loop for-loop é onde nós realmente vamos gerar nossos objetos de parede. E podemos realmente pegar esse código aqui e utilizá-lo. Então, vamos colar isso aqui e formatá-lo um pouco. Agora. Agora estamos codificando isso como cento e duzentas coisas como parâmetros. Mas, em vez disso, o que queremos fazer é pegar o objeto aqui do lado a lado e usar esses valores para eles. Então vou dizer obj dot x e obj dot y para o valor x e y. E a mesma coisa com largura e altura. Largura e altura do ponto obs. E salve isso. Então, agora seja qual for a parede que criamos, está tirando esses valores diretamente do objeto que desenhamos em azulejos. E uma última coisa que queremos inserir Este objeto de parede que acabamos criar em nossa mesa de paredes. Então vou dizer mesa, inserir paredes, parede, que coloca nosso objeto de parede nas paredes. Isso nos ajuda a acompanhar tudo o que criamos. Só para ajudar a esclarecer por que isso funciona, se eu selecionar um desses objetos que criamos, podemos ver que ele tem uma propriedade x, y , width e height, que podemos ver aqui à esquerda. E essas são as propriedades exatas que estamos acessando quando estamos criando essa parede. Vamos seguir em frente e salvar e executar. E podemos ver o contorno branco. Mas quando entro nessas casas aqui onde desenhei esses objetos, não podemos mais percorrer isso. E isso é o mesmo com este aqui em cima. Onde quer que desenhemos um objeto em azulejos, agora há uma lei sentada lá e que não podemos mais percorrer. E uma vez que você desenhe o resto dos objetos em azulejos, não precisamos mais desenhar o mundo porque tudo é preciso para o nível em si. Então, se removermos isso, não veremos mais os colliders, que é exatamente o que queremos. Se salvarmos e corremos agora, tudo voltará ao normal, mas o jogador tem uma caixa de sucesso e cada dessas paredes não pode mais ser percorrida. Então, tudo parece estar no lugar. E isso sobre cobre tudo. Agora temos uma base muito sólida para um tipo de jogo RPG. 10. Resumo: Isso envolve o conteúdo principal desta classe. Como todas as classes do Skillshare, existe a opção de enviar um projeto de classe. Eu realmente quero que qualquer um participando dessa aula seja o mais criativo possível. Então, o projeto da classe é simplesmente fazer qualquer coisa que você gosta apaixonado. Isso pode incluir adicionar algo novo ao jogo que criamos nos vídeos ou iniciar algo novo. Seja o que for que você faça, eu encorajo você a manter as coisas simples no início e depois construir coisas mais complicadas. Meu primeiro jogo com amor foi um clone Breakout muito básico. E cada jogo depois disso, construído sobre a complexidade, essa é uma ótima maneira de aprender e praticar, e eu sempre encorajo meus alunos a fazer o mesmo. Trabalhar por conta própria pode ser desafiador, independentemente disso. Então, há algumas dicas que eu gostaria de compartilhar. Primeiro é utilizar o wiki 2D love. Este site descreve tudo o que você poderia precisar sobre o love 2D e todos os seus recursos. Todas as funções e recursos são descritos em detalhes aqui. E achar isso é muito fácil. Por exemplo, se eu esqueci os parâmetros para o desenho de pontos demográficos de amor, posso apenas Google online por amor 2D, adorei nossos gráficos que eu desenho. E a página da wiki aparecerá. Estou constantemente verificando coisas neste site sempre que estou trabalhando em meus próprios jogos. Então, se você tiver alguma dúvida específica sobre qualquer coisa, não deixe de conferir os fóruns 2D do amor. A comunidade aqui é muito ativa e as pessoas estão sempre dispostas a ajudar se você estiver preso em alguma coisa. Outra coisa útil é encontrar alguns projetos de amor de código aberto on-line e analisar como eles codificaram certos recursos para você começar. Tenho um ótimo recurso na minha página do GitHub, que é um jogo 2D de amor de código aberto completo. Você pode baixá-lo e executá-lo localmente para jogar. E então todo o código-fonte está disponível para você examinar, aprender e usar diretamente para seus próprios jogos. Então, enquanto você está trabalhando em algo com amor, definitivamente vá até a guia projetos e recursos e clique no botão Criar projeto, faça upload de algumas capturas de tela e descreva o que você está trabalhando. Estou muito animado para ver que tipo de coisas as pessoas inventam. Mais uma vez, tente mantê-lo simples no início e suba. Começar com facilidade é a chave para se sentir confortável com isso. E eu diria que vamos concluir esta aula. Muito obrigado por passar por esse material. Se você ainda não o fez, por favor, deixe um comentário e, se você gostou da aula, recomende. Agradeço muito o apoio daqui. Sinta-se à vontade para entrar em contato comigo com qualquer pergunta sobre Lua, amor ou programação geral. Estou sempre disposto a ajudar como posso com tudo o que disse, acredito que cobre tudo. Obrigado novamente por fazer minha aula e estou ansioso para vê-lo na próxima.