Python Pygame动画中心问题

Python Pygame动画中心问题,python,pygame,Python,Pygame,我不知道为什么我的攻击动画低于我的敌人的其他动画。每次它攻击时,它的y似乎更低。我不知道为什么,尽管我把它们都放在同一个中心 player_rect = player_image.get_rect(center = self.get_rect().center) player_rect.centerx += 0 player_rect.centery += -6 window.blit(player_image, player_rect) 我的敌人阶级: class rat: def

我不知道为什么我的攻击动画低于我的敌人的其他动画。每次它攻击时,它的
y
似乎更低。我不知道为什么,尽管我把它们都放在同一个中心

player_rect = player_image.get_rect(center = self.get_rect().center)
player_rect.centerx += 0
player_rect.centery += -6
window.blit(player_image, player_rect)
我的敌人阶级:

class rat:
    def __init__(self,x,y,height,width,color):
        self.x = x
        self.y = y
        self.height = height
        self.width = width
        self.upshot = [pygame.image.load("rawlk (" + str(i) + ").png").convert_alpha() for i in range(1, 12)]
        self.idle = [pygame.image.load("idle (" + str(i) + ").png").convert_alpha() for i in range(1, 21)]
        self.id = [pygame.image.load("id (" + str(i) + ").png").convert_alpha() for i in range(1, 21)]
        self.move2 = [pygame.image.load("walk (" + str(i) + ").png").convert_alpha() for i in range(1, 12)]

        self.att = [pygame.image.load("att (" + str(i) + ").png").convert_alpha() for i in range(1, 8)]
        self.at = [pygame.image.load("at (" + str(i) + ").png").convert_alpha() for i in range(1, 8)]
        
        self.color = color
        self.rect = pygame.Rect(x,y,height,width)
        self.fps = 60
        self.clock = pygame.time.Clock()
        self.next_frame_time = 0
        self.anim_index = 0
        self.time = 0
        self.direction = "move"
        self.direction = "move2"

        self.direction = "idle"
        self.direction = "att"
        self.direction = "at"
        self.direction = "id"

        self.speed = 1
        self.image = pygame.image.load("ratso.png").convert_alpha()
        self.image2 = pygame.image.load("ratso2.png").convert_alpha() 
        self.font = pygame.font.Font("Gugi-Regular.ttf", 20)
        self.scoretext = self.font.render("Lv 1", True, (255,255,255))
        self.scorerect = self.scoretext.get_rect()
        self.scorerect.center = ((400,550))

        self.hitbox2 = (self.x - 47, self.y + 11, 169, 52) # NEW
        self.hitbox = (self.x + 17, self.y + 11, 129, 52) # NEW
        
    def get_rect(self):
        self.rect.topleft = (self.x,self.y)
        return self.rect
         



    def draw(self):
        self.rect.topleft = (self.x,self.y)
        if self.direction == "move":
            self.clock.tick(self.fps)
            image_list = self.upshot

        elif self.direction == "idle":
            self.clock.tick(self.fps)
            image_list = self.idle

        elif self.direction == "id":
            self.clock.tick(self.fps)
            image_list = self.id

        elif self.direction == "move2":
            self.clock.tick(self.fps)
            image_list = self.move2


        elif self.direction == "att":
            self.clock.tick(self.fps)
            image_list = self.att

        elif self.direction == "at":
            self.clock.tick(30)
            image_list = self.at
                        
        time_now = pygame.time.get_ticks()
        if (time_now > self.next_frame_time):
            # Time until the next game
            inter_time_delay = 2500 // self.fps
            self.next_frame_time = time_now + inter_time_delay
            # Showing next frame
            self.anim_index += 1
            if self.anim_index >= len(image_list):
                self.anim_index = 0
 
        if self.anim_index >= len(image_list):
            self.anim_index = 0
            
        player_image = image_list[self.anim_index]



        self.hitbox = (self.x, self.y + 30, 46,60)

        # --------------------------------------------------------------------- center all of them
        player_rect = player_image.get_rect(center = self.get_rect().center)
        player_rect.centerx += 0
        player_rect.centery += -6
        window.blit(player_image, player_rect)

     # --------------------------------------------------------------------- center all of them

        window.blit(self.scoretext,(self.x + 15,self.y - 50))
        self.hitbox2 = (self.x - 190, self.y - 22, 159, 40) # NEW
        self.hitbox = (self.x + 80, self.y - 22, 159, 40) # NEW

并非所有用于动画的帧都具有相同的高度。为了补偿这一点,并且由于老鼠在地板上,您需要定义矩形的底部(
midbottom
),而不是中心:

player\u rect=player\u image.get\u rect(center=self.get\u rect().center)

player\u rect=player\u image.get\u rect(中底=self.get\u rect().midbottom)
blit(player\u image,player\u rect)

请注意,如果动画帧的大小不同,或者如果老鼠在精灵上的位置发生变化,则老鼠在游戏中的位置也会在动画期间发生变化。

并非所有用于动画的帧都具有相同的高度。为了补偿这一点,并且由于老鼠在地板上,您需要定义矩形的底部(
midbottom
),而不是中心:

player\u rect=player\u image.get\u rect(center=self.get\u rect().center)

player\u rect=player\u image.get\u rect(中底=self.get\u rect().midbottom)
blit(player\u image,player\u rect)

请注意,如果动画帧大小不同,或者如果老鼠在精灵上的位置发生变化,则老鼠在游戏中的位置也会在动画过程中发生变化。

不确定为什么它不会导致我的其他移动动画更高now@HabibIsmail图像底部是否有透明边框?
self.get_rect()
的大小是否与图像的大小不同?你必须像你自己一样解决问题。我们看不到你的精灵。如果图像大小不同,或者老鼠在精灵上的位置不同,老鼠在游戏中的位置也会有所不同。好吧,我看到问题了,我的行走精灵是190乘66,我的攻击是190乘88。不知道为什么它不会导致我的其他移动动画更高now@HabibIsmail图像底部是否有透明边框?
self.get_rect()
的大小是否与图像的大小不同?你必须像你自己一样解决问题。我们看不到你的精灵。如果图像大小不同,或者老鼠在精灵上的位置不同,老鼠在游戏中的位置也会不同。好的,我看到问题了,我的行走精灵是190乘66,我的攻击是190乘88