Vilarejo PK2P
Bem-vindo ao fórum Vilarejo PK2P! O fórum oficial do canal Press Key to Play do Youtube!

Participe do fórum, é rápido e fácil

Vilarejo PK2P
Bem-vindo ao fórum Vilarejo PK2P! O fórum oficial do canal Press Key to Play do Youtube!
Vilarejo PK2P
Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.

Grupo para reunir as pessoas que acompanham os vídeos no canal Press Key to Play e discutir os assuntos abrangidos pelo Blog PK2P.

Últimos assuntos

» RPG de Mesa: A fronteira Volume 4: O Castelo Owlrick. (D&D5e)
por Ariano 10/12/2020, 23:18

» [tutorial] hash em C/C++ com openssl
por kodo no kami 21/9/2020, 13:37

» ping lista grafico
por kodo no kami 24/7/2020, 07:53

» [Discord] Campanha de RPG D-cyber
por Jonatan15 17/7/2020, 11:11

» [tradução] 1869 (msdos)
por kodo no kami 26/6/2020, 13:43

» [source] exemplo filtro mediano
por kodo no kami 1/6/2020, 00:24

» [tutorial] criar filtro nas imagens (python)
por kodo no kami 22/5/2020, 19:29

» Wireless IDS Sagemcom
por kodo no kami 22/4/2020, 23:50

» [source] detectar dispositivos no wifi (sagemcom)
por kodo no kami 9/3/2020, 20:25

» [tutorial] wla assemblador (65xx, 68xx, z80, 8008, 8080 e huc6280)
por kodo no kami 2/2/2020, 16:42


Você não está conectado. Conecte-se ou registre-se

[tutorial] pygame: captura de teclas #4

Ir para baixo  Mensagem [Página 1 de 1]

kodo no kami

kodo no kami

e ae galera blz? nessa parte do tutorial do pygame vamos aprender como detectar e manipular as teclas que foram apertadas, para começar vamos criar um quadrado que sera o nosso personagem principal, como a posição desse quadrado vai variar dependendo da tecla apertada então precisamos criar variaveis para atribuir as posições (no meu exemplo criei uma lista com a posições X e Y, e os tamanhos X e Y daquele quadrado)

Código:
#!/usr/bin/python

import pygame

pygame.init()

largura = (300,200)

janela = pygame.display.set_mode(largura)

personagem = [100,100,10,10]

while True:
   for evento in pygame.event.get():
      if evento.type == pygame.QUIT:
         pygame.quit()
         exit(0)
   
   janela.fill((255,255,255))
   
   pygame.draw.rect(janela,(255,0,0),personagem)
   
   pygame.display.flip()

[tutorial] pygame: captura de teclas #4 XB92PIg

para detectar uma tecla apertada existem pelo menos duas formas de fazer isso, sendo que a primeira forma é usando um metodo chamado get_pressed da classe key (pygame.key.get_pressed), a segunda forma seria por eventos. O metodo get_pressed retorna uma tupla com todas as teclas em forma de posição com o valor 1 ou 0 caso esteja pressionada ou não (ex: a tecla 'a' é igual a posição 97)

Código:
#!/usr/bin/python

import pygame

pygame.init()

largura = (300,200)

janela = pygame.display.set_mode(largura)

personagem = [100,100,10,10]

while True:
   for evento in pygame.event.get():
      if evento.type == pygame.QUIT:
         pygame.quit()
         exit(0)
   
   janela.fill((255,255,255))
   
   pygame.draw.rect(janela,(255,0,0),personagem)
   
   tecla = pygame.key.get_pressed()
   
   if tecla[97] == 1:
      print("voce pressionou a tecla 'a' ")
   
   pygame.display.flip()

[tutorial] pygame: captura de teclas #4 XQiLWpS

podemos utilizar a função ord para converter uma tecla em codigo

Código:
if tecla[ord('a')] == 1:

outra forma é utilizando algumas constantes do proprio pygame (ex: pygame.K_a)

Código:
if tecla[pygame.K_a] == 1:

para movimentar o nosso objeto basta alterar a posição X e Y dele, com isso ele vai ser desenhando na proxima posição (podemos usar a posição atual e um determinado valor para uma movimentação relativa daquele objeto)

Código:
#!/usr/bin/python

import pygame

pygame.init()

largura = (300,200)

janela = pygame.display.set_mode(largura)

personagem = [100,100,10,10]

