将一个图像闪电战到精灵游戏上



我有一个敌人的类和一个名为"fov.png";它只是一个圆锥体。我想把圆锥体的图像blit放在敌人身上,作为一个视野,如果你发生碰撞,你会被抓住(我稍后会实施),但我只能把图像blit放在屏幕上。

当我运行下面显示的代码时,圆锥体图像就不会出现。如果我把坐标从(self.rect.x, self.rect.y)改为(0, 0),它会显示在屏幕顶部,而不是后面的游戏,因此当我在地图上移动时,它会留在角落里。

class Enemy(pygame.sprite.Sprite):
def __init__(self, position, surface = pygame.Surface((tilesize, tilesize))):
super().__init__()
self.image = surface
self.rect = self.image.get_rect(topleft=position)
self.hitbox = self.rect.inflate(-10, -10)
self.movement = 3
def move(self, group, player):
global walk_count
global frame_count
global move_up
global move_down
enemy_rect = self.hitbox.copy()
display.blit(load(path("Images", "fov.png")), (self.rect.x, self.rect.y)) ## my attempt ##
if walk_count >= len(move_up) * 16:
walk_count = 0
else:
walk_count = 0
if self.movement == 3:
self.image = move_down[(walk_count // 16) % len(move_down)]
walk_count += 1
elif self.movement == -3:
self.image = move_up[(walk_count // 16) % len(move_up)]
walk_count += 1
self.hitbox.move_ip(0, self.movement)
self.rect.center = self.hitbox.center
for sprite in group:
if sprite.hitbox.colliderect(self.hitbox):
self.hitbox = enemy_rect
self.movement = -self.movement
if self.hitbox.colliderect(player.hitbox):
return True

您不更新self.rect.x和self.rect.y,因此其blit位置没有差异。

尝试:

self.rect.x, self.rect.y = self.hitbox.x,self.hitbox.y

而不是:

self.rect.center = self.hitbox.center

最新更新