collidepoint不会检测到被点击的框

时间:2017-11-12 01:05:59

标签: python python-3.x pygame

我正在玩pygame游戏,到目前为止,我只是在你挑选角色的屏幕上。

我的问题是我有一个pygame.Rect的列表,(从技术上讲,它是我自己的派生自pygame.Rect的类,但我唯一的改变是用阴影或下划线表示的方法。)当在盒子上点击鼠标时,我希望它被加下划线,但我现在的主要观点是获得它,以便在点击它时它实际上可以响应。

一个可运行的例子:

import sys
from pygame.locals import *
import pygame as pg

WIN_X, WIN_Y = 800, 600

def Box(size, colour, pos, alpha=None, image=None):
    '''
    return a square rectangle, surface pair
    uses MyRect
    '''
    print(pos)
    new_surf = pg.surface.Surface(size)
    new_surf.fill(colour)
    new_surf.set_alpha(int(alpha))
    SURFACE.blit(new_surf, pos)
    if image is not None:
        SURFACE.blit(image, pos)
    return new_surf.get_rect(), new_surf


def main():
    global SURFACE

    pg.init()

    SURFACE = pg.display.set_mode((WIN_X, WIN_Y))
    test()


def test():
    surf=pg.display.set_mode((1000,1000))
    box_list = []
    for i in range(WIN_X // 4, WIN_X // 4 * 3, 100):
        box_list.append(
            Box((25, 25), (211,211,211), (i, WIN_Y // 2), 150)[0])
    while True:
        for event in pg.event.get():
            if event.type == MOUSEBUTTONDOWN:
                x,y = event.pos
                for rect in box_list:
                    if rect.collidepoint(x, y):
                        print('box clicked!')
            elif event.type==QUIT:
                pg.quit()
                sys.exit()
        pg.display.update()

if __name__ == '__main__':
    main()

我一直试图绕过这个小时,但没有任何效果。 (顺便说一下,我对pygame比较新,所以如果你看到任何其他问题,请指出它们。)

1 个答案:

答案 0 :(得分:2)

Box函数中,您必须将位置分配给rect(您可以将其作为关键字参数传递,例如topleft=poscenter=pos),否则位置将是(0, 0)

return new_surf.get_rect(topleft=pos), new_surf

我只使用普通pygame.Rect