Rectangle的python pygame碰撞

时间:2016-02-03 22:26:28

标签: python pygame collision

此时我使用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

是否可以只为主角设置一个矩形,并告诉程序只检查矩形的每一边?

1 个答案:

答案 0 :(得分:1)

不是使用矩形作为主角(涉及大量显式边界检查),而是使用sprite代替。精灵类包括碰撞检测,以及大量其他有用的功能。

最初似乎不值得重构,但随着游戏的增长,你会很高兴你做到了。