2012-05-31 1 views
0

У меня есть один или два вопроса. Я использую Pygame для создания графической игры.pygame: идеальное столкновение пикселей с линиями?

У нас есть шары, отскакивающие внутри на поверхности, друг против друга и стены. С помощью мыши вы можете нарисовать прямые линии, которые шары отскакивают и отскакивают.

Мячи нарисованы с использованием pygame.image, так как у нас есть ball.png, покрывающий поверхность и прямоугольник шаров. Но для строк мы просто используем pygame.draw.line(), который возвращает простые прямоугольники.

И моя нынешняя большая проблема:

Я решил нарисовать каждую линию на своем объекте поверхности, а затем блитирования их на большую "игру холст. Это связано с тем, что я хотел использовать идеальное обнаружение столкновения пикселов, предоставленное here, а также surfarray.array_colorkey(), и для этого мне нужна базовая поверхность (у шаров есть изображение Surface, возвращаемое pygame.image). Я хочу Поверхность для строк, чтобы я мог использовать аспект прозрачности алгоритма столкновения, иначе шары отскакивают от Rects, обертывающих линии.

Q1) Нет ли лучшего способа рисования линий? Я хотел бы использовать что-то похожее на изображение или Sprite. Что-то подобное существует?

Q2) Если нет, то как я должен создать поверхность для каждой линии так, чтобы рисовать линию на меньшую поверхность, используя координаты из «игры холст» относительно легко, линия не отсекается и пиксель совершенное столкновение, описанное выше, работает?

Q3) Если im полностью выключен/есть waaaay лучшие способы совершения столкновений, обнаружения, рисования и т. Д. Пожалуйста, я все уши.

ответ

1

Персидский столкновение для линии по кругу является излишним.

Информация о 2d столкновения окружности и линии: 2D collision between a moving circle and a fixed line segment

И euclid имеет Circle.intersect(Line2) столкновение: http://partiallydisassembled.net/euclid/point2.html#SECTION002530000000000000000

numpy может иметь лучшее решение.