我正在玩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比较新,所以如果你看到任何其他问题,请指出它们。)
答案 0 :(得分:2)
在Box
函数中,您必须将位置分配给rect(您可以将其作为关键字参数传递,例如topleft=pos
或center=pos
),否则位置将是(0, 0)
:
return new_surf.get_rect(topleft=pos), new_surf
我只使用普通pygame.Rect
。