The problem is, when I click the arrow in my pygame game, pygame recognizes it as multiple mouse clicks.
What I've tried:
Making a KeyDownListener
class like so:
class KeyDownListener:
def __init__(self):
self.down = False
self.is_up = False
def update(self, key_pressed):
if not key_pressed:
self.is_up = True
self.down = False
else:
if self.is_up:
self.down = True
else:
self.down = False
self.is_up = False
But that didn't work because then nothing happened when I clicked the arrow.
My Arrow
class:
class Arrow(pygame.sprite.Sprite):
default_imgresizer = pygame.transform.scale
default_imgflipper = pygame.transform.flip
def __init__(self, win, x, y, rotate=False):
pygame.sprite.Sprite.__init__(self)
self.win = win
self.x = x
self.y = y
self.image = pygame.image.load("./arrow.png")
self.image = self.default_imgresizer(self.image, [i // 4 for i in self.image.get_size()])
if rotate:
self.image = self.default_imgflipper(self.image, True, False)
self.rect = self.image.get_rect(center=(self.x, self.y))
def is_pressed(self):
return pygame.mouse.get_pressed(3)[0] and self.rect.collidepoint(pygame.mouse.get_pos())
My event loop:
while running:
for event in pygame.event.get():
if event.type == QUIT:
running = False
screen.blit(computer_screen, (0, 0))
current_profile.win.blit(current_profile.image, current_profile.rect)
arrow_left.win.blit(arrow_left.image, arrow_left.rect)
arrow_right.win.blit(arrow_right.image, arrow_right.rect)
if arrow_right.is_pressed():
with suppress(IndexError):
current_profile_num += 1
current_profile = profiles[current_profile_num]
elif arrow_left.is_pressed():
with suppress(IndexError):
current_profile_num -= 1
current_profile = profiles[current_profile_num]
current_profile.increase_size()
back_button.win.blit(back_button.image, back_button.rect)
if back_button.is_pressed():
return
# boy.self_blit()
pygame.display.update()