Python 如何在Pygame中设置两个对象以使用碰撞检测?

Python 如何在Pygame中设置两个对象以使用碰撞检测?,python,object,pygame,sprite,collision,Python,Object,Pygame,Sprite,Collision,我正在做一个游戏,我的一个目标是一艘船,另一个是敌舰,我让我的敌舰跟随这艘船。我想让敌舰与敌舰相撞,然后使用碰撞探测器结束游戏 这是我的密码 from pygame import * size_x = 1200 size_y = 700 class Object: def disp(self, screen): screen.blit(self.sprite, self.rect) class Bad (Object): def __init__(self)

我正在做一个游戏,我的一个目标是一艘船,另一个是敌舰,我让我的敌舰跟随这艘船。我想让敌舰与敌舰相撞,然后使用碰撞探测器结束游戏

这是我的密码

from pygame import *

size_x = 1200
size_y = 700

class Object:
    def disp(self, screen):
        screen.blit(self.sprite, self.rect)

class Bad (Object):
    def __init__(self):
        self.sprite = image.load("bad guys.bmp")
        self.rect = self.sprite.get_rect()
        self.rect.centerx = size_x / 2
        self.rect.centery = size_y / 2

    def chase(self, mouse):
        if self.rect.centerx > S.rect.centerx:
            self.rect.centerx-=10
        if self.rect.centerx< S.rect.centerx:
            self.rect.centerx+= 10
        if self.rect.centery > S.rect.centery:
            self.rect.centery-= 10
        if self.rect.centery< S.rect.centery:
            self.rect.centery+= 10

class gameover (Object):
    def __init__(self):
        self.sprite= image.load("game over.bmp")
        self.rect= self.sprite.get_rect()
        self.rect.centerx=500
        self.rect.centery=500

class Ship(Object):
    def __init__(self):
        self.sprite = image.load("ship.bmp")
        self.rect = self.sprite.get_rect()
        self.rect.centerx = 100
        self.rect.centery = 100

    def cycle (self):
        self.rect.centerx, self.rect.centery=mouse.get_pos()

class shot(Object):
    def __init__(self):

        self.sprite = image.load("shot.bmp")
        self.rect = self.sprite.get_rect()
        self.rect.centerx=100
        self.rect.centery=100
    def cycle (self):
        self.rect.centerx = S.rect.centerx
        self.rect.centery = S.rect.centery-(S.sprite.get_width()/2)
        for e in event.get():
           if e.type==KEYDOWN:
               if e.key==K_SPACE:
                   self.rect.centery-=10   

init()
screen = display.set_mode((size_x, size_y))
B = Bad()
S = Ship()
g= gameover()
shot=shot()
clock = time.Clock()

while True:
    for e in event.get():
        if e.type == QUIT:
            quit()

    B.chase(S)
    S.cycle()
    shot.cycle()
    screen.fill((255,255,255))
    screen=display.set_mode((size_x,size_y))
    screen=display.set_mode((size_x,size_y))
    background=image.load("space.bmp")
    background=transform.scale(background,(size_x,size_y))
    screen.blit(background,(0,0))
    S.disp(screen)
    B.disp(screen)
    shot.disp(screen)

    display.flip()
    clock.tick(60)
从pygame导入*
尺寸x=1200
尺寸y=700
类对象:
def显示(自身,屏幕):
screen.blit(self.sprite、self.rect)
类别错误(对象):
定义初始化(自):
self.sprite=image.load(“bad-guys.bmp”)
self.rect=self.sprite.get_rect()
self.rect.centerx=大小x/2
self.rect.centery=大小_y/2
def chase(自我,鼠标):
如果self.rect.centerx>S.rect.centerx:
自校正中心X-=10
如果self.rect.centerxS.rect.centery:
自校正中心-=10
如果self.rect.centery
Pygame
rect
对象有很多碰撞检测方法。更多


因为在所有对象中都有
self.rect
,所以可以使用碰撞检测

B = Bad()
S = Ship()

pygame.sprite.collide_rect(B, S) # return True or False
使用sprite,您可以使用:、或检测碰撞

顺便说一下:

您的
对象
类和其他类与
精灵
非常相似,因此您可以使用更多精灵函数

Sprite
使用的某些属性/函数以及其他类属性/函数

  • 绘图(屏幕)显示(屏幕)
  • 更新()追逐(),循环()
  • self.rect self.rect
  • 自我形象自我精灵

最好在问题中的此处发布代码的相关部分。外部服务中的代码可能在某些时候不可用。
B = Bad()
S = Ship()

pygame.sprite.collide_rect(B, S) # return True or False