Why is my collision test always returning 'true' and why is the position of the rectangle of the image always wrong (0, 0)?
Почему мой тест на столкновение всегда возвращает 'true' и почему положение прямоугольника изображения всегда неправильное (0, 0)?
Моя функция collide_rect не работает должным образом. Она всегда возвращает True, когда это не предполагается. Я пробовал искать в Интернете, но у меня ничего не работает. Я думаю, что collide rect каким-то образом не использовал фактические координаты для двух спрайтов. Кто-нибудь может помочь с этим?
obstacle = Obstacle() ball = Ball() whilenot crashed: for event in pygame.event.get(): if event.type == pygame.QUIT: crashed = True gameDisplay.fill((255,255,255)) ball.update() obstacle.change_x() obstacle.update() ball.test_collisions(obstacle) if ball.col: print("colided") pygame.display.flip() clock.tick(1000)
pygame.quit() sys.exit()
P.S Это мой первый пост :)
Переведено автоматически
Ответ 1
pygame.Surface.get_rect.get_rect() возвращает прямоугольник с размером объекта Surface, но он возвращает прямоугольник, который всегда начинается с (0, 0), поскольку объект Surface не имеет позиции. Поверхность размещается в определенном месте на дисплее с помощью blit функции.
Вы должны установить местоположение прямоугольника либо с помощью аргумента ключевого слова, например:
Абсолютно нет необходимости добавлять некоторые дополнительные атрибуты self.x и self.y. Вместо этого используйте расположение прямоугольника. например:
Далее обратите внимание, что вы можете избавиться от методов Ball.update() соответственно Obstacle.update() (вы можете удалить их), если вы используете pygame.sprite.Group и вызов .draw(), который использует .image и .rect свойства содержащихся в нем спрайтов, для их рисования. например: