当前位置: 首页 > 知识库问答 >
问题:

我如何让pyplay识别一个单一的鼠标点击作为一个单一的鼠标点击?[重复]

壤驷穆冉
2023-03-14

问题是,当我在pygame游戏中单击箭头时,pygame会将其识别为多次鼠标单击。

我所尝试的:

制作一个keydowliner类,如下所示:

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

但这不起作用,因为当我点击箭头时什么也没发生。

我的箭头类别:

    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())

我的事件循环:

    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()

共有1个答案

养枫涟
2023-03-14

您必须使用MOUSEDOWN事件而不是pygame.mouse.get_pressed()。当pygame.mouse.get_pressed()返回按钮的当前状态时,MOUSEBUTTONDOWNMOUSEBUTTONUP仅在按下按钮时发生。

 类似资料:
  • 我想知道如何编写代码来检测鼠标点击精灵。例如:

  • 本文向大家介绍JavaScript鼠标事件,点击鼠标右键,弹出div的简单实例,包括了JavaScript鼠标事件,点击鼠标右键,弹出div的简单实例的使用技巧和注意事项,需要的朋友参考一下 JavaScript鼠标事件,点击鼠标右键,弹出div的简单实例 以上这篇JavaScript鼠标事件,点击鼠标右键,弹出div的简单实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支

  • 问题内容: 我目前正在使我的Nintendo Wiimote(实际上是Kinda难过)可以像鼠标一样在计算机上工作。我设法使双节棍的摇杆控件实际上在屏幕上左右移动鼠标!真是令人兴奋。现在我被卡住了。 我想在按A时通过python左/右键单击事物,当我去做搜索时,想到的只是tkinter吗? 所以我的问题是,我该怎么称呼以使python在桌面上左/右单击,并且如果可能的话,也许提供一个代码段? 感谢

  • 但是,鼠标中键不是由Vaadin注册的。我怎么才能让这个起作用?

  • 本文向大家介绍python点击鼠标获取坐标(Graphics),包括了python点击鼠标获取坐标(Graphics)的使用技巧和注意事项,需要的朋友参考一下 使用Python进行图像编程,要使用到Graphics库。下面列举出较常用的代码 接下来使用Graphics库进行编写 出现下面问题:name '_name_'is not defined.出现原因是下划线应该是两个(__'name'__)

  • 我用JFrame创建了一个窗口,在我的JPanel上添加了3个组件:2个JTextFields(“field1”和“field2”),在它们之间添加了一个JButton(“开关”)。我的目标是在单击JButton时将field1的值切换到field2,反之亦然。我认为我在JButton中添加的这个ActionListener可以实现我的目标: 但是,它会将field2的值更改为field1的值,而