|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 xyyzzjw 于 2023-6-4 13:40 编辑
import pygame, random
RED=(205,0,0)
BLUE=(122,103,238)
WHITE=(255,255,255)
GREY=(200,200,200)
ROSE=(255,228,225)
GOLD=(255,215,0)
YELLOW=(238,180,34)
WHEAT=(245,222,179)
FIRE=(178,34,34)
PINK=(255,181,197)
GREEN=(0,205,0)
colors=[GREY,GOLD,GREEN,PINK,FIRE,WHEAT,RED,ROSE,BLUE,YELLOW]
color=colors[random.randint(0,len(colors)-1)]
WIN_WIDTH = 400
WIN_HEIGHT = 600
class Button:
def __init__(self,window,title,rect,color=WHITE,bg_color=color):
self.window=window
self.title=title
self.rect=rect
self.color=color
self.bg_color=bg_color
def draw(self):
pygame.draw.rect(self.window,self.bg_color,self.rect)
text2=font.render(self.title,True,(255,0,0))
text_x=self.rect[0]+self.rect[2]//2-text2.get_width()//2
text_y=self.rect[1]+self.rect[3]//2-text2.get_height()//2
self.window.blit(self.window,(text_x,text_y))
# 1.初始化操作
pygame.init()
# 2.创建游戏窗口
# set_mode(大小)
window = pygame.display.set_mode((WIN_WIDTH, WIN_HEIGHT))
pygame.display.set_caption("封装按钮")
# 设置背景颜色(否则为黑色)
window.fill(WHITE)
# ==============显示静态内容========================
font = pygame.font.SysFont("kaiti", 20)
button=Button(window,"取消",(100,200,70,40))
button.draw()
pygame.display.flip()
while True:
# ==============游戏帧刷新(显示动态)=================
# 检测事件
for event in pygame.event.get():
# 检测关闭按钮被点击的事件
if event.type == pygame.QUIT:
# 退出,要保存好数据哦
exit()
pygame.display.update()
你在定义Button类的 draw 方法时,尝试把按钮背景渲染到游戏窗口上,然后,你试图在上面渲染文字。这里出了问题,你不应该将 self.window 作为 blit 方法的第一个参数,应该是你创建的文本对象,像这样:
self.window.blit(text2,(text_x,text_y))
这就是你为什么看不到按钮上的文本的原因。你试图将窗口自身贴到窗口上,而不是你创建的文本对象。 blit 方法应该有一个图像对象作为第一个参数(在这个情况下,是 text2 对象),和一个坐标元组作为第二个参数。坐标元组决定了图像对象应该在窗口的哪个位置被渲染。
所以,你的Button类中的 draw 方法应该是这样的:
class Button:
def __init__(self,window,title,rect,color=WHITE,bg_color=color):
self.window=window
self.title=title
self.rect=rect
self.color=color
self.bg_color=bg_color
def draw(self):
pygame.draw.rect(self.window,self.bg_color,self.rect)
text2=font.render(self.title,True,(255,0,0))
text_x=self.rect[0]+self.rect[2]//2-text2.get_width()//2
text_y=self.rect[1]+self.rect[3]//2-text2.get_height()//2
self.window.blit(text2,(text_x,text_y))
记住,这个修改需要在你的主游戏循环开始之前就执行,这样,每次窗口更新时, draw 方法都会被正确地调用,按钮的文本就会被正确地显示。
|
|