首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从鼠标坐标中获取对象(或NumPy数组中的索引)?(游戏2D)

如何从鼠标坐标中获取对象(或NumPy数组中的索引)?(游戏2D)
EN

Stack Overflow用户
提问于 2021-01-03 16:30:59
回答 1查看 139关注 0票数 1

基本上,我有一个NumPy阵列的矩形存储他们的颜色和位置。我希望能够比较我的鼠标位置,点击矩形的位置,从数组中获取索引或对象本身。

我必须遍历数组中的每个正方形并比较项的坐标吗?

该结构看起来如下:

代码语言:javascript
复制
Cube[Face][Horizontal-Line][Square] = np.array([colour, pygame.Rect(x, y, size, size)])

最有效的方法是什么。我正在考虑使用colliderect()方法,但我不知道如何实现它。

https://i.stack.imgur.com/oQyxn.png

如果你需要更多的数据,我会提供。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-01-03 16:50:41

我建议创建一个矩形列表:

代码语言:javascript
复制
rect_list = [rect1, rect2, rect3 ...]

鼠标位置(在下面的mouse_pos中)是一个点,而不是矩形。使用collidepoint查找矩形与点的交集:

代码语言:javascript
复制
collide_rect_index = -1
for i, rect in enumerate(rect_list):
    if rect.collidepoint(mouse_pos):
        collide_rect_index = i
        break

或者,您可以使用collidelist()

测试矩形是否与长方形序列中的任意矩形发生碰撞。返回第一次碰撞的索引。如果没有发现冲突,则返回索引-1。

在鼠标位置创建一个1x1矩形,并在矩形列表中找到碰撞矩形的索引:

代码语言:javascript
复制
mouse_rect = pygame.Rect(*mouse_pos, 1, 1)
collide_rect_index = mouse_rect.collidelest(rect_list)

但是,如果有网格,则可以通过将鼠标位置(row )除以瓷砖大小(tile_size)来找到平铺索引(mouse_poscolumn)。行和列必须是整数。因此,您必须使用地板分割(//)操作符:

代码语言:javascript
复制
column = mouse_pos[0] // tile_size
row    = mouse_pos[1] // tile_size
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65552238

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档