|
20鱼币
我想制作一个对话框系统但是在测试的时候对话框显示不出来,麻烦看一下bug在哪里,谢谢
对话框模块
- import pygame
- pygame.init()
- Acolour = (255, 255, 255)
- def changeC(colour, acolour = Acolour):
- acolour = colour
- def say(story, surface, width, height, colour = Acolour):
- Astory = list(story)
- Bstory = ""
- for i in Astory:
- Bstory = "".join([Bstory, i])
- pygame.draw.rect(surface, colour, (width/2, height/3, width, height/4), 10)
复制代码
测试文本- import pygame
- import sys
- import sayRace
- pygame.init()
- size = width, height = 600, 400
- bg = (255, 255, 255)
- screen = pygame.display.set_mode(size)
- while True:
- for event in pygame.event.get():
- if event.type == pygame.QUIT:
- sys.exit()
- if event.type == pygame.KEYDOWN:
- if event.key == pygame.K_a:
- sayRace.say("a", screen, width, height)
复制代码
本帖最后由 小杨yyds 于 2024-6-24 20:52 编辑
应该是say函数中的pygame.draw.rect调用位置不正确:
在say函数中,你调用pygame.draw.rect来绘制对话框,但是它应该在循环外部,因为你只需要绘制一次对话框,而不是每次循环都重绘。
say函数中的文本渲染缺失:
你还没有在say函数中添加代码来渲染文本到屏幕上。你需要使用pygame.font来创建一个字体对象,并渲染文本。
changeC函数的参数使用不正确:
你试图在changeC函数中修改默认参数Acolour,但是这是不正确的。默认参数在每次函数调用时只会被初始化一次,所以你应该直接使用传入的colour参数。
sayRace模块的导入方式:
你的测试文本中使用了sayRace.say,但是在模块中没有定义sayRace。确保模块的名称和导入语句是正确的。
事件循环中的KEYDOWN事件处理:
在KEYDOWN事件处理中,你调用了sayRace.say,但是没有调用任何函数来更新屏幕显示或进入游戏的主循环。
以下是修改后的代码示例:
- #对话框模块 (dialog.py)
- import pygame
- Acolour = (255, 255, 255)
- def changeC(colour):
- global Acolour
- Acolour = colour
- def say(story, surface, width, height, colour=Acolour):
- pygame.draw.rect(surface, colour, (width//2, height//3, width//2, height//4), 0)
- font = pygame.font.Font(None, 36)
- text = font.render(story, True, (0, 0, 0))
- text_rect = text.get_rect(center=((width//2) + (width//4)//2, (height//3) + (height//4)//2))
- surface.blit(text, text_rect)
复制代码- #测试文本模块 (main.py)
- import pygame
- import sys
- from dialog import say # 确保从正确的模块导入say函数
- pygame.init()
- size = width, height = 600, 400
- bg = (255, 255, 255)
- screen = pygame.display.set_mode(size)
- # 游戏主循环
- running = True
- while running:
- screen.fill(bg) # 用背景颜色填充屏幕
- for event in pygame.event.get():
- if event.type == pygame.QUIT:
- running = False
- if event.type == pygame.KEYDOWN:
- if event.key == pygame.K_a:
- say("a", screen, width, height)
- pygame.display.flip() # 更新屏幕显示
- pygame.quit()
复制代码
我在say函数中添加了文本渲染的代码,并在主循环中添加了screen.fill(bg)来清屏,并在每次循环结束时调用pygame.display.flip()来更新屏幕显示。一定要确保导入语句正确地从你的对话框模块导入say函数。
有帮助的话给个最佳答案呗
|
最佳答案
查看完整内容
应该是say函数中的pygame.draw.rect调用位置不正确:
在say函数中,你调用pygame.draw.rect来绘制对话框,但是它应该在循环外部,因为你只需要绘制一次对话框,而不是每次循环都重绘。
say函数中的文本渲染缺失:
你还没有在say函数中添加代码来渲染文本到屏幕上。你需要使用pygame.font来创建一个字体对象,并渲染文本。
changeC函数的参数使用不正确:
你试图在changeC函数中修改默认参数Acolour,但是这是不正确的。默 ...
|