python - 为什么 pygame 上两个移动物体之间的碰撞不起作用?

标签 python pygame collision-detection collision

我正在用 pygame 做一个蛇游戏(游戏中有两条蛇),我想检测蛇头何时与另一条蛇 body 碰撞,对两者都执行此操作,并且当两个头碰撞时的特殊情况,我目前正在进行蛇头和另一条蛇 body 之间的碰撞,如果其中一条蛇被卡住而另一条蛇正在移动,则效果很好,但如果两条蛇都在移动,则碰撞就不起作用 这是移动蛇的代码:

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]

请记住,移动另一条蛇的代码是相同的,但snake变成snake2,new_pos变成new_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))

最佳答案

需要判断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() 

关于python - 为什么 pygame 上两个移动物体之间的碰撞不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64539458/

相关文章:

python - 我如何检查 Logo 是否在 BMP 文件中?

python - 将图像文件夹放在python exe中的什么位置?

java - 不同角色速度的 Pacman 碰撞检测?

java - 碰撞检测 - 任何语言

python - 如何将格式化数字转换为常规数字(不带逗号或小数)

python - 多环境coremltools安装

python - 使用Python提取医疗信息

Python - 如何在不互相干扰的情况下多次播放相同的声音?

python - Tkinter 干扰 OSX 上的 pygame(中止陷阱 6)

java - 有没有简单易懂且实用的 JBox2D 教程?