在我的pygame中,我繪製了一個帶for循環的幾個矩形。我有一個由一個圓圈物體代表的球員。它看起來像這樣:如何檢查任何矩形是否包含圓? (在pygame中)
所以玩家可以用方向鍵移動,這將移動它們每一個關鍵點。最終,玩家不應該移動到這些矩形之外。所以他們每次移動我想檢查: 如果(任何繪製的矩形包含一個球員):return True else return False。
有沒有簡單的方法來做到這一點?還是應該徹底改變我的方法?
這是這個例子的代碼,我現在所擁有的:
import pygame
pygame.init()
#grid
w = 25
h = 25
m = 2
size = (550, 700)
screen = pygame.display.set_mode(size)
screen.fill((255, 255, 255))
class Player:
def __init__(self):
self.x = 149
self.y = 14
self.r = 10
def draw(self):
pygame.draw.circle(screen, (255, 0, 0), (self.x, self.y), self.r)
def update(self,event):
if event.key == pygame.K_LEFT:
screen.fill((250, 250, 250))
self.x -= 27
self.draw()
elif event.key == pygame.K_RIGHT:
screen.fill((250, 250, 250))
self.x += 27
self.draw()
elif event.key == pygame.K_UP:
screen.fill((250, 250, 250))
self.y -= 27
self.draw()
elif event.key == pygame.K_DOWN:
screen.fill((250, 250, 250))
self.y += 27
self.draw()
player1 = Player()
player1.draw()
done = False
while not done:
for event in pygame.event.get():
if event.type == pygame.QUIT:
done = True
elif event.type == pygame.KEYDOWN:
player1.update(event)
for row in range(5):
for col in range(5):
if row == 0 or row == 4 or col == 0 or col == 4:
pygame.draw.rect(screen, (0,0,0), ((w + m) * col + m, ((h + m) * row + m), w, h), 1)
pygame.display.flip()
有一個Rect.contains(矩形)功能,但此檢查,如果一個矩形包含另一個矩形。是否有這樣的功能,基本上說:選擇所有現有的矩形,並檢查它們是否包含(選擇矩形)?
任何提示或幫助絕對讚賞。同時讓我知道這是否是完全錯誤的方法來做這件事。
問候。
'pygame.draw.circle'返回'python.Rect'對象,所以你可以把'circle'爲'rectangle'。此外,你可以使用'row','col'而不是'x','y'來檢查'collision'。 – furas
但是在你所有的代碼中都有一個小錯誤 - 你不能保留列表上所有矩形的位置,所以你不能檢查它們在圓位置的位置。 – furas
BTW:爲了使代碼更具可讀性,你可以在pygame.init()之前保留所有類和函數 - 參見[簡單模板](https://github.com/furas/python-examples/blob/master/pygame/ __templates __/1__simple__.py) – furas