2017-02-18 16 views
0

Я пытаюсь найти точку, где линия сталкивается с кирпичом в арканоиде, который я делаю. Наиболее логичным способом, который я нашел, является получение маски из строки и использование collidemask, когда она возвращает точку. Ну, как я пытался с этим:Как получить поверхность от прямой/линии

linemask = pygame.mask.from_surface(pygame.draw.line(screen, (0,0,0), bola.line[0], bola.line[1], 2)) 

он дал мне эту ошибку:

TypeError: argument 1 must be pygame.Surface, not pygame.Rect

означает, что вход (в данном случае линия) не может быть Прямоугольник, но должна быть поверхность , Вы знаете, как получить поверхность от прямого или любого альтернативного решения?

ответ

0

pygame.draw.line рисует поверхность и возвращает пострадавшую область в виде объекта Rect.

Поверхность, на которую вы нарисовали, - screen. Так вот screen вы хотите создать маску. Кроме того, создайте новую поверхность, на которой вы используете pygame.draw, и создайте из нее маску. Или создайте маску из подповерхности экрана (так что вам не нужно создавать маску со всего экрана), например:

rect = pygame.draw.line(screen, (0,0,0), bola.line[0], bola.line[1], 2) 
surface = screen.subsurface(rect) 
mask = pygame.mask.from_surface(surface)