Python Pygame:在国际象棋中捕捉网格/棋盘

Python Pygame:在国际象棋中捕捉网格/棋盘,python,drag-and-drop,pygame,Python,Drag And Drop,Pygame,在pygame中,有没有办法让精灵在拖动时捕捉到一个不可见(或可见)的网格?有点像拖放?如果是,怎么做?我一直在尝试做一些sprite重叠,但是为每条网格线做一个if语句太繁琐了。那么,我如何制作一个抓拍到网格的拖放精灵呢?这是一个国际象棋程序。我会感谢你的帮助。用for循环制作一组棋盘角 corners=[] 对于范围内的x(边缘光、边缘光、间隔): 对于范围内的y(边顶、边顶、间隔): 角点。附加((x,y)) 然后,制作一个事件侦听器。在拖动工件时,将此代码插入到您的语句中: px,py

在pygame中,有没有办法让精灵在拖动时捕捉到一个不可见(或可见)的网格?有点像拖放?如果是,怎么做?我一直在尝试做一些sprite重叠,但是为每条网格线做一个if语句太繁琐了。那么,我如何制作一个抓拍到网格的拖放精灵呢?这是一个国际象棋程序。我会感谢你的帮助。

用for循环制作一组棋盘角

corners=[]
对于范围内的x(边缘光、边缘光、间隔):
对于范围内的y(边顶、边顶、间隔):
角点。附加((x,y))
然后,制作一个事件侦听器。在拖动工件时,将此代码插入到您的
语句中:

px,py=Piece.Rect.topleft//使用元组分配多个变量
对于角落中的cx、cy:
如果数学hypot(cx px,cy py)

我不知道你的实际代码是什么,但这应该给你一个想法。同样,
pygame
没有网格捕捉功能。

使用for循环制作棋盘的一组角

corners=[]
对于范围内的x(边缘光、边缘光、间隔):
对于范围内的y(边顶、边顶、间隔):
角点。附加((x,y))
然后,制作一个事件侦听器。在拖动工件时,将此代码插入到您的
语句中:

px,py=Piece.Rect.topleft//使用元组分配多个变量
对于角落中的cx、cy:
如果数学hypot(cx px,cy py)

我不知道你的实际代码是什么,但这应该给你一个想法。同样,
pygame
没有网格捕捉功能。

因此,在python中使用round函数非常简单

sprite.rect.x = ((round(sprite.rect.x/gridSquareSize))*gridSquareSize)
sprite.rect.y = ((round(sprite.rect.y/gridSquareSize))*gridSquareSize)

通过将精灵的坐标四舍五入到最近的方格中,可以操作round函数。

因此,在python中使用round函数可以非常简单地完成此操作

sprite.rect.x = ((round(sprite.rect.x/gridSquareSize))*gridSquareSize)
sprite.rect.y = ((round(sprite.rect.y/gridSquareSize))*gridSquareSize)

通过将精灵的坐标四舍五入到最近的方格中,这可以操作“舍入”函数。

不要对每一行都使用if语句,请使用数学和循环。行的间距是相等的,它们都是一个空间的倍数。不要对每行都使用if语句,使用数学和循环。行间距均匀,它们都是一个空格的倍数。请澄清
edgeRight
edgeLeft
edgeTop
edgeBottom
。对不起。这些是棋盘区域的边缘(以像素为单位)。因此,
edgeTop
是第8列顶部开始的像素线(如30),而
edgeLeft
是a文件(40),依此类推。请澄清
edgeRight
edgeLeft
edgeTop
edgeBottom
。对不起。这些是棋盘区域的边缘(以像素为单位)。因此,
edgeTop
是第8列顶部开始的像素线(如30),而
edgeLeft
是a文件(40),依此类推。