【问题标题】:Pygame: Racing Game CollsionsPygame:赛车游戏碰撞
【发布时间】:2016-01-17 18:30:11
【问题描述】:

我对 Pygame 比较陌生,正在尝试制作一款自上而下的赛车游戏。目前一切都已准备就绪,可以开始使用了!但是,我无法在“关卡”的墙壁和背景之间进行正确的碰撞检测。

我想要发生的是汽车无法离开赛道边界,它被推回赛道并降低速度。以前这是用 pygame.sprite.collide_rect 尝试的,但没有成功。

这是游戏中的第一条赛道和游戏中的一辆汽车的屏幕截图。稍后会添加背景。

Track Screenshot

任何关于使用哪些功能的建议将不胜感激!甚至可以像在菜单中那样使用 .collidepoint 吗?

谢谢, 亚当。

【问题讨论】:

  • 任何rect 函数都适用于矩形对象,并且您有圆形轨道。我认为:如果您是 PyGame 的新手,您应该从更简单的东西开始 - arcanoid、俄罗斯方块、推箱子 - 带有矩形对象的东西,没有角度/三角函数。
  • 我会使用圆弧的中心和车角进行碰撞检测。例如你的车在哪里,如果任何一个角落有x > center.xcenter.y + radius > corner.y > center.y - radius,并且到中心的距离大于墙壁的半径,你就会发生碰撞。但是,是的,这可能比你想开始的更复杂。

标签: python pygame racing


【解决方案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.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-25
    • 1970-01-01
    • 2018-05-26
    • 1970-01-01
    相关资源
    最近更新 更多