如何检测pygame中两个图像的碰撞 [英] How to detect collision of two images in pygame

查看:245
本文介绍了如何检测pygame中两个图像的碰撞的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想知道如何在 pygame 中进行碰撞检测.我的游戏不使用精灵,它只是 blit 2 个图像.我如何检查它们是否发生碰撞?我知道有 sprite.collide,但它不使用精灵.有没有办法通过比较每个图像的 x 和 y 值来检查碰撞?

I was wondering how to do collision detection in pygame. My game doesn't use sprites, it just blits 2 images. How could I check if they are colliding? I know there is sprite.collide, but it doesn't use sprites. Is there some way to check collision by comparing the x and y values of each image?

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()

推荐答案

使用 pygame.Rectcolliderect() 检查碰撞.

Use pygame.Rect and colliderect() to check for collision.

创建pygame.Rect 对象,包含图像的大小和位置,您在其中blit 图像.
pygame.Surface.get_rect() 在位置 (0, 0) 创建一个 pygame.Rect 对象,但左上角的位置可以通过关键字参数 topleft 设置:

Create pygame.Rect objects, with the size of the image and the location, where you have blit the images.
pygame.Surface.get_rect() creates a pygame.Rect object at position (0, 0), but the top left position can be set by the keyword argument topleft:

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

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

这篇关于如何检测pygame中两个图像的碰撞的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