python pygame碰撞Rectang侧

2024-10-01 00:32:16 发布

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

现在我用4个不同的矩形来做碰撞 就像照片上看到的一样

enter image description here

这是我使用的代码的一部分

    mainCharacterCoordinatesLeft = pygame.Rect((x,y+27),(1,5))
    mainCharacterCoordinatesRight = pygame.Rect((x+28,y+27),(1,5))
    mainCharacterCoordinatesTop = pygame.Rect((x+2,y+20),(26,5))
    mainCharacterCoordinatesBottom = pygame.Rect((x+2,y+27),(26,7))


    if (keys_pressed[pygame.K_LEFT] and not any(mainCharacterCoordinatesLeft.colliderect(treeCoordinates) for treeCoordinates in treeCoordinates) and not mainCharacterCoordinatesLeft.colliderect(crossCoordinates) and not mainCharacterCoordinatesLeft.colliderect(leftborder) and not mainCharacterCoordinatesLeft.colliderect(wellCoordinates) and not mainCharacterCoordinatesLeft.colliderect(trainCoordinates) and not mainCharacterCoordinatesLeft.colliderect(graveyardCoordinates)):
        mainCharacterImage=pygame.image.load(mainCharacterLeft[counter])
        counter = (counter + 1) % len(mainCharacterLeft)
        x -= 2
        CameraX -= 2

    if (keys_pressed[pygame.K_RIGHT] and not any(mainCharacterCoordinatesRight.colliderect(treeCoordinates) for treeCoordinates in treeCoordinates) and not mainCharacterCoordinatesRight.colliderect(crossCoordinates) and not mainCharacterCoordinatesRight.colliderect(rightborder) and not mainCharacterCoordinatesRight.colliderect(wellCoordinates) and not mainCharacterCoordinatesRight.colliderect(trainCoordinates) and not mainCharacterCoordinatesRight.colliderect(graveyardCoordinates)):
        mainCharacterImage=pygame.image.load(mainCharacterRight[counter])
        counter = (counter + 1) % len(mainCharacterRight)
        x += 2
        CameraX += 2

    if (keys_pressed[pygame.K_UP] and not any(mainCharacterCoordinatesTop.colliderect(treeCoordinates) for treeCoordinates in treeCoordinates) and not mainCharacterCoordinatesTop.colliderect(crossCoordinates) and not mainCharacterCoordinatesTop.colliderect(topborder) and not mainCharacterCoordinatesTop.colliderect(wellCoordinates) and not mainCharacterCoordinatesTop.colliderect(trainCoordinates) and not mainCharacterCoordinatesTop.colliderect(graveyardCoordinates)):
        mainCharacterImage=pygame.image.load(mainCharacterBack[counter])
        counter = (counter + 1) % len(mainCharacterBack)
        y -= 2
        CameraY -= 2

    if (keys_pressed[pygame.K_DOWN] and not any(mainCharacterCoordinatesBottom.colliderect(treeCoordinates) for treeCoordinates in treeCoordinates) and not mainCharacterCoordinatesBottom.colliderect(crossCoordinates) and not mainCharacterCoordinatesBottom.colliderect(bottomborder) and not mainCharacterCoordinatesBottom.colliderect(wellCoordinates)and not mainCharacterCoordinatesBottom.colliderect(trainCoordinates) and not mainCharacterCoordinatesBottom.colliderect(graveyardCoordinates)):
        mainCharacterImage=pygame.image.load(mainCharacterFront[counter])
        counter = (counter + 1) % len(mainCharacterFront)
        y += 2
        CameraY += 2

有没有可能只有一个矩形作为主要字符,并告诉程序只检查矩形的每一边??在


Tags: andrectifcounternotanykeyspygame
1条回答
网友
1楼 · 发布于 2024-10-01 00:32:16

与其使用矩形作为主要字符(这涉及大量显式边界检查),不如使用sprite。sprite类包括碰撞检测,以及其他许多有用的函数。在

一开始似乎不值得重构,但随着游戏的发展,你会很高兴你做到了。在

相关问题 更多 >