1

だから現在私のコードは

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 行目、メインの print event.pos AttributeError: イベント メンバーが定義されていません

このコードと同じ結果を得るにはどうすればよいでしょうか。ただし、画面をクリックしてからもう一度クリックしても、エラーは発生しませんか?

4

1 に答える 1

3

例外を処理するだけです:

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たときに が表示されることがわかります。ActiveEventMouseMotion

<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

クリックして戻った時点でマウスが押されているため、例外をスローするイベントの処理を試みます。最も簡単な方法は、例外が発生したときにその例外をキャッチすることです。イベントの種類を確認して、印刷を試みるかどうかを決定することもできます。

于 2014-09-17T20:13:48.023 に答える