В моем pygame я нарисовал пару прямоугольников с циклом for. У меня есть игрок, который представлен объектом круга. Это выглядит следующим образом:Как проверить, содержит ли круг какой-либо прямоугольник? (in 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 (Rect) функция, но это проверяет, если один прямоугольник содержит другой прямоугольник. Возможно, есть такая функция, которая в основном говорит: выберите все существующие прямоугольники и проверьте, содержат ли они (выбранный rect)?
Любые советы или помощь абсолютно оценены. Также дайте мне знать, если это совершенно неправильный подход к выполнению всего этого.
Приветствия.
'' pygame.draw.circle' возвращает объект python.Rect' таким образом Вы можете обрабатывать 'circle' как' rectangle'. Кроме того, вы можете использовать 'row',' col' вместо 'x',' y' для проверки «столкновения». – furas
НО есть одна небольшая ошибка во всем вашем коде - вы не сохраняете позиции всех прямоугольников в списке, чтобы вы не могли проверить их положение с положением круга. – furas
BTW: чтобы сделать код более читаемым, вы можете сохранить все классы и функции до 'pygame.init()' - см. [Простой шаблон] (https://github.com/furas/python-examples/blob/master/pygame/ __templates __/1__simple__.py) – furas