python - 有没有办法在给定 Rect 对象列表的情况下检查 MOUSBUTTONDOWN 事件?
问题描述
我正在为我的最后一个班级项目制作一个游戏,由于某种原因,当它在列表中时,我无法检查矩形对象上的点击事件。如果我使用 for 循环遍历 Opened_Pack 列表并尝试单击它,那么什么也不会发生(这是我下面的代码)。当我使用索引([0]、[1] 等)尝试它时,无论我使用什么数字或列表有多大,都会出现索引超出范围错误。所以我想我的问题是:如果数据存储在列表中,有没有办法检查我是否点击了矩形?必须有,我敢肯定,但我无法弄清楚。
Opened_Pack = []
Pack_Card_Recs = []
for event in pygame.event.get():
mouse = pygame.mouse.get_pos()
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_ESCAPE:
window = pygame.display.set_mode((850,850), pygame.RESIZABLE)
#Key Bindings to open Packs, WILL BE REPLACED WITH CLICKS (eventually)
if event.key == pygame.K_r:
Opened_Pack = TwoPlayerPack.Open()
Pack_Card_Recs = [Opened_Pack[i].getRect() for i in range(len(Opened_Pack))]
#print(Pack_Card_Recs[0])
elif event.key == pygame.K_e:
Opened_Pack= SixPlayerPack.Open()
Pack_Card_Recs = [Opened_Pack[i].getRect() for i in range(len(Opened_Pack))]
elif event.key == pygame.K_t:
Opened_Pack = SevenPlayerPack.Open()
Pack_Card_Recs = [Opened_Pack[i].getRect() for i in range(len(Opened_Pack))]
elif event.key == pygame.K_u:
Opened_Pack= FourPlayerPack.Open()
Pack_Card_Recs = [Opened_Pack[i].getRect() for i in range(len(Opened_Pack))]
if event.type == pygame.MOUSEBUTTONDOWN:
x, y = event.pos
for i in range(len(Opened_Pack)):
if Pack_Card_Recs[i].collidepoint(x,y):
print("Clicked Player at index: " + str(i))
if event.type == pygame.QUIT:
run = False
解决方案
代码正在迭代 的长度Opened_Pack
,而有问题的矩形存储在列表中Pack_Card_Recs
。只需修改循环范围即可修复它。
if event.type == pygame.MOUSEBUTTONDOWN:
x, y = event.pos
print( "%d rectangles to check" % ( len( Pack_Card_Recs ) ) )
for i in range( len( Pack_Card_Recs ) ): # <-- HERE, not Opened_Pack
r = Pack_Card_Recs[i]
print( "Is point (%d, %d) inside Rect #%d [%d, %d, %d x %d]" % ( x, y, i, r.x, r.y, r.width, r.height ) )
if r.collidepoint( x,y ):
print( "Clicked Player at index: " + str( i ) )
编辑:添加了一堆调试代码
推荐阅读
- php - 以编程方式将可用性添加到 Woocommerce Bookings 上的可预订产品
- javascript - IIFE 外部的 addEventListener 阻止它工作
- react-native - 我无法在 MapView React Native 的一个地方修复视图
- java - Java 返回 null 和结果
- db2 - SchemaSpy DB2 连接失败
- multidimensional-array - 如何确定文本文件中几个矩阵的维度
- reactjs - 从子组件中获取所有选定的值
- android - 使用 Kotlin 识别 Android 软键盘中的击键
- javascript - 在循环内调用具有不同 api 参数值的相同 web api
- javascript - Xcode 10 更新后 React Native 无法正常工作