while True:
   for evento in pygame.event.get():
      if evento.type == pygame.QUIT:
         pygame.quit()
         exit(0)
   
   janela.fill((255,255,255))
   
   pygame.draw.rect(janela,(255,0,0),personagem)
   
   tecla = pygame.key.get_pressed()
   
   if tecla[ord('w')] == 1:
      personagem[1] = personagem[1] - 1
   if tecla[ord('s')] == 1:
      personagem[1] = personagem[1] + 1
   if tecla[ord('a')] == 1:
      personagem[0] = personagem[0] - 1
   if tecla[ord('d')] == 1:
      personagem[0] = personagem[0] + 1
   
   pygame.display.flip()

para a gente detectar a tecla apertada via eventos, basta detectar os eventos do tipo KEYDOWN ou KEYUP, para pegar a tecla em especifico comparamos o codigo da tecla com o atributo key

Código:
#!/usr/bin/python

import pygame

pygame.init()

largura = (300,200)

janela = pygame.display.set_mode(largura)

personagem = [100,100,10,10]

while True:
   for evento in pygame.event.get():
      if evento.type == pygame.QUIT:
         pygame.quit()
         exit(0)
         
      if evento.type == pygame.KEYDOWN:
         if evento.key == ord('k'):
            print("tecla 'k' foi apertada")
   
   janela.fill((255,255,255))
   
   pygame.draw.rect(janela,(255,0,0),personagem)
   
   pygame.display.flip()

[tutorial] pygame: captura de teclas #4 M9PxYWl

uma das diferenças entre o evento e o metodo get_pressed é a propria movimentação, no caso do evento o personagem vai se mover apenas uma unica vez mesmo se a gente ficar pressionando aquela tecla, para contornar isso usamos uma variavel para a velocidade de movimento, atribuimos a cada loop na posição do personagem a propria posição somada com aquela variavel, usamos o evento KEYDOWN para atribuir um valor do movimento para essa variavel e o KEYUP para zerar esse movimento (ou seja aquela variavel com um determinado valor é equivalente ao objeto em movimento, aquela variavel com o valor igual a zero é o objeto parado), com isso ele vai ter o mesmo efeito do metodo get_pressed

Código:
#!/usr/bin/python

import pygame

pygame.init()

largura = (300,200)

janela = pygame.display.set_mode(largura)

personagem = [100,100,10,10]
veloc_x = 0
veloc_y = 0

while True:
   for evento in pygame.event.get():
      if evento.type == pygame.QUIT:
         pygame.quit()
         exit(0)
      
      if evento.type == pygame.KEYDOWN:
         if evento.key == ord('w'):
            veloc_y = -1
         if evento.key == ord('s'):
            veloc_y = 1
         if evento.key == ord('a'):
            veloc_x = -1
         if evento.key == ord('d'):
            veloc_x = 1   
            
      if evento.type == pygame.KEYUP:
         if evento.key == ord('w'):
            veloc_y = 0
         if evento.key == ord('s'):
            veloc_y = 0
         if evento.key == ord('a'):
            veloc_x = 0
         if evento.key == ord('d'):
            veloc_x = 0      
   
   janela.fill((255,255,255))
   
   personagem[0] = personagem[0] + veloc_x
   personagem[1] = personagem[1] + veloc_y
   
   pygame.draw.rect(janela,(255,0,0),personagem)
   
   pygame.display.flip()

é possivel fazer o mesmo usando as imagens

Código:
#!/usr/bin/python

import pygame

pygame.init()

largura = (300,200)

janela = pygame.display.set_mode(largura)

personagem = [100,100]
shinobu = pygame.image.load("shinobu.png")

while True:
   for evento in pygame.event.get():
      if evento.type == pygame.QUIT:
         pygame.quit()
         exit(0)
      
   janela.fill((255,255,255))
   
   tecla = pygame.key.get_pressed()
   
   if tecla[ord('w')] == 1:
      personagem[1] = personagem[1] - 1
   if tecla[ord('s')] == 1:
      personagem[1] = personagem[1] + 1
   if tecla[ord('a')] == 1:
      personagem[0] = personagem[0] - 1
   if tecla[ord('d')] == 1:
      personagem[0] = personagem[0] + 1
   
   janela.blit(shinobu, personagem)
   
   pygame.display.flip()

[tutorial] pygame: captura de teclas #4 Nds6T4p

então galera finalizamos essa parte do tutorial, a gente se ve na proxima parte (claro se eu não morrer antes kkk)

by kodo no kami

https://eofclub.in/forum

Ir para o topo  Mensagem [Página 1 de 1]

Permissões neste sub-fórum
Não podes responder a tópicos