首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Pygame draw.rect不使用rect参数

Pygame draw.rect不使用rect参数
EN

Stack Overflow用户
提问于 2020-09-10 06:44:00
回答 1查看 96关注 0票数 2

试图复制太空入侵者。我正在跟踪这里的导游,https://kidscancode.org/blog/2016/08/pygame_shmup_part_5/。这是玩家精灵

代码语言:javascript
复制
class Player(pygame.sprite.Sprite):

    def __init__(self):

        super(Player, self).__init__()

        self.image = pygame.image.load('./Assets/PNG/playerShip1_orange.png').convert()
        self.image.set_colorkey(BLACK)
        self.image = pygame.transform.scale(self.image, (50, 40))

        # WIN_SIZE = 500, 500

        self.rect = self.image.get_rect()
        self.rect.centerx = WIN_SIZE[0] / 2
        self.rect.bottom = WIN_SIZE[1] - 10
        self.speedx = 0

        #   NOT WORKING FOR SOME REASON
        #   self.image.fill(WHITE, self.rect)
        #   pygame.draw.rect(self.image, WHITE, self.rect, 1)
        #   pygame.draw.circle(self.image, WHITE, self.rect.center, 25, 1)
        
        pygame.draw.rect(self.image, WHITE, ( (0,0), (50, 40) ), 1)

我想要在sprite周围创建一个矩形轮廓,如果我使用上面代码中的最后一行,我就可以这样做。但是,即使每个参数都是正确的,并且没有引发编译/运行时错误,注释代码也不起作用。

来自主类的关系事件片段

代码语言:javascript
复制
class Game:

    def __init__(self):

        pygame.init()

        self._win = pygame.display.set_mode(WIN_SIZE, 0, 32)
        self._clock = pygame.time.Clock()
        
        self._all_sprites = pygame.sprite.Group()
        
        self._player = Player()
        self._all_sprites.add(self._player)
        
        self._game_over = False

    def run(self):

        while not self._game_over:
            
            self._clock.tick(FPS)

            self._all_sprites.update()
            self._all_sprites.draw(self._win)

            pygame.display.flip()

def main():
    game = Game()
    game.run()

if __name__ == "__main__":
    main()

完整资料来源:

如能提供任何帮助,将不胜感激:)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-09-10 06:55:21

在设置矩形的位置之前,必须在图像上绘制轮廓:

代码语言:javascript
复制
self.rect = self.image.get_rect()

pygame.draw.rect(self.image, WHITE, self.rect, 1)
pygame.draw.circle(self.image, WHITE, self.rect.center, 25, 1)

self.rect.centerx = WIN_SIZE[0] // 2
self.rect.bottom = WIN_SIZE[1] - 10
self.speedx = 0

get_rect()返回的矩形的位置为(0,0)。这也是图像中轮廓的左上角位置。注意,您在图像上绘制轮廓,而不是在显示上。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63824122

复制
相关文章

相似问题

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