Python Pygame矩形碰撞

时间:2018-04-07 12:11:31

标签: python pygame

我正在制作一个地下城游戏。我开始实施碰撞了。这是一个简单的矩形碰撞检测。但我不知道该怎么做。 我想将obstacle个对象与播放器

相撞

我有所有对象的X和Y位置,以及对象的X边框和Y边框位置。

import pygame
from pygame.locals import *
screen = pygame.display.set_mode((500, 500))
ball = pygame.image.load("ball.png") #43x43 png
white = (255, 255, 255)
black = (0, 0, 0)
px = 0
py = 0
ticker = 0
class obstacle(object):
    def __init__(self, x, y, xbord, ybord):
        self.x = x
        self.y = y
        self.xbord = xbord
        self.ybord = ybord
        self.surf = pygame.Surface((self.xbord, self.ybord))
        self.surf.fill(black)
o = []
o.append(obstacle(50, 50, 70, 58))
while True:
    keys = pygame.key.get_pressed()
    screen.fill(white)
    for obstacle in o:
        screen.blit(obstacle.surf, (obstacle.x, obstacle.y))
        pass
        #code to check which way the player is touching an obstacle and deny walking into the obstacle
    if ticker == 0:
        if keys[K_UP]:
            py -= 1
        if keys[K_DOWN]:
            py += 1
        if keys[K_RIGHT]:
            px += 1
        if keys[K_LEFT]:
            px -= 1
        ticker = 15
    if ticker > 0:
        ticker -= 1
    screen.blit(ball, (px, py))
    pygame.event.get()
    pygame.display.flip()

1 个答案:

答案 0 :(得分:0)

您可以使用pygame.Rect.colliderect()。我将它应用于障碍类。

class obstacle(object):  # Your class code
    def __init__(self, x, y, xbord, ybord):
        self.x = x
        self.y = y
        self.xbord = xbord
        self.ybord = ybord
        self.surf = pygame.Surface((self.xbord, self.ybord))
        self.surf.fill(black)

    def collide_ball(self):
        if self.surf.get_rect().colliderect(ball.get_rect()):
            return True
.... # Other code

while True:
    for obstacle in o:
        if obstacle.collide_ball():
              pass # Your statements (What you want to do when the obstacle collide with the surface of the ball