【问题标题】:How to have pygame check when mouse is held down按住鼠标时如何让pygame检查
【发布时间】:2014-09-17 20:08:33
【问题描述】:

所以目前我的代码是

import pygame

def main():
    pygame.init()

    size = width, height = 800,700
    backgroundColor = [0, 0, 255]


    screen = pygame.display.set_mode(size)

    screen.fill(backgroundColor)

    pygame.display.flip()

    while True:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                return
            if pygame.mouse.get_pressed()[0]:
                print event.pos

main()

我想要做的是,当用户按住鼠标时,光标的位置被记录下来。我有什么工作,除非你点击屏幕,然后点击屏幕,如果给出错误:

第 23 行,在主打印 event.pos AttributeError: event member not 定义

我怎样才能得到与这段代码相同的结果,但是当我点击屏幕外,然后再点击时,它不会给我一个错误?

【问题讨论】:

    标签: python python-2.7 pygame mouse mouse-position


    【解决方案1】:

    只处理异常:

    while True:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                return
            if pygame.mouse.get_pressed()[0]:
                try:
                    print event.pos
                except AttributeError:
                    pass
    

    如果您在每次迭代中打印出 event 本身,您会看到当您点击窗口时,除了正常的 MouseMotion 事件之外,您还会收到一个 ActiveEvent

    <Event(4-MouseMotion {'buttons': (0, 0, 0), 'pos': (703, 14), 'rel': (10, -12)})>
    <Event(4-MouseMotion {'buttons': (0, 0, 0), 'pos': (714, 1), 'rel': (11, -13)})>
    <Event(1-ActiveEvent {'state': 1, 'gain': 0})>  # clicked off
    <Event(1-ActiveEvent {'state': 1, 'gain': 1})>  # clicked on
    

    在您再次单击时,鼠标被按下,因此您尝试处理引发异常的事件。最简单的方法是在异常发生时捕获它。您也可以检查事件类型来决定是否也尝试打印。

    【讨论】:

    • 为什么要从事件中获取鼠标位置?我认为有一个 get_pos() 函数,因此您可以将该代码完全移出事件循环。或者,您可以检查鼠标移动事件。
    • 因为他们检查的是鼠标是否向下,而不是移动。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-07
    相关资源
    最近更新 更多