Pygame: Столкновения в гоночных играх

Я относительно новичок в Pygame и пытаюсь создать гоночную игру с видом сверху. На данный момент все сделано и готово к работе! Однако я не могу правильно определить столкновение между стенами и фоном «уровня».

Я хочу, чтобы машина не могла выехать за пределы трассы, ее выталкивало обратно на трассу, и скорость снижалась. Ранее это пытались сделать с помощью pygame.sprite.collide_rect, но безуспешно.

Вот скриншот первой трассы в игре и одной из машин в игре. Фон будет добавлен позже.

Снимок экрана отслеживания

Любые советы о том, какие функции использовать, будут высоко оценены! Можно ли даже использовать .collidepoint, как это делается в меню?

Спасибо, Адам.


person Adam Henning    schedule 17.01.2016    source источник
comment
любая функция rect отлично работает с прямоугольными объектами, и у вас есть закругленная дорожка. Я думаю: если вы новичок в PyGame, вам следует начать с чего-нибудь попроще — арканоида, тетрис, сокобан — чего-нибудь с прямоугольными объектами, без углов/тригонометрии.   -  person furas    schedule 17.01.2016
comment
Я бы использовал центр дуги и углы автомобиля для обнаружения столкновений. Например, где находится ваша машина, если какой-либо из углов имеет x > center.x и center.y + radius > corner.y > center.y - radius, а расстояние от центра больше, чем радиус стены, у вас есть столкновение. Но да, это может быть сложнее, чем вы хотите начать.   -  person cmd    schedule 19.01.2016


Ответы (1)


Что вы можете сделать, так это проверить, перекрываются ли два изображения, но с одним условием: изображение дорожки должно быть полностью непрозрачным, а все остальное прозрачным. Затем используйте этот код, чтобы проверить, не перекрываются ли они.

Car_mask = pygame.mask.from_surface(CarImage)
Track_mask = pygame.mask.from_surface(TrackImage)

offset_x, offset_y = (Car.x - Track.y), (Car.y - Track.y)
if (Track_mask.overlap(Car_mask, (offset_x,offset_y)) != None):
    print("overlaps")
else:
    #Push Car Back On Track, Slow Speed Stuff
    #Cause it not touching track at all.
person Monkeyonawall    schedule 25.01.2016