2015-06-21 132 views
1

pygame有沒有一種方式可以讓精靈在被拖拽時捕捉到一個看不見的(或可見的)網格?有點像拖放'下降?如果是這樣,怎麼樣?我一直在嘗試做一些精靈重疊,但是爲每個網格線做一個if語句太乏味了。那麼我怎麼才能製作一個單觸式網格拖放式精靈?這是一個國際象棋程序。我會感謝你的幫助。Pygame:Snap-to-grid /棋盤棋局

+0

不要爲每行生成if語句,使用數學運算和循環。線條均勻分佈,它們都是一個空格的整數倍。 – TessellatingHeckler

回答

1

使用for循環制作一個棋盤角的數組。

corners = [] 
for x in range(edgeRight, edgeLeft, interval): 
    for y in range(edgeTop, edgeBottom, interval): 
    corners.append((x,y)) 

然後,製作一個事件監聽器。當一塊被上拖動,插入此代碼到任何while聲明您有:

px, py = Piece.Rect.topleft //using tuples to assign multiple vars 
for cx, cy in corners: 
    if math.hypot(cx-px, cy-py) < distToSnap: 
    Piece.setPos((cx,cy)) 
    break 

我不知道你的實際代碼是什麼,但是這應該給你一個想法。 pygame又一次沒有snap-to-grid功能。

+0

請澄清'edgeRight','edgeLeft','edgeTop','edgeBottom'。 – Henry

+0

對不起。這些是像素棋盤區域的邊緣。所以'edgeTop'是像素線,其中第8個等級的頂部開始(像30),而'edgeLeft'是一個文件(40)等等。 – bcdan