【问题标题】:Pygame circle collision?Pygame圈子碰撞?
【发布时间】:2015-02-22 21:16:41
【问题描述】:

我正在使用 pygame 制作一个简单的游戏。我遇到了圆圈碰撞的问题。我收到以下错误:

"AttributeError: 'pygame.Rect' 对象没有属性 'rect'"

这是我在下面遇到问题的特定代码:

if pygame.sprite.collide_circle(hero_circle, enemy_circle):
    gameover()

【问题讨论】:

  • 我也不知道“类”,但我认为我不需要它
  • 你正在处理一个对象。因此你应该熟悉类。无论如何,你能告诉我们你得到 pygame.Rect 错误的代码吗?
  • 类在碰撞检测中至关重要

标签: python python-2.7 pygame collision-detection


【解决方案1】:

我发现检查圆碰撞检测的最佳方法是计算两个圆的中心点之间的距离。如果距离小于两个圆的半径之和,那么你已经相撞了。

【讨论】:

    【解决方案2】:

    使用 pygame.mask 为您的对象创建碰撞网格并使用该网格进行碰撞检测。

    更详细的:

    1. 为您的两个圈子创建一个图像文件,并将背景颜色设置为您不会在其他任何地方使用的颜色。
    2. 在图像编辑器中将该颜色设置为“透明”。
    3. 导入图片。
    4. 使用 pygame.mask 为它们创建一个网格并将其设置为使透明像素不可碰撞。
    5. 将生成的遮罩用作碰撞检测网格。
    6. 利润

    (从技术上讲,这只是对矩形上的圆形区域进行碰撞检测,但谁在乎呢!)

    【讨论】:

      【解决方案3】:

      就像 gmk 所说的,但如果你使用 circles 而不是矩形,你应该使用这个 pygame 函数:

      pygame.draw.circle(surface, color, center_point, radius, width)
      

      这会在您的表面上绘制一个圆圈(将进入surface 区域)。显然,颜色需要一个数字列表(RGB 有人吗?)。您的center_point 决定了您圈子的位置,因为它将是您圈子中心的位置。半径需要一个数字来设置圆的半径(使用像 25 这样的数字会将半径设置为 25 像素/直径为 50 像素)。 width 部分是可选的,因为它设置了你的圆的周长的厚度(有 0 将根本没有)。如果你不使用圈子,你应该改变你的标题......但无论如何,我希望这对你有帮助!

      【讨论】:

        【解决方案4】:
        pygame.draw.rect()
        draw a rectangle shape
        rect(Surface, color, Rect, width=0) -> Rect
        

        在 Surface 上绘制一个矩形。给定的 Rect 是矩形的面积。 width 参数是绘制外边缘的厚度。如果宽度为零,则矩形将被填充。

        请记住,Surface.fill() 方法同样适用于绘制填充矩形。事实上,Surface.fill() 可以在一些具有软件和硬件显示模式的平台上进行硬件加速。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-03-05
          • 1970-01-01
          • 2020-05-21
          相关资源
          最近更新 更多