首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >sprite sheet中不同大小的sprite

sprite sheet中不同大小的sprite
EN

Stack Overflow用户
提问于 2012-12-01 11:11:01
回答 1查看 788关注 0票数 0

我在Python和Pygame中加载了一个spritesheet,其中包含不同大小的sprites。我可以显示它们,但是角色并没有静止不动,即使它是空闲的动画,因为一些更大,因此迫使角色更右。

我的代码是:

代码语言:javascript
复制
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

即使精灵大小不同,我如何将角色居中?我的第一个想法是以某种方式创建一个参考点,然后手动定位,但这似乎有点慢,有没有更好的方法,或者如果这是一个好的方法,我该如何去实现它?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-04-03 00:30:11

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

代码语言:javascript
复制
sprite.rect.center = player.center_pos

如果您必须计算播放器的center_pos,请执行以下操作:

代码语言:javascript
复制
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 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13655980

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档