首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >游戏"move_ip“方法似乎不起作用

游戏"move_ip“方法似乎不起作用
EN

Stack Overflow用户
提问于 2022-01-01 16:28:45
回答 1查看 108关注 0票数 1

我正在使用吡游做一个简单的脚本,它只是移动一个矩形,但是方法move_ip似乎什么也不做(我遵循了在RealPython教程上找到的代码)。总之,我得到了一个类Player,如下所示:

代码语言:javascript
复制
class Player(pygame.sprite.Sprite):
    def __init__(self):
        super(Player, self).__init__()
        self.surf = pygame.Surface((75, 25))
        self.surf.fill((255, 255, 255))
        self.rect = self.surf.get_rect()

    def update(self, pressed_k):
        if pressed_k[K_UP]:
            self.rect.move_ip(0, -5)
        if pressed_k[K_DOWN]:
            self.rect.move_ip(0, 5)
        if pressed_k[K_LEFT]:
            self.rect.move_ip(-5, 0)
        if pressed_k[K_RIGHT]:
            self.rect.move_ip(5, 0)

然后,我得到了以前描述过的类的实例player,它用于循环中,如下所示:

代码语言:javascript
复制
while running:
    for event in pygame.event.get():
        if event.type == KEYDOWN:
            if event.key == K_ESCAPE:
                running = False
        elif event.type == QUIT:
            running = False

    pressed_keys = pygame.key.get_pressed() 
    player.update(pressed_keys)
    screen.fill((0, 0, 0))
    screen.blit(player.surf, (SCREEN_WIDTH/2, SCREEN_HEIGHT/2)) 
    pygame.display.flip()

当我运行代码时,它正确地创建窗口(显示一个白色矩形,表示播放器),程序似乎读取键盘输入,但是表示播放器的块没有任何移动。

(实例方法.update被正确调用,不同的'if'语句也可以正常工作,但是亲属self.rect.move_ip不会对播放器的位置进行任何更改)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-01-01 18:07:59

这位球员经常在(SCREEN_WIDTH/2, SCREEN_HEIGHT/2)抽签

screen.blit(player.surf,(屏幕宽度/2,屏幕高度/2))

您必须将播放机拖到存储在rect属性中的位置。pygame.Surface.blit)的第二个参数可以是矩形。在这种情况下,矩形的左上角将用作blit的位置:

代码语言:javascript
复制
screen.blit(player.surf, player.rect)

但是,如果您使用的是pygame.sprite.Sprite,那么您也应该使用pygame.sprite.Group.e.g:

代码语言:javascript
复制
player_group = pygame.sprite.Group(player)

while running:
    for event in pygame.event.get():
        if event.type == KEYDOWN:
            if event.key == K_ESCAPE:
                running = False
        elif event.type == QUIT:
            running = False

    pressed_keys = pygame.key.get_pressed() 
    player_group.update(pressed_keys)

    screen.fill((0, 0, 0))
    player_group.draw(screen)
    pygame.display.flip()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70550193

复制
相关文章

相似问题

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