13 파이썬 - Pygame
이벤트로 이미지 결정하기
이제 버튼을 눌렀을 때 공격을 막는 이미지를 추가해볼까요?
그러기 위해서는 사용자가 어떤키를 눌렀는지 추척해야 합니다. get_pressed()는 사용자가 누른 키보드 값을 우리에게 전달해준답니다. 이 값을 pressed에 저장해놓을까요?Python
1
pressed = pygame.key.get_pressed()방어를 하는 이미지도 추가를 해야 하겠죠?
Python
self.block = pygame.image.load("block_1.png")앞 강의에서 update() 함수는 단순히 다음 이미지를 선택해주는 일만 했는데요. 이제 "스페이스바"를 눌렀을 때 방어하는 이미지를 표시해주어야 하기 때문에 if 문을 사용해야 합니다. mode라는 것을 추가해서 어떤 이미지를 표시할 건지 정해봅시다.
Python
def update(self, mode):
if mode == 'idle' :
self.index += 1
if self.index >= len(self.idle):
self.index = 0
self.image = self.idle[self.index]
else :
self.image = self.block위에서 사용자가 누른 키보드 값을 pressed에 저장했었죠? update()를 부를 때 스페이스바 여부에 따라 mode를 같이 넘겨주어야 합니다. 그럼 또 조건문을 사용하면 되겠죠?
만약 사용자가 스페이스 바를 눌렀다면 pressed 안에 pygame.K_SPACE라는 값이 있을 겁니다.
Python
if pressed[pygame.K_SPACE] :
group.update('block')
else :
group.update('idle')실행해 볼까요?
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
import pygame
pygame.init()
window = pygame.display.set_mode((500, 320))
is_end = False
clock = pygame.time.Clock()
class Sprite(pygame.sprite.Sprite):
def __init__(self):
super(Sprite, self).__init__()
self.idle = []
self.idle.append(pygame.image.load("idle_1.png"))
self.idle.append(pygame.image.load("idle_2.png"))
self.idle.append(pygame.image.load("idle_3.png"))
self.idle.append(pygame.image.load("idle_4.png"))
self.block = pygame.image.load("block_1.png")
self.index = 0
self.image = self.idle[self.index]
self.rect = pygame.Rect(180, 100, 64, 64)
def update(self, mode):
if mode == 'idle' :
self.index += 1
if self.index >= len(self.idle):
self.index = 0
self.image = self.idle[self.index]
else :
self.image = self.block
sprite = Sprite()
group = pygame.sprite.Group(sprite)
while not is_end :
for event in pygame.event.get() :
if event.type == pygame.QUIT :
is_end = True
pressed = pygame.key.get_pressed()
window.fill((255, 255, 255))
if pressed[pygame.K_SPACE] :
group.update('block')
else :
group.update('idle')
group.draw(window)
pygame.display.update()
clock.tick(10)
pygame.quit()
quit()