线未绘制(似乎pygame.draw.polygon没有运行)

时间:2018-08-07 07:46:16

标签: python pygame

我制作了按钮框。但是Square没有画出来。

class button:
    def __init__(self,screen,size): # size -->(width,height)
        self.width = size[0]
        self.height = size[1]
        self.screen = screen
    def Buttongenerate(self,TEXT,POS):
        font = pygame.font.Font(None,self.height//3)
        text = font.render(TEXT,True,(250,250,250))
        textsize = font.size(TEXT)
        TEXTPOS = [self.width+(self.width-textsize[0])/2,\
           self.height+(self.height-textsize[1])/2]
        self.screen.blit(text,TEXTPOS)
        pygame.draw.polygon(self.screen, (250,250,250), [[POS[0],POS[1]],\ 
        [POS[0]+self.width,POS[1]],[POS[0]+self.width,POS[1]+self.height],\ 
        [POS[0],POS[1]+self.height]], 2)


while True:
    screen.fill((0,0,0))
    buttontest2 = button(screen,(200,100))
    buttontest2.Buttongenerate("TEST",(200,200))
    pygame.display.flip()
    for event in pygame.event.get():
        if event.type==pygame.QUIT:
            pygame.quit()
            exit(0)

当我运行这段代码时,但是pygame.draw.polygon似乎没有运行

enter image description here

1 个答案:

答案 0 :(得分:0)

pygame.draw.polygon可以正常工作。

您的问题是您计算的TEXTPOS错误(我只是想应该在矩形内显示文本)。您应该使用

TEXTPOS = [POS[0]+(self.width-textsize[0])/2, POS[1]+(self.height-textsize[1])/2]

实际上使用POS来计算文本的最终位置。

否则,文本将显示在矩形上方。这是完整的运行代码:

import pygame
pygame.init()
screen = pygame.display.set_mode((600,600))
class button:
    def __init__(self,screen,size): # size -->(width,height)
        self.width = size[0]
        self.height = size[1]
        self.screen = screen
    def Buttongenerate(self,TEXT,POS):
        font = pygame.font.Font(None,self.height//3)
        text = font.render(TEXT,True,(250,250,250))
        textsize = font.size(TEXT)
        TEXTPOS = [POS[0]+(self.width-textsize[0])/2, POS[1]+(self.height-textsize[1])/2]
        self.screen.blit(text,TEXTPOS)
        pygame.draw.polygon(self.screen, (250,250,250), [[POS[0],POS[1]],[POS[0]+self.width,POS[1]],[POS[0]+self.width,POS[1]+self.height],[POS[0],POS[1]+self.height]], 2)

while True:
    screen.fill((0,0,0))
    buttontest2 = button(screen,(200,100))
    buttontest2.Buttongenerate("TEST",(200,200))
    pygame.display.flip()
    for event in pygame.event.get():
        if event.type==pygame.QUIT:
            pygame.quit()

请注意,最好是一次为文本和矩形创建一个新表面,而不是在每次主循环迭代时加载字体,渲染文本并在屏幕表面上绘制。