прямое столкновение со списком ректов - PullRequest
1 голос
/ 03 апреля 2020

У меня есть код player_rect.colliderect(tile_rects):, где player_rect - это одиночный Rect, а tile_rects - это список Rect с.
Я получаю ошибку `builtins.TypeError:

Аргумент должен быть объектом стиля прямоугольника

, когда я пытаюсь запустить свой код (предположительно, так как коду не нравится иметь список ректов над одним прямоугольником).

Я также только что узнал, что когда я переключаю позиции tile_rects и player_rect, вместо этого я получаю ошибку

builtins.AttributeError: у объекта 'list' нет атрибута 'colliderect'

Мой вопрос: как я могу изменить свой код, чтобы я мог проверять наличие столкновений с прямоугольником и списком повторений?

Ответы [ 2 ]

1 голос
/ 03 апреля 2020

colliderect() проверить, сталкивается ли прямоугольник с одним прямоугольником. Если вы хотите оценить, сталкивается ли прямоугольник с каким-либо прямоугольником списка, вы должны использовать итерацию.

collide = False 
for t_rect in tile_rects:
    if player_rect.colliderect(t_rect):
        collide = True
        break
if collide:
    # [...]

Это можно упростить с помощью any:

if any(player_rect.colliderect(t_rect) for t_rect in tile_rects):
    # [...] 
0 голосов
/ 03 апреля 2020

вы можете использовать for l oop:

for t in tile_rects:
    player_rect.colliderect(t)

, если вы хотите проверить наличие столкновений, которые вы можете использовать:

has_colide = any(player_rect.colliderect(t) for t in tile_rects)
...