如何在pygam中检测两幅图像的碰撞

2024-06-01 05:37:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我想知道如何在pygame中进行碰撞检测。我的游戏不使用精灵,它只是播放两张图片。我怎样才能检查它们是否相撞?我知道有sprite.collide,但它不使用sprite。有没有办法通过比较每个图像的x和y值来检查碰撞

def fish(x,y):
    gameDisplay.blit(fishImg,(x,y))

def enemy(enemyX,enemyY):
    gameDisplay.blit(enemyImg,(enemyX,enemyY))

def main():

    x = displayWidth/2
    y = displayHeight/2

    enemyX = random.randint(0,displayWidth)
    enemyY = random.randint(0,displayHeight)

    xChange = 0
    yChange = 0

    while True:

        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                quit()

            if event.type == pygame.KEYDOWN:
                if event.key == pygame.K_a:
                    xChange = -5
                elif event.key == pygame.K_d:
                    xChange = 5
                elif event.key == pygame.K_w:
                    yChange = -5
                elif event.key == pygame.K_s:
                    yChange = 5

            if event.type == pygame.KEYUP:
                if event.key == pygame.K_a or event.key == pygame.K_d:
                    xChange = 0
                elif event.key == pygame.K_w or event.key == pygame.K_s:
                    yChange = 0

        x += xChange
        y += yChange

        gameDisplay.fill(red)
        fish(x,y)

        enemy(enemyX,enemyY)

        if  

        pygame.display.update()
        clock.tick(30)

main()
pygame.quit()
quit()

Tags: keyeventifdeftypepygamequitelif
1条回答
网友
1楼 · 发布于 2024-06-01 05:37:54

使用^{}^{}检查冲突

创建pygame.Rect对象,使用图像的大小和位置,在其中创建blit图像。
^{}在位置(0,0)创建一个pygame.Rect对象,但左上角的位置可以通过关键字参数topleft设置:

fishRect  = fishImg.get_rect(topleft = (x, y))
enemyRect = enemyImg.get_rect(topleft = (enemyX, enemyY))

if fishRect.colliderect(enemyRect):
    # [...] collision detected

相关问题 更多 >