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)
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)
podemos utilizar a função ord para converter uma tecla em codigo
outra forma é utilizando algumas constantes do proprio pygame (ex: pygame.K_a)
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)
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
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
é possivel fazer o mesmo usando as imagens
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
- 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()
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()
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()
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()
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