Python Pygame:Text赢了';不要只出现在背景中

Python Pygame:Text赢了';不要只出现在背景中,python,python-2.7,pygame,Python,Python 2.7,Pygame,我刚刚在游戏中添加了一些代码作为记分牌,但我遇到了一个错误。只显示我的背景。不会出现文本或任何内容。以下是我正在使用的代码: class MenuScores(MenuClass): def __init__(self, surface, engine): MenuClass.__init__(self, surface) self.MoonSurvival = engine self.text = "Name" def nam

我刚刚在游戏中添加了一些代码作为记分牌,但我遇到了一个错误。只显示我的背景。不会出现文本或任何内容。以下是我正在使用的代码:

class MenuScores(MenuClass):
    def __init__(self, surface, engine):
        MenuClass.__init__(self, surface)

        self.MoonSurvival = engine
        self.text = "Name"

    def name():

        size = 36
        screen = pygame.display.set_mode((1280, 720))
        name = ""
        font = pygame.font.SysFont('data/fonts/score.ttf', size)
        background = pygame.image.load('data/images/bg.jpg')

        while True:
            #  readlines returns a list; having this in
            #  loop allows pygame to draw recently added
            #  string; no need to close and open a window
            namefile = open('score.txt', 'r')
            names = namefile.readlines()

            for event in pygame.event.get():
                if event.type == KEYDOWN:
                    if event.unicode.isalpha():
                        if len(name) < 4:
                            if event.unicode == 3:
                                name += 0
                            else:
                                name += event.unicode
                    elif event.key == K_BACKSPACE:
                        name = name[:-1]
                    elif event.key == K_RETURN:
                        f = open("data/scores/score.txt", "a")
                        f.write(str(name) + "     " + str(self.MoonSurvival.total_score) + "\n")
                        f.close()
                        name = ""
                        self.text = ""
                elif event.type == QUIT:
                    return

            #  create a Rectangle container, where yours
            #  text variable will be drawn
            #  Rect(left, top, width, height)
            textrect = Rect(0, 0, 100, size)
            screen.fill((0, 0, 0))
            for i in names:
                #  iterate through lines from text file (it is stored
                #  in names variable and it is a list)

                #  create text variable and draw it to textrect
                text = font.render(i[:-1], True, (255,0,0), (0,0,0))
                screen.blit(text, textrect)
                #  change y coordinate of textrect; in next iteration
                #  next line will appear below the previous line
                textrect.centery += size

            block = font.render(name, True, (255, 255, 255))
            rect = block.get_rect()
            rect.center = screen.get_rect().center
            screen.blit(background, (0, 0))
            screen.blit(block, rect)
            pygame.display.update()
            pygame.display.flip()

    def draw(self):

        self.renderText()
        self.drawHint()
        self.surface.blit(self.background, (0, 0))

        # update surface
        pygame.display.update()

    def _handleEvents(self, event):
        def pressed(key):
            keys = pygame.key.get_pressed()

            if keys[key]:
                return True
            else:
                return False

        if pressed(pygame.K_SPACE):
            self.MoonSurvival.game_state = STATE_MENU
            self.MoonSurvival.level = 1

    def renderText(self):
        # split texts at \n (newline)

        texts = self.text.split('\n')

        for i in range(len(texts)):
            textSurface = self.menufont.render(texts[i], 0, (255, 0, 0))

            textRect = textSurface.get_rect()
            textRect.centerx = SCREEN_WIDTH / 2
            textRect.centery = SCREEN_HEIGHT / 2 + i * self.menufont.size(texts[i])[1]

            self.surface.blit(textSurface, textRect)

    def drawHint(self):
        textSurface = self.menufont.render('(Press SPACE to return to menu)', 0, (255, 0, 0))
        textRect = textSurface.get_rect()
        textRect.centerx = SCREEN_WIDTH / 2
        textRect.centery = SCREEN_HEIGHT - 50
        self.surface.blit(textSurface, textRect)
类菜单存储(菜单类):
def初始(自身、表面、发动机):
菜单类。初始化(自,曲面)
self.moon=发动机
self.text=“Name”
定义名称():
尺寸=36
screen=pygame.display.set_模式((1280720))
name=“”
font=pygame.font.SysFont('data/font/score.ttf',size)
background=pygame.image.load('data/images/bg.jpg'))
尽管如此:
#readlines返回一个列表;把这个放进去
#循环允许pygame绘制最近添加的
#弦;无需关闭和打开窗口
namefile=open('score.txt','r')
names=namefile.readlines()
对于pygame.event.get()中的事件:
如果event.type==KEYDOWN:
如果event.unicode.isalpha():
如果len(名称)<4:
如果event.unicode==3:
名称+=0
其他:
name+=event.unicode
elif event.key==K_退格:
名称=名称[:-1]
elif event.key==K_返回:
f=打开(“数据/分数/分数.txt”,“a”)
f、 写(str(姓名)+“+str(self.MoonSurvival.total_score)+”“\n”)
f、 关闭()
name=“”
self.text=“”
elif event.type==退出:
返回
#创建一个矩形容器,其中
#将绘制文本变量
#矩形(左、上、宽、高)
textrect=Rect(0,0,100,大小)
屏幕填充((0,0,0))
以我的名义:
#迭代文本文件中的行(它被存储
#in names变量,它是一个列表)
#创建文本变量并将其绘制到textrect
text=font.render(i[:-1],True,(255,0,0),(0,0,0))
screen.blit(text,textrect)
#更改textrect的y坐标;在下一次迭代中
#下一行将显示在上一行的下方
textrect.centery+=大小
block=font.render(名称,True,(255,255,255))
rect=block.get_rect()
rect.center=screen.get_rect().center
屏幕光点(背景,(0,0))
屏幕blit(块、矩形)
pygame.display.update()
pygame.display.flip()
def牵引(自):
self.renderText()
self.drawHint()
self.surface.blit(self.background,(0,0))
#更新曲面
pygame.display.update()
def_手柄事件(自身、事件):
按下def(键):
keys=pygame.key.get_pressed()
如果键[键]:
返回真值
其他:
返回错误
如果按下(pygame.K_空格):
self.MoonSurvival.game\u state=状态菜单
self.moon.level=1
def renderText(自):
#拆分\n处的文本(换行符)
text=self.text.split('\n')
对于范围内的i(len(text)):
textSurface=self.menufont.render(文本[i],0,(255,0,0))
textRect=textSurface.get_rect()
textRect.centerx=屏幕宽度/2
text rect.centery=屏幕高度/2+i*self.menufont.size(文本[i])[1]
self.surface.blit(textSurface,textRect)
def drawHint(自我):
textSurface=self.menufont.render(‘(按空格键返回菜单)’,0,(255,0,0))
textRect=textSurface.get_rect()
textRect.centerx=屏幕宽度/2
textRect.centery=屏幕高度-50
self.surface.blit(textSurface,textRect)
我真的不知道怎么解决这个问题。文本本身(def name())时看起来很好,那么为什么它在这里不起作用呢

self.renderText()
self.drawHint()
self.surface.blit(self.background, (0, 0))
在这里,您将在
self.surface
上绘制文本,然后在
self.surface
上绘制提示,然后在
self.surface
上绘制背景图像

相反,你应该先画背景,然后再画所有的东西

self.surface.blit(self.background, (0, 0))
self.renderText()
self.drawHint()

请提供一个完整的最低限度的例子,你的问题。这是唯一需要的代码。问题就在这里。我的文本没有显示。只是背景我说这不是最低限度的。张贴100多行文字来说明一个问题几乎是不需要的。谢谢。那是我的错误,我应该仔细看看。