簡體   English   中英

Pygame在某些情況下不會打印文本

[英]Pygame won't print text in certain circumstances

因此,當用戶將框從可播放屏幕上移開時,我試圖在屏幕上打印“您輸”,但是除非我從主while循環外部調用它,否則這似乎不起作用。 我已經定義了一個函數來處理文本的創建,呈現和“變黑”,盡管當從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()
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屏幕上

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM