Pygame在某些情况下不会打印文本

时间:2014-12-27 16:41:31

标签: python pygame

所以当用户从可播放的屏幕上移开一个框时,我试图将“你输了”打印到屏幕上,但是这似乎不起作用,除非我从我的主循环外部调用它。我已经定义了一个函数来处理文本的创建,渲染和它的'blit',虽然从while循环中调用它时没有效果但是当它从底部调用它时它会起作用。我已经检查过并且从两个位置执行了该功能,但它似乎只能从一个位置工作。

import pygame
import time
pygame.init()

red = (255,0,0)
black = (0,0,0)
white = (255,255,255)
gamewidth = 900
gameheight = 900
snakecolour = black
gameDisplay = pygame.display.set_mode((gamewidth,gameheight))
pygame.display.set_caption("Snake")

gameExit = False
boxDimensions = 10
lead_x = (gamewidth // 2) - ((gamewidth // 2) % 20)
lead_y = (gameheight // 2) - ((gameheight // 2) % 20)
lead_x_change = 0
lead_y_change = 0
clock = pygame.time.Clock()

font = pygame.font.SysFont(None, 25)
def message_to_screen(msg, color):
    screen_text = font.render(msg, True, color)
    gameDisplay.blit(screen_text, [gamewidth//2, gameheight//2])


while not gameExit:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            gameExit = True

        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_LEFT:
                if not (lead_x_change == boxDimensions):
                    lead_x_change = -boxDimensions
                    lead_y_change = 0
            elif event.key == pygame.K_RIGHT:
                if not (lead_x_change == -boxDimensions):
                    lead_x_change = boxDimensions
                    lead_y_change = 0
            elif event.key == pygame.K_UP:
                if not (lead_y_change == boxDimensions):
                    lead_y_change = -boxDimensions
                    lead_x_change = 0
            elif event.key == pygame.K_DOWN:
                if not (lead_y_change == -boxDimensions):
                    lead_y_change = boxDimensions
                    lead_x_change = 0


    lead_x += lead_x_change
    lead_y += lead_y_change

    if lead_x > gamewidth or lead_x < 0 or lead_y > gameheight or lead_y < 0:
        snakecolour = red
        gameExit = True
        message_to_screen("You Lose!", red)
        pygame.display.update()
        #message_to_screen("You Lose!", red) WONT WORK HERE

    if lead_x > gamewidth:
        lead_x = gamewidth - boxDimensions
        lead_x_change = 0
    elif lead_x < 0:
        lead_x = 0
        lead_x_change = 0
    elif lead_y > gameheight:
        lead_y = gameheight - boxDimensions
    elif lead_y < 0:
        lead_y = 0
        lead_y_change = 0
    gameDisplay.fill(white)
    pygame.draw.rect(gameDisplay, snakecolour, [lead_x,lead_y,boxDimensions,boxDimensions])
    pygame.display.update()

    clock.tick(15)
#message_to_screen("You Lose!", red) DOES WORK HERE
#pygame.display.update()
time.sleep(3)
pygame.quit()

1 个答案:

答案 0 :(得分:0)

message_to_screen("YOU LOSE!",(255,0,0))
pygame.display.update()
sleep(3)
  

AirThomas 评论,这是有效的。在while循环之外,放置此语句。

     

对于得分板:

text = pygame.font.SysFont("None", 30)
score=0
text1=text.render("{}".format(score), True,(255,255,255))
while running:
    screen.fill((0, 0, 0))
    #codes
    #codes
    #codes
    if sneakeatssomething:
        score += 1
        text1=text.render("{}".format(score), True,(255,255,255)) #rendering the score again
    #codes
    #codes 
    screen.blit(text1,(275,6))#showing the score
    pygame.display.flip()
    clock.tick(150)

这是在潜行并将其打印到pygame屏幕时更新得分