【问题标题】:Testing for image collision Pygame测试图像碰撞 Pygame
【发布时间】:2016-03-01 19:27:30
【问题描述】:

我正在制作一个基本的汽车游戏,并且希望汽车在赛道上移动得更快,在草地上移动得更慢。我有两个单独的图像来创建背景,一个是轨道,另一个是图像的其余部分。

我有一个可以在屏幕上移动的汽车精灵,但是在测试碰撞时我不知道该怎么做。我试过了:

track = track = SCREEN.blit(track, (0, 0))

if track.colliderect(car):
    speed += 1.5
else:
    speed += 0.5

但我被告知这仅适用于 rect 对象,我需要做什么?

我找不到任何与图像碰撞相关的信息,这对我的情况有帮助,所以如果有任何其他问题可以回答这个问题,请告诉我。

【问题讨论】:

  • 我认为曲目的其余部分是透明的?如果您的汽车比轨道薄得多,您可以通过检查该位置的轨道颜色来简单地检查汽车矩形的任何角落是否在轨道上。 (或者如果你只想在完全走上正轨的情况下加快速度,那么所有角落)
  • 是的,轨道的其余部分是透明的,我该如何检查拐角是否在上面?

标签: python python-3.x pygame


【解决方案1】:

基本上是这样的:

def isOnTrack(track,car):
    #one corner; a is alpha, the transparency
    #If a is 0 that means completely transparent
    if track.get_at(car.x,car.y).a==0:
        return false

    #do this for all four corners of car

    return true

您用于此碰撞的图像必须只包含轨道

track.get_at(x,y) 如果 track 是一个表面,则返回一个颜色值

颜色有4个字段,r g b a

我检查一个;透明度

【讨论】:

  • 所以我怎么说角的位置,(car.x, car.y) 对我不起作用。 AttributeError: 'pygame.Surface' object has no attribute 'x'
  • 哦,你的车也是精灵?好吧,如果你想移动汽车,你需要一个 x 和 y 来保存它的位置,对吧?使用这些作为第一个角,并通过添加汽车的宽度和高度来计算另一个。
  • 宽度和高度可通过调用 car.get_width 和 car.get_height 获得。 pygame.org/docs/ref/surface.html
  • 如果汽车有角度怎么办,这有可能吗? i.stack.imgur.com/mIKa8.png
  • 我假设你知道角度?我们可以做一些三角函数:gamedev.stackexchange.com/questions/86755/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-10
相关资源
最近更新 更多