这段代码在击中sprite之前开始打印“冲突”。
这定义了“子弹”。
class Magic(pygame.sprite.Sprite):
def __init__(self, x, y):
self.x = x
self.y = y
self.image = pygame.image.load("Magic.png")
self.rect = self.image.get_rect()
pygame.sprite.Sprite.__init__(self, spritegroup)
def is_collided_with(self, sprite):
return self.rect.colliderect(sprite.rect)这是碰撞检测代码
if magic.is_collided_with(enemy1):
print("collision")
enemy1.kill()这就定义了敌人
class Enemy(pygame.sprite.Sprite):
def __init__(self, x, y):
self.x = x
self.y = y
self.image = pygame.image.load("Enemy1.png")
self.rect = self.image.get_rect()
pygame.sprite.Sprite.__init__(self, spritegroup)
def render(self):
screen.blit(self.image, (self.x, self.y))enemy1是定义在enemy1 = Enemy(1400, 50)下面的敌人
发布于 2021-03-02 14:02:03
pygame.Surface.get_rect.get_rect()返回一个具有Surface对象大小的矩形,但它返回的矩形总是以(0,0)开头,因为Surface对象没有位置。
使用blit函数将该曲面放置在显示器上的一个位置。
您必须通过虚拟属性的赋值来设置矩形的位置(参见pygame.Rect),例如:
class Magic(pygame.sprite.Sprite):
# [...]
def is_collided_with(self, sprite):
sprite.rec.topleft = sprite.x, sprite.y
self.rect.topleft = self.x, self.y
return self.rect.colliderect(sprite.rect)但是,我建议删除x和y属性。使用rect.x和rect.y代替。通过关键字参数设置矩形的位置:
class Magic(pygame.sprite.Sprite):
def __init__(self, x, y):
self.image = pygame.image.load("Magic.png")
self.rect = self.image.get_rect(topleft = (x, y))
pygame.sprite.Sprite.__init__(self, spritegroup)
def is_collided_with(self, sprite):
return self.rect.colliderect(sprite.rect)class Enemy(pygame.sprite.Sprite):
def __init__(self, x, y):
self.image = pygame.image.load("Enemy1.png")
self.rect = self.image.get_rect(topleft = (x, y))
pygame.sprite.Sprite.__init__(self, spritegroup)
def render(self):
screen.blit(self.image, self.rect)https://stackoverflow.com/questions/66440844
复制相似问题