如何在Pygame中检测对象击中另一个对象的位置

时间:2016-03-28 04:13:41

标签: python pygame

好吧,伙计们,所以我正在制作Pong游戏(遵循Sentdex的教程,我修改了很多)。如果它击中我的球拍底部,我希望球能够下降。我只是这个btw的新手

相关守则:

Pong Ball

class Pong(object):
        def __init__(self, screensize):
            #coolcolor = random.randint(0, 255),random.randint(0, 255),random.randint(0, 255)
            self.color = ((WHITE))  

            self.screensize = screensize
            self.centerx = int(screensize[0]*0.5)
            self.centery = int(screensize[1]*0.5)

            self.radius = 8

            self.rect = pygame.Rect(self.centerx-self.radius,
                                    self.centery-self.radius,
                                    self.radius*2, self.radius*2)

            direc = [1, -1]
            direc = random.choice(direc)
            ndirec = [1, -1]
            ndirec = random.choice(ndirec)
            self.direction = [direc,ndirec]


            self.speedx = 3
            self.speedy = 4
            #CODE TASK: change speed as game progresses to make it harder mwahaha
            self.hit_edge_left = False
            self.hit_edge_right = False

        def update(self, player_paddle, ai_paddle):

            self.centerx += self.direction[0]*self.speedx
            self.centery += self.direction[1]*self.speedy

            self.rect.center = (self.centerx, self.centery)
            coolcolor = random.randint(0, 255),random.randint(0, 255),random.randint(0, 255)
            #Make new random for each -1
            if self.rect.top <= 0:
                self.direction[1] = 1
            elif self.rect.bottom >= self.screensize[1]-1:
                self.direction[1] = -1

            if self.rect.right >= self.screensize[0]-1:
                self.hit_edge_right = True
            elif self.rect.left <= 0:
                self.hit_edge_left = True 

            if self.rect.colliderect(player_paddle.rect):
                self.direction[0] = random.randrange(-3, -1)
            if self.rect.colliderect(ai_paddle.rect): 

                self.direction[0] = random.randrange(2, 4)


        def render(self, screen):
            pygame.draw.circle(screen, self.color, self.rect.center, self.radius, 0)
            pygame.draw.circle(screen, (0,0,0), self.rect.center, self.radius, 1)

Player Paddle

class PlayerPaddle(object):
        def __init__(self, screensize):
            self.screensize = screensize

            self.centerx = screensize[0]-5
            self.centery = int(screensize[1]*0.5)

            self.height = 100
            self.width = 10

            self.rect = pygame.Rect(0, self.centery-int(self.height*0.5), self.width, self.height)

            self.color = ((WHITE))
            #CODE TASK: Adjust size of Player paddle as match progresses to make it more difficult

            self.speed = 5
            self.direction = 0

        def update(self):
            self.centery += self.direction*self.speed

            self.rect.center = (self.centerx, self.centery)
            if self.rect.top < 0:
                self.rect.top = 0
            if self.rect.bottom > self.screensize[1]-1:
                self.rect.bottom = self.screensize[1]-1

        def render(self, screen):
            pygame.draw.rect(screen, self.color, self.rect, 0)
            pygame.draw.rect(screen, (0,0,0), self.rect, 1)

1 个答案:

答案 0 :(得分:1)

您可以使用colliderect检查碰撞

所以对你来说代码就好了。

您可以将此方法添加到球

def did_collide(self,other):
    self.rect.colliderect(other.rect)

类似地,您还可以查看其他collide方法。