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_rectpygames 中的图像能够检查按下时鼠标位置是否在其上方?

编辑:我想我需要调用该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()获取所有三个鼠标按钮(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 回答