如何检测pygame中两个图像的碰撞 [英] How to detect collision of two images in 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.Rect
和 colliderect()
检查碰撞.
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屋!