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多行文字来说明一个问题几乎是不需要的。谢谢。那是我的错误,我应该仔细看看。