이벤트로 이미지 결정하기
배우기
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()
질문하기
추가 자료
no files uploaded

추가 자료가 없습니다

여기서 새로운 학습 자료를 확인하세요!
선생님이 추가한 자료들을 바로 확인할 수 있어요.