Как я могу получить pygame.MOUSEBUTTONDOWN только go один раз за клик? - PullRequest
0 голосов
/ 11 апреля 2020

Я в тупике. Моя главная цель в настоящее время - сделать так, чтобы пользователь нажимал на кружок и число в верхнем левом углу экрана, чтобы go увеличивалось на единицу при каждом нажатии (попытка создать основную игру c clicker). , Я дошел до того, что когда вы нажимаете на кружок, число увеличивается на go! За исключением того, что число увеличивается более одного раза. Вот функция, в которой находится код:

def bubble():
orange = (255, 165, 0)
dark_orange = (255, 140, 0)
bubble_color = dark_orange
bubble_x = 300
bubble_y = 400
bubble_pos = (bubble_x, bubble_y)
bubble_rad = 100
mouse_x, mouse_y = pygame.mouse.get_pos()
distance = math.hypot(bubble_x - mouse_x, bubble_y - mouse_y)
if bubble_rad >= distance:
    bubble_color = orange
if bubble_rad >= distance and event.type == pygame.MOUSEBUTTONDOWN:
    global kill_counter
    kill_counter += 1
pygame.draw.circle(screen, bubble_color, bubble_pos, bubble_rad)

Я пытался изменить положение кнопки мыши на кнопку мыши вверх, но та же проблема возникала только после нажатия (она остановилась, когда я переместил мышь). Затем я попытался сделать это:

if bubble_rad >= distance and event.type == pygame.MOUSEBUTTONDOWN and event.type == pygame.MOUSEBUTTONUP

Это не сработало, что имеет смысл, потому что мышь не может одновременно подниматься и опускаться. Есть ли способ сделать так, чтобы kill_counter работал только тогда, когда мышь щелкают, а затем не щелкают? Вот весь мой код на случай, если проблема кроется.

import math

pygame.init()

# General
display_width = 600
display_height = 800
background = pygame.image.load("background.png")
screen = pygame.display.set_mode((display_width, display_height))
pygame.display.set_caption("SLASHR")
pygame.display.set_icon(pygame.image.load("knifeart.png"))

# Global variables
kill_counter = 0


# Functions
def counter():
    font = pygame.font.Font("freesansbold.ttf", 52)
    crimson = (220, 20, 60)
    screen.blit(font.render("Kill Count: " + str(kill_counter), True, crimson), (0, 10))


def bubble():
    orange = (255, 165, 0)
    dark_orange = (255, 140, 0)
    bubble_color = dark_orange
    bubble_x = 300
    bubble_y = 400
    bubble_pos = (bubble_x, bubble_y)
    bubble_rad = 100
    mouse_x, mouse_y = pygame.mouse.get_pos()
    distance = math.hypot(bubble_x - mouse_x, bubble_y - mouse_y)
    if bubble_rad >= distance:
        bubble_color = orange
    if bubble_rad >= distance and event.type == pygame.MOUSEBUTTONDOWN:
        global kill_counter
        kill_counter += 1
    pygame.draw.circle(screen, bubble_color, bubble_pos, bubble_rad)


# Game Loop
running = True
while running:
    screen.fill((255, 255, 255))
    screen.blit(background, (0, 0))
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
    counter()
    bubble()
    pygame.display.update()

Заранее спасибо за то, что прочитали и помогли мне!

1 Ответ

0 голосов
/ 11 апреля 2020

if event.type == MOUSEBUTTONDOWN должно быть в for event in pygame.event.get() l oop, я предполагаю, что после l oop событие все еще MOUSEBUTTONDOWN и не получает сброс,

try:

# Game Loop
running = True
click = False #have click variable
while running:
    screen.fill((255, 255, 255))
    screen.blit(background, (0, 0))
for event in pygame.event.get():
    if event.type == pygame.QUIT:
        running = False
    if event.type == pygame.MOUSEBUTTONDOWN:
        click = True

затем в функции пузыря:

def bubble():
    #other code
    if bubble_rad >= distance and click:
        global kill_counter
        kill_counter += 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...