我正在试着让游戏中的玩家/精灵从按键"左"和"右"切换.然而,当我这样做的时候,精灵缩小了(保留了它的Hitbox),有人能帮忙吗?


class Player(pygame.sprite.Sprite):
    def __init__(self):
        super().__init__() 
        img_player = pygame.image.load("../graphics/left_player.png")
        self.image = pygame.transform.scale(img_player,(50, 50))
        self.surf = self.image
        self.rect = self.surf.get_rect()
   
        self.pos = vec((10, 360))
        self.vel = vec(0,0)
        self.acc = vec(0,0)
        self.jumping = False
        self.score = 10
 
    def move(self):
        self.acc = vec(0,0.5)
    
        pressed_keys = pygame.key.get_pressed()
                
        if pressed_keys[K_LEFT]:
            self.acc.x = -ACC
        if pressed_keys[K_RIGHT]:
            self.acc.x = ACC
                 
        self.acc.x += self.vel.x * FRIC
        self.vel += self.acc
        self.pos += self.vel + 0.5 * self.acc
         
        if self.pos.x > WIDTH:
            self.pos.x = 0
        if self.pos.x < 0:
            self.pos.x = WIDTH
             
        self.rect.midbottom = self.pos
 
    def jump(self): 
        hits = pygame.sprite.spritecollide(self, platforms, False)
        if hits and not self.jumping:
           self.jumping = True
           self.vel.y = -15 + game_upgrade_jump
           pygame.mixer.Sound.play(jump_sound)
 
    def cancel_jump(self):
        if self.jumping:
            if self.vel.y < -3:
                self.vel.y = -3
 
    def update(self):
        hits = pygame.sprite.spritecollide(self ,platforms, False)
        if self.vel.y > 0:        
            if hits:
                if self.pos.y < hits[0].rect.bottom:
                    if hits[0].point == True:   
                        hits[0].point = False   
                        self.score += (1 + game_upgrade_points)     
                        print('score changed: ', self.score)
                    self.pos.y = hits[0].rect.top +1
                    self.vel.y = 0
                    self.jumping = False

推荐答案

在类的构造函数中创建两个图像,一个用于左侧,一个用于右侧.图像可以用pygame.display.flip进行翻转.根据move方法中的移动方向 Select 正确的图像:

class Player(pygame.sprite.Sprite):
    def __init__(self):
        super().__init__() 
        img_player = pygame.image.load("../graphics/left_player.png")
        self.right_image = pygame.transform.scale(img_player, (50, 50))
        self.left_image = pygame.transform.flip(self.right_image, True, False) 
        slef.image = self.right_image
        self.rect = self.image.get_rect()
        
        self.pos = vec((10, 360))
        self.vel = vec(0,0)
        self.acc = vec(0,0)
        self.jumping = False
        self.score = 10
 
    def move(self):
        self.acc = vec(0,0.5)
    
        pressed_keys = pygame.key.get_pressed()
        if pressed_keys[K_LEFT]:
            self.acc.x = -ACC
            slef.image = self.left_image
        if pressed_keys[K_RIGHT]:
            self.acc.x = ACC
            slef.image = self.right_image

        # [...]

Python相关问答推荐

max_of_three使用First_select、second_select、

如何从具有不同len的列表字典中创建摘要表?

如何让Flask 中的请求标签发挥作用

切片包括面具的第一个实例在内的眼镜的最佳方法是什么?

当独立的网络调用不应该互相阻塞时,'

numpy卷积与有效

PyQt5,如何使每个对象的 colored颜色 不同?'

对象的`__call__`方法的setattr在Python中不起作用'

在ubuntu上安装dlib时出错

根据列值添加时区

如何更新pandas DataFrame上列标题的de值?

比Pandas 更好的 Select

如何将一组组合框重置回无 Select tkinter?

查看pandas字符列是否在字符串列中

Python类型提示:对于一个可以迭代的变量,我应该使用什么?

按条件添加小计列

如何获取包含`try`外部堆栈的`__traceback__`属性的异常

删除Dataframe中的第一个空白行并重新索引列

使用美汤对维基百科表格进行网络刮擦未返回任何内容

我如何为测试函数的参数化提供fixture 生成的数据?如果我可以的话,还有其他 Select 吗?