如何获得鼠标点击

阿里沙·贾恩(Alisha Jain)

我正在使用Pygame编写小型游戏,但不确定如何获得鼠标点击。我已经弄清楚了一点,但是说实话,我没有最好的时光。

这是我所拥有的:

import pygame

pygame.init()

def menu():
    title_font = pygame.font.SysFont("monospace",64)
    button_font = pygame.font.SysFont("monospace", 30)
    screen_size = (1280,950)
    screen = pygame.display.set_mode(screen_size)

    background = (255,255,255)
    screen.fill(background)
    play_button = pygame.Rect(250,600,200,100)
    quit_button = pygame.Rect(850,600,200,100)
    controls_button = pygame.Rect(550,600,200,100)
    pygame.draw.rect(screen, (0,255,0), play_button)
    pygame.draw.rect(screen, (255,0,0), quit_button)
    pygame.draw.rect(screen, (255,229,0), controls_button)
    title = title_font.render("Fightastic!", 1, (0,0,0))
    screen.blit(title, (450,300))
    play_text = button_font.render("START",1,(0,0,0))
    screen.blit(play_text, (310,635))
    quit_text = button_font.render("QUIT",1,(0,0,0))
    screen.blit(quit_text, (910,635))
    controls_text = button_font.render("CONTROLS",1,(0,0,0))
    screen.blit(controls_text, (580,635))
    buttons = [play_button, quit_button, controls_button]

    while True:

        events = pygame.event.get()
        for event in events:
            if event.type == pygame.QUIT:
                exit()

        mouse_cursor = pygame.mouse.get_pos()
        mouse_pressed = pygame.mouse.get_pressed()

        option = 0
        for i in range(len(buttons)):
            if buttons[i].collidepoint( mouse_cursor):
                option = i+1

        if option == 1:
            print ("YO I GOT CLICKED")
        elif option == 2:
            print ("CLICKED MY DUDE")
        elif option == 3:
            quit()

    pygame.display.update()

menu()

游戏菜单是唯一需要单击的部分,所以这就是我已经展示的全部。

谢谢!

简单

您已经可以pygame.mouse.get_pressed()使用它来检查单击了哪个按钮。

    option = 0

    if mouse_pressed[0]: # check if left button was clicked
        for i, but in enumerate(buttons, 1): # get button and its number
            if but.collidepoint(mouse_cursor): # check collision
                option = i # remember button number
                break      # no need to check other buttons

但是使用pygame.mouse.get_pressed()会产生一个问题-True按住鼠标按钮时,它会一直返回(因此每秒似乎有多次点击),因此,如果您更改屏幕上的按钮,并且新按钮将位于同一位置,则它将自动单击新按钮按钮。更好地使用event.type == pygame.MOUSEBUTTONDOWN它只创建一键。

while True:

    option = 0

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            exit()
        if event.type == pygame.MOUSEBUTTONDOWN:
            for i, but in enumerate(buttons, 1):
                if but.collidepoint(event.pos):
                    option = i
                    break # no need to check other buttons

    if option == 1:
        print ("YO I GOT CLICKED")
    elif option == 2:
        print ("CLICKED MY DUDE")
    elif option == 3:
        quit()

    pygame.display.update()

顺便说一句:

您可以保留带有回调的按钮(函数名称不带()

    buttons = [
        (play_button, play_function),
        (controls_button, control_function),
        (quit_button, quit_function),
    ]

然后您可以直接调用函数/回调(使用()),而无需option

            if event.type == pygame.MOUSEBUTTONDOWN:
                for rect, callback in buttons:
                    if rect.collidepoint(event.pos):
                        callback() # execute function
                        break # no need to check other buttons

完整的工作代码

import pygame

# --- constants --- (UPPER_CASE_NAMES)

SCREEN_WIDTH = 1280
SCREEN_HEIGHT = 950

WHITE = (255, 255, 255)

# --- functions --- (lower_case_names)

def play_function():
    print("YO I GOT CLICKED")

def controls_function():
    print("CLICKED MY DUDE")

def quit_function():
    pygame.quit()
    quit()

def menu(screen):

    # - init -

    title_font = pygame.font.SysFont("monospace", 64)
    button_font = pygame.font.SysFont("monospace", 30)

    # - objects -

    play_button = pygame.Rect(250,600,200,100)
    quit_button = pygame.Rect(850,600,200,100)
    controls_button = pygame.Rect(550,600,200,100)

    buttons = [
        (play_button, play_function),
        (controls_button, controls_function),
        (quit_button, quit_function),
    ]

    # - draws -

    screen.fill(WHITE)

    title = title_font.render("Fightastic!", 1, (0,0,0))
    screen.blit(title, (450,300))


    pygame.draw.rect(screen, (0,255,0), play_button)
    play_text = button_font.render("START",1,(0,0,0))
    screen.blit(play_text, (310,635))

    pygame.draw.rect(screen, (255,0,0), quit_button)
    quit_text = button_font.render("QUIT",1,(0,0,0))
    screen.blit(quit_text, (910,635))

    pygame.draw.rect(screen, (255,229,0), controls_button)
    controls_text = button_font.render("CONTROLS",1,(0,0,0))
    screen.blit(controls_text, (580,635))

    pygame.display.update()

    # - mainloop -

    clock = pygame.time.Clock()

    while True:

        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                exit()
            if event.type == pygame.MOUSEBUTTONDOWN:
                for rect, callback in buttons:
                    if rect.collidepoint(event.pos):
                        callback() # execute function
                        break # no need to check other buttons

        clock.tick(5) # 5 FPS - to slow down game and use less CPU

# --- main ---

pygame.init()
screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))

menu(screen)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何等待鼠标点击?

来自分类Java

鼠标点击检测

来自分类Dev

鼠标点击滚动

来自分类Dev

鼠标点击角度

来自分类Dev

TChromium 鼠标点击

来自分类Dev

如何获得光标点击效果?

来自分类Dev

鼠标点击页面底部时如何触发事件

来自分类Dev

如何计算 Go 中的鼠标点击次数?

来自分类Dev

如何在鼠标点击ogameobject时禁用/启用LineRenderer?

来自分类Dev

如何在QTest中的QGraphicsWidget上生成鼠标点击?

来自分类Dev

循环时如何执行鼠标点击动作

来自分类Dev

GTK3+ - 如何根据鼠标点击更新图形?

来自分类Dev

如何在子类的主窗口上捕获鼠标点击

来自分类Dev

如何在鼠标点击的位置显示菜单?

来自分类Dev

pygame鼠标点击更新?

来自分类Dev

为什么在Java中我首先无法获得鼠标点击计数== 2?

来自分类Dev

除了鼠标点击之外,如何使用 Enter 键点击提交?

来自分类Dev

Linux:使用键盘模拟鼠标点击

来自分类Dev

鼠标点击未在* buntu上注册

来自分类Dev

延迟鼠标点击 0.5 秒

来自分类Linux

模拟Python上的鼠标点击

来自分类Dev

触发鼠标点击和随机间隔

来自分类Dev

AnchorPane 元素忽略鼠标点击

来自分类Dev

通过鼠标点击发射星星

来自分类Dev

pygame中的鼠标点击检测

来自分类Dev

鼠标点击调用功能

来自分类Dev

指标不接受鼠标点击

来自分类Dev

鼠标点击手柄

来自分类Dev

JS计算鼠标点击的距离