【问题标题】:why collision between two moving objects on pygame dont work?为什么pygame上两个移动物体之间的碰撞不起作用?
【发布时间】:2020-10-26 14:49:46
【问题描述】:

我正在用 pygame 做一个蛇游戏(游戏中有两条蛇),我想检测蛇头何时与另一条蛇体碰撞,对两者都这样做,以及当两个头碰撞时的特殊情况,我目前正在做蛇头和另一条蛇体之间的碰撞,如果其中一条蛇被冻结而另一条蛇正在移动,它工作正常,但如果两者都在移动,碰撞就不起作用 这是移动蛇的代码:

new_pos = None
        if direction == 'DOWN':
            new_pos = (snake[0][0], snake[0][1] + size)
        if direction == 'UP':
            new_pos = (snake[0][0], snake[0][1] - size)
        if direction == 'LEFT':
            new_pos = (snake[0][0] - size, snake[0][1])
        if direction == 'RIGHT':
            new_pos = (snake[0][0] + size, snake[0][1])
        if new_pos:
            snake = [new_pos] + snake
            del snake[-1]

请记住,移动另一条蛇的代码是相同的,但蛇变成了蛇 2,new_pos 变成了新的 pos2,等等

碰撞码:

if snake2[0] in snake[1:]:
            gameOverBlue()

if snake2[0] in snake[1:]:
            gameOverRed()

编辑:我想我应该把制作蛇的代码也写进去:

#snake
    size = 15
    s_pos = 60
    snake = [(s_pos + size * 2, s_pos),(s_pos + size, s_pos),(s_pos, s_pos)]
    s_skin = pygame.Surface((size, size))
    s_skin.fill((82,128,208))
#snake2
    size2 = 15
    s2_pos = 195
    snake2 = [(s2_pos + size2 * 2, s2_pos),(s2_pos + size2, s2_pos),(s2_pos, s2_pos)]
    s2_skin = pygame.Surface((size2, size2))
    s2_skin.fill((208,128,82))

【问题讨论】:

  • 第二次碰撞检查应该是snake2[1:]中的snake[0]:?
  • 另外你没有检查头部碰撞。
  • 哦,对了,让我看看它是否可以更改该编辑:也不起作用,我知道我没有检查头对头碰撞

标签: python pygame collision-detection collision


【解决方案1】:

需要判断snake的头部是否在snake2列表中,包括snake2的头部:

if snake[0] in snake2:
    gameOverBlue()

如果snake2的头在snake

if snake2[0] in snake:
    gameOverRed() 

如果你想检测蛇的头部是否碰撞,你必须分别比较snake[0]snake2[0]

if snake[0] == snake2[0]:
    print("heads are colliding")

if snake[0] in snake2[1:]:
    gameOverBlue()
if snake2[0] in snake[1:]:
    gameOverRed() 

【讨论】:

  • 它可以工作,但是如何添加头部与头部碰撞的情况?
  • @zac 我已经扩展了答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-03-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-11
  • 1970-01-01
相关资源
最近更新 更多