加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

尝试打印文本时,Pygame不更新显示

发布时间:2020-12-17 17:37:47 所属栏目:Python 来源:网络整理
导读:我正在尝试通过遵循此tutorial学习PyGame. 当我当机时,“您已当机”文本仅出现一格,并且几乎立即消失.当我在朋友PC上运行代码时,它运行得很好. 发生的视频:Streamable link 真正应该发生的事情:玩游戏-您当机->文字出现(“您死了”)->等待2秒-游戏重置 我

我正在尝试通过遵循此tutorial学习PyGame.
当我当机时,“您已当机”文本仅出现一格,并且几乎立即消失.当我在朋友PC上运行代码时,它运行得很好.

发生的视频:Streamable link

真正应该发生的事情:玩游戏->您当机->文字出现(“您死了”)->等待2秒->游戏重置

我的代码是:

import pygame
import time

pygame.init()

display_width = 800
display_height = 600
crash = False

black = (0,0)
white = (255,255,255)
red = (255,0)

gameDisplay = pygame.display.set_mode((display_width,display_height))
pygame.display.set_caption('lil spacey')
clock = pygame.time.Clock()

characterImage = pygame.transform.scale(pygame.image.load('Longcat.jpg'),(100,100))

spriteWidth = pygame.Surface.get_width(characterImage)
spriteHeight = pygame.Surface.get_height(characterImage)

def spriteCharacter(x,y):
    gameDisplay.blit(characterImage,(x,y))

def text_objects(text,font):
    textSurface = font.render(text,True,black)
    return textSurface,textSurface.get_rect()

def messageDisplay(text):
    largeText = pygame.font.Font('freesansbold.ttf',115)
    TextSurf,TextRect = text_objects(text,largeText)
    TextRect.center = ((display_width/2),(display_height/2))
    gameDisplay.blit(TextSurf,TextRect)
    pygame.display.update()
    time.sleep(2)
    gameLoop()

def crash():
    messageDisplay('You dead')

def gameLoop():
    x = (display_width * 0.45)
    y = (display_height * 0.8)

    x_change = 0
    y_change = 0

    gameExit = False

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

            if event.type == pygame.KEYDOWN:
                if event.key == pygame.K_LEFT:
                    x_change = -5
                elif event.key == pygame.K_RIGHT:
                    x_change = 5
                elif event.key == pygame.K_UP:
                    y_change = -5
                elif event.key == pygame.K_DOWN:
                    y_change = 5

            if event.type == pygame.KEYUP:
                if event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT:
                    x_change = 0
                elif event.key == pygame.K_UP or event.key == pygame.K_DOWN:
                    y_change = 0

        x += x_change
        y += y_change

        gameDisplay.fill(white)
        spriteCharacter(x,y)

        if x > display_width - spriteWidth or x < 0:
            crash()
        elif y > display_height - spriteHeight or y < 0:
            crash()

        pygame.display.update()
        clock.tick(60)

gameLoop()
pygame.quit()
quit()

我尝试过的

>重新安装Python
>重新安装Pygame

版本:

> Python:3.7.2
> Pygame:1.9.4
>作业系统:macOS Mojave

希望您能提供帮助:)

最佳答案
当您不让pygame处理事件时,在调用pygame.display.update()之后,可能无法重绘窗口.

您可以在pygame.display.update()和time.sleep(2)之间调用pygame.event.get(),但是您应该尝试遵循以下规则:

>只有一个主循环
>每帧调用一次pygame.display.update
>从不调用time.sleep或任何其他长时间运行的阻止功能
>不要从主循环函数中调用主循环函数

以防止此类问题.

当发生崩溃时,您应该更改游戏状态以反映这一事实,然后计算直到2秒过去的时间,然后再次更改状态.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读