为什么我的屏幕上不会出现这种情况?

时间:2016-02-02 01:36:56

标签: python pygame render blit display

我知道这将是(希望)一个简单的解决方案,但我无法在我的屏幕上看到游戏画面。在过去的两个小时里,我一直在考虑这个问题,而且我的调整都没有奏效。任何帮助将不胜感激!

此文件包含主文件循环和精灵组一样 程序的更新和一般更新/渲染

import pygame, sys
import player
import random
import math 
from constants import * 
from bullet import *
from block import *


pygame.init()

screen = pygame.display.set_mode((800,600))

pygame.display.set_caption("Open")

clock = pygame.time.Clock()

def main():

  moveX = 0
  moveY = 0

  sprite_list = pygame.sprite.Group()
  bullet_list = pygame.sprite.Group()
  block_list = pygame.sprite.Group()

main_player = player.Player()
sprite_list.add(main_player)
main_player.rect.x = 400
main_player.rect.y = 550

for i in range(1,10):
        blocks = Block()
        blocks.center_x = random.randrange(760)
        blocks.center_y = random.randrange(400)
        blocks.radius = random.randrange(10,200)
        blocks.angle = random.random() * 4 * math.pi
        blocks.speed = 0.04
        block_list.add(blocks)
        sprite_list.add(blocks) 

font = pygame.font.Font(None, 36)
game_over = False
score = 0
level = 1

gameLoop = True
while gameLoop:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()

        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_RIGHT:
                moveX = 5
            if event.key == pygame.K_LEFT:
                moveX = -5
            if event.key == pygame.K_DOWN:
                moveY = 5
            if event.key == pygame.K_UP:
                moveY = -5
            if event.key == pygame.K_SPACE:
                bullets = Bullet()
                bullets.rect.x = main_player.rect.x + 16
                bullets.rect.y = main_player.rect.y + 16
                sprite_list.add(bullets)
                bullet_list.add(bullets)

        if event.type == pygame.KEYUP:
            if event.key == pygame.K_RIGHT and moveX >= 0:
                moveX = 0
            if event.key == pygame.K_LEFT and moveX <= 0:
                moveX = 0
            if event.key == pygame.K_DOWN and moveY >= 0:
                moveY = 0
            if event.key == pygame.K_UP and moveY <= 0:
                moveY = 0

    for bullets in bullet_list:
        block_hit_list = pygame.sprite.spritecollide(bullets, block_list, True)

        for block in block_hit_list:

            score += 1

            bullet_list.remove(bullets)
            sprite_list.remove(bullets)

            if bullets.rect.y < 0:
                bullet_list.remove(bullets)
                sprite_list.remove(bullets) 

    if pygame.sprite.spritecollide(main_player, block_list, True):
        gameLoop = False
        game_over = True

    sprite_list.update()
    screen.fill(BLACK)
    sprite_list.draw(screen)

    main_player.rect.x += moveX
    main_player.rect.y += moveY

    score_text = font.render("Score: "+str(score), True, WHITE)
    screen.blit(score_text,[10,10])

    level_text = font.render("Level: "+str(level), True, WHITE)
    screen.blit(level_text,[115,10])

    if game_over == True:
        you_lose_text = font.render("YOU SUCK", True, RED)
        screen.blit(you_lose_text, [300,300])
        pygame.time.wait(1000)
        break

    clock.tick(60)

    pygame.display.update()

pygame.quit()

if __name__ == "__main__":
main()

这是我的问题:

if game_over == True:

    you_lose_text = font.render("YOU SUCK", True, RED)
    screen.blit(you_lose_text, [300,300])
    pygame.time.wait(1000)
    break

我没有收到任何错误,pygame.time.wait功能正常运行?为什么只是跳过显示文字?

1 个答案:

答案 0 :(得分:1)

也许这不是最佳解决方案,但您的代码并不需要更好。

blit绘制缓冲区。您必须在update之前使用wait将数据从缓冲区发送到屏幕。

    if game_over == True:
        you_lose_text = font.render("YOU SUCK", True, RED)
        screen.blit(you_lose_text, [300,300])

        pygame.display.update() # send on screen

        pygame.time.wait(1000)
        break

    clock.tick(60)

    pygame.display.update()

pygame.quit()