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