pygame - 将鼠标捕捉到网格

时间:2016-08-31 14:15:51

标签: python python-2.7 pygame grid-layout

我正在使用pygame制作一个小平台游戏,并决定为每个级别制作关卡编辑器比键入每个块的坐标和大小更容易。

我正在使用一组水平线和垂直线来制作网格,使绘图点更容易。

这是我网格的代码:

def makeGrid(surface, width, height, spacing):
    for x in range(0, width, spacing):
        pygame.draw.line(surface, BLACK, (x,0), (x, height))
    for y in range(0, height, spacing):
        pygame.draw.line(surface, BLACK, (0,y), (width, y))

我希望用户的鼠标以10px的间隔移动,以便仅移动到交叉点。这是我试图强制鼠标捕捉到网格的内容。

def snapToGrid(mousePos):
    if 0 < mousePos[0] < DISPLAYWIDTH and 0 < mousePos[1] < 700:
        pygame.mouse.set_pos(roundCoords(mousePos[0],mousePos[1]))

(顺便说一句,roundCoords()返回舍入到最近的十个单位的坐标。)

(同样顺便说一句,snapToGrid()在主游戏循环中被调用(虽然没有完成))

...但this发生了,鼠标不想移动到其他地方。

有关如何解决此问题的任何建议?如果需要,我也可以更改网格代码。 非常感谢。

P.S。这是在64位Python 2.7上使用最新版本的PyGame

1 个答案:

答案 0 :(得分:2)

首先,我认为你并不遥远。

我认为问题在于代码在每个游戏循环中运行得非常快,因此在设置为函数返回位置之前,鼠标没有时间移动。

我要研究的是,而不是pygame.mouse.set_pos()只是将捕捉的坐标返回到一个变量,并使用它将标记blit到屏幕突出显示感兴趣的交叉点(这里我使用一个圆圈,但是你可以只是blit鼠标的图像;))。并使用pygame.mouse.set_visible(False)隐藏您的实际鼠标:

def snapToGrid(mousePos):
    if 0 < mousePos[0] < DISPLAYWIDTH and 0 < mousePos[1] < 700:
        return roundCoords(mousePos[0],mousePos[1])

snap_coord = snapToGrid(mousePos)# save snapped coordinates to variable

pygame.draw.circle(Surface, color, snap_coord, radius, 0)# define the remaining arguments, Surface, color, radius as you need

pygame.mouse.set_visible(False)# hide the actual mouse pointer

我希望这适合你!