Pygame开发疑问:背景正常显示但Knight角色无法渲染
问题解决:导入战斗系统后Knight角色不显示
核心问题及修复步骤
1. 未调用角色绘制方法
原菜单代码的play()函数中,Battle_system.knight.draw仅引用了方法对象,并未执行绘制操作,导致角色不会被渲染到窗口上。
修复后的菜单play函数代码:
def play(): while True: PLAY_MOUSE_POS: object = pygame.mouse.get_pos() #draw background PLAY_TEXT = get_font(45).render("This is the PLAY screen.", True, "White") PLAY_RECT = PLAY_TEXT.get_rect(center=(640, 260)) SCREEN.blit(SURFACE, PLAY_RECT) Battle_system.draw_bg(SCREEN) Battle_system.draw_panel(SCREEN) #draw characters Battle_system.knight.draw(SCREEN) # 添加括号执行方法,并传入主窗口对象 for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() sys.exit() pygame.display.update()
2. 重复创建显示窗口导致绘制错位
战斗系统代码中重复执行pygame.display.set_mode((1280, 720)),会创建一个独立的隐藏窗口,所有战斗系统的绘制操作都指向这个窗口,而非菜单的主窗口,这也是背景能显示(实际是菜单调用的绘制函数意外复用了图像资源,但逻辑上存在窗口分离问题)、角色却不显示的深层原因。
修复后的Battle_system模块代码:
import pygame,sys,random # 移除重复的pygame.init()和窗口创建代码,复用菜单的主窗口 clock = pygame.time.Clock() fps = 60 #load images GBG = pygame.image.load(r'C:\Users\olive\Desktop\Programming project\rpg\setting\Background.png') PNL = pygame.image.load(r'C:\Users\olive\Desktop\Programming project\rpg\setting\panel.png') # 修改绘制函数,接收外部传入的窗口对象 def draw_bg(screen): screen.blit(GBG, (0, 0)) def draw_panel(screen): screen.blit(PNL, (0, 500)) # 修改Fighter类的draw方法,接收外部窗口对象 class Fighter(): def __init__(self, x, y, name, max_hp, strength, potions): self.name = name self.max_hp = max_hp self.hp = max_hp self.strength = strength self.start_potions = potions self.potions = potions self.alive = True img = pygame.image.load(f'rpg/{self.name}/idle/0.png') self.image = pygame.transform.scale(img, (img.get_width() * 3, img.get_height() * 3)) self.rect = self.image.get_rect() self.rect.center = (x, y) def draw(self, screen): screen.blit(self.image, self.rect) knight = Fighter(200, 260, 'Lothric', 30, 10, 3) slime1 = Fighter(550, 270, 'Slime', 20, 6, 1) slime2 = Fighter(700, 270, 'Slime', 20, 6, 1) slime_list = [] slime_list.append(slime1) slime_list.append(slime2)
修复说明
- 确保所有需要执行的绘制方法都加上括号,触发实际的渲染逻辑。
- 让战斗系统复用菜单的主显示窗口,避免创建独立窗口导致的绘制错位问题。
内容的提问来源于stack exchange,提问作者i need help
相关产品推荐
相关产品推荐

