2017-03-08 52 views
0

我一直在pygame製作一款我自己設計的棋盤遊戲,其中棋子可以通過物理方式將其他棋子推向棋盤上的不同位置。現在我有一個更新函數,用於檢查距離它不到50個像素的其他作品(這些作品是50 x 50個正方形網格上的50 x 50個正方形),因此這意味着它們正在相交,並且該作品正在推動它)(正方形不會自動對齊網格,它們的位置就是它們拼寫的精確像素)。是否有一種優雅的方式來取得推動件的位置和推動件的位置以獲得推動件需要移動的像素數量?目前,我有四個if語句,其中去或多或少像這樣:Pygame Piece Interactions?

如果在適當的位置的差小於50並在x正方向: 件位置+ =差

如果該差在位置是小於50和在x負方向: 件位置 - =差異

等爲Y的正面和負面。是否有可能找到一種方法來+ =一個表達式在正面和負面都有效的位置(x或y)?這樣我就只能有兩條if語句,並減少代碼混亂。

+1

我不認爲你已經給出了足夠詳細的行爲描述。這些作品應該鎖定在網格上嗎?換句話說,每件作品的狀態都是正方形的? – Denziloe

+0

正方形不會自動對齊網格,它們的位置就是它們的精確像素 –

+0

然後網格中的點是什麼?聽起來不像它與遊戲交互。它基本上是一個背景圖像,不是嗎? – Denziloe

回答

0

您的數學邏輯是不夠的:您需要在一個軸上觸摸一個角(差異= 50),而另一個角重疊(差異< 50)。你需要像

x_diff = block.x - pusher.x 
y_diff = block.y - pusher.y 

現在,在50的差異是沿着推動的方向;另一個是沒有意義的。您可確定與整數除法的移動方向:

x_move = xdiff // 50 
y_move = ydiff // 50 

最後,正是你需要這些矢量元素之一,具有1的大小,而另一個則是0。如果他們都是0,塊重疊,你有一個移動錯誤。如果兩個都不是0,那麼塊沒有共同的邊緣段。

這是否讓您朝着解決方案邁進?