碰撞错误 self.rect.colliderect(sprite.rect)
collision error self.rect.colliderect(sprite.rect)
此代码在撞击精灵之前开始打印“碰撞”。
这定义了“子弹”
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)
pygame.Surface.get_rect.get_rect()
returns 具有 Surface 对象大小的矩形,但它 returns 始终从 (0 , 0) 因为 Surface 对象没有位置。
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)
此代码在撞击精灵之前开始打印“碰撞”。
这定义了“子弹”
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)
pygame.Surface.get_rect.get_rect()
returns 具有 Surface 对象大小的矩形,但它 returns 始终从 (0 , 0) 因为 Surface 对象没有位置。
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)