5

私は、pygame.rectでのマウスの「クリック」アクションがどのように応答をもたらすかを学ぶためのテスト関数を書いています。

ここのところ:

def test():
    pygame.init()
    screen = pygame.display.set_mode((770,430))
    pygame.mouse.set_visible(1)
    background = pygame.Surface(screen.get_size())
    background = background.convert()
    background.fill((250,250,250))
    screen.blit(background, (0,0))
    pygame.display.flip()

    ## set-up screen in these lines above ##

    button = pygame.image.load('Pictures/cards/stand.png').convert_alpha()
    screen.blit(button,(300,200))
    pygame.display.flip()

    ## does button need to be 'pygame.sprite.Sprite for this? ##
    ## I use 'get_rect() ##
    button = button.get_rect()

    ## loop to check for mouse action and its position ##
    while True:
        for event in pygame.event.get():
            if event.type == pygame.mouse.get_pressed():
                ## if mouse is pressed get position of cursor ##
                pos = pygame.mouse.get_pos()
                ## check if cursor is on button ##
                if button.collidepoint(pos):
                    ## exit ##
                    return

私は人々が画像のためにクラスを使用している、または使用するように勧められているグーグルのページに出くわしましpygame.sprite.Spriteた、そして私はこれが私の問題の原因であると思っています。pygamesのドキュメントを確認しましたが、メソッド間にはあまりまとまりがありません。明らかに単純なものが欠けていますがget_rect、pygamesの画像を押すと、マウスの位置がその上にあるかどうかを確認できるようになると 思いました。

pygame.sprite.Sprite編集:画像/四角形をインタラクティブにするためにメソッドを呼び出す必要があると思いますか?

4

2 に答える 2

16

まあ、誰かが興味を持っているか、同様の問題を抱えているなら、これは私が変更する必要があったものです。

まず、削除します。

button = button.get_rect()

それで:

screen.blit(button, (300, 200))

する必要があります:

b = screen.blit(button, (300, 200))

これRectは、ボタンが画面上に配置されている領域のを作成します。

に:

if event.type == pygame.mouse.get_pressed()

私はに変更しました:

if event.type == pygame.MOUSEBUTTONDOWN and event.button == 1:

pygame.mouse.get_pressed()、3つのマウスボタンすべて(MOUSEBUTTONDOWN、MOUSEBUTTONUP、またはMOUSEMOTION)の状態を取得します。event.button == 1また、これが「左マウス」ボタンが押されていることを指定するために追加する必要がありました。

ついに:

`if button.collidepoint(pos):` 

に:

`if b.collidepoint(pos):`

Rectbの衝突点法を使用する

于 2012-08-28T02:53:20.297 に答える
2

rectメソッドはcollidepointを呼び出し、collide * r *pointではないと思います。これがドキュメントへのリンクです!

于 2014-02-06T17:01:40.323 に答える