Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/apache-flex/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 精灵表中不同大小的精灵_Python_Pygame - Fatal编程技术网

Python 精灵表中不同大小的精灵

Python 精灵表中不同大小的精灵,python,pygame,Python,Pygame,我正在加载Python和Pygame中的精灵表,其中包含不同大小的精灵。我可以显示它们,但是角色不是静止的,即使它是空闲的动画,因为有些动画更大,因此迫使角色进一步向右移动 我的代码是: class Hero(pygame.sprite.Sprite): """Hero class""" def __init__(self, position): pygame.sprite.Sprite.__init__(self) self.load_frame

我正在加载Python和Pygame中的精灵表,其中包含不同大小的精灵。我可以显示它们,但是角色不是静止的,即使它是空闲的动画,因为有些动画更大,因此迫使角色进一步向右移动

我的代码是:

class Hero(pygame.sprite.Sprite):
    """Hero class"""
    def __init__(self, position):
        pygame.sprite.Sprite.__init__(self)
        self.load_frames()
        self.image = self.img_list[0]
        self.rect = self.image.get_rect()
        self.rect.topleft = position
        self.pause = 1
        self.delay = 1
        self.index = 0
    def load_frames(self):
        spritesheet = pygame.image.load("spritesheet.png").convert()
        self.img_list = []
        self.size_list = [(26,32),(27,31),(29,30), (31,30), (33,31), (34,31), (36,32), (38,33), (34,33), (34,33), (32,32), (27,31), (25,30), (24,30), (23,31), (21,31), (20,32), (20,33), (22,33), (24,33)]
        self.offset = ((14,6), (42,7), (72,8), (104,8), (138,7), (174,7), (211,6), (250,5), (291,5), (328,5), (365,5), (400,6), (430,8), (458,8), (485,7), (511,7), (535,5), (558,4), (581,4), (606,4))
        for i in range(20):
            tmp_img = pygame.Surface(self.size_list[i])
            tmp_img.blit(spritesheet, (0,0), (self.offset[i], self.size_list[i]))
            self.img_list.append(tmp_img)
    def update(self):
        if self.delay == self.pause:
            if self.index == len(self.img_list):
                self.index = 0
            oldcenter = self.rect.center
            self.image = self.img_list[self.index]
            self.rect = self.image.get_rect()
            self.rect.center = oldcenter
            self.delay = 0
            self.index += 1
        self.delay += 0.5

即使精灵大小不同,我如何将角色居中?我的第一个想法是手动定位一个参考点,但这似乎有点慢,是否有更好的方法,或者如果这是一个好方法,我将如何实现它?

定位精灵时,请执行以下操作:

sprite.rect.center = player.center_pos
如果必须计算播放器的中心位置,请执行以下操作:

player.center_pos[0] = player.pos[0] + player.sprite.get_size()[0] / 2
player.center_pos[1] = player.pos[1] + player.sprite.get_size()[1] / 2 

为什么您的精灵表中有不同大小的相同角色的图像?我不会试图在代码中纠正这一点,我只会编辑精灵表,使其具有相同大小的图像。您发布的代码看起来不错,始终使用相同的中心。它对你有用吗?不,当我的角色尾巴移动时,我的直肠会从小变大,这会把身体推向右边。我可以更改spritesheet,但我更愿意在代码中找到一种方法,以便让它们更快地工作。我想要的是矩形从原来的矩形变大,所以向外扩展,而不是从左上角。