首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >pygame.error库未初始化,使用pygame.init和pygame.font.init时未初始化pygame.error视频

pygame.error库未初始化,使用pygame.init和pygame.font.init时未初始化pygame.error视频
EN

Stack Overflow用户
提问于 2022-07-16 06:32:10
回答 1查看 36关注 0票数 0

我正在制作一个简单的游戏,关于点击圆圈来学习游戏。我初始化了游戏和pygame.font,但是当我玩游戏时,它会随机地给我一个错误。当我在收到错误之前关闭游戏时,它会给我一个不同的错误(pygame.error:未初始化的视频系统)

代码语言:javascript
复制
import pygame
import random
import time

#I init here
pygame.init()
pygame.font.init()

class Target():
    def __init__(self, p, color):
        self.visible = True
        self.pos = p
        self.color = color
        self.startT = time.time()

    def isAlive(self):
        if time.time()-self.startT >= aliveTime:
            global gameOver
            gameOver = True
            return 0
        else:
            if self.visible:
                return 1
        return 0

    def colisionCheck(self, color):
        if color == pygame.Color(self.color):
            self.visible = False
            global alive
            global score
            alive -= 1
            score += 1

    def update(self):
        if self.isAlive():
            global targetSize
            pygame.draw.circle(screen, self.color, self.pos, targetSize)

class Circle(pygame.sprite.Sprite):
    def __init__(self, pos, color, *grps):
        super().__init__(*grps)
        self.image = pygame.Surface((32, 32))
        self.image.set_colorkey((1, 2, 3))
        self.image.fill((1, 2, 3))
        pygame.draw.circle(self.image, pygame.Color(color), (15, 15), 15)
        self.rect = self.image.get_rect(center=pos)

running = True
gameOver = False
score = 0
frames = 0
targetSize = 20
aliveTime = 10
startAliveNum = 5
screenX = 1000
screenY = screenX*0.6
alive = startAliveNum
targets = []
screen = pygame.display.set_mode((screenX,    screenY))
font = pygame.font.Font('freesansbold.ttf', 12)
player = Circle(pygame.mouse.get_pos(), 'dodgerblue', targets)

pygame.display.set_caption('My Pygame game')
pygame.display.flip()

def newTargets(ammount):
    for i in range(ammount):
       pos = random.randint(50, screenX-50), random.randint(50, screenY-50)
       targets.append(Target(pos, (random.randint(0, 255), random.randint(0, 255), random.randint(0, 255))))

newTargets(5)

startT = time.time() + 0.000001
targetStartT = startT
while running:
    if gameOver:
        running = False
        pygame.quit()
        
    frames += 1
    text = font.render("{:.2f}fps".format(frames/(time.time()-startT)), True, (0, 0, 0), (255, 255, 255))
##############error here (pygame.error Library not initialized)##############
    text2 = font.render("{:.2f} seconds left".format(targetStartT+10-time.time()), True, (0, 0, 0), (255, 255, 255))
    text3 = font.render("score: " + str(score), True, (0, 0, 0), (255, 255, 255))
    rect = text.get_rect()
    rect2 = text2.get_rect()
    rect2.center = (rect2.width/2, rect.height*1.5)
    rect3 = text3.get_rect()
    rect3.center = (rect3.width/2, rect.height*1.5*1.5)

    screen.fill((30, 30, 30))
    screen.blit(text, rect)
    screen.blit(text2, rect2)
    screen.blit(text3, rect3)
    player.rect.center = pygame.mouse.get_pos()
    player.update()
    
    if alive == 0:
        startAliveNum += 1
        newTargets(startAliveNum)
        alive += startAliveNum
        aliveTime += 0.5
        targetStartT = time.time() + 0.000001

    for i in range(len(targets)):
        targets[i].update()

    for event in pygame.event.get():
        if event.type == pygame.QUIT: 
            pygame.quit()
        if event.type == pygame.MOUSEBUTTONDOWN:
            color = screen.get_at(pygame.mouse.get_pos())
            for i in range(len(targets)):
                targets[i].colisionCheck(color)

    pygame.display.flip()
    ########error here when I close the game before It gives me the first error (pygame.error: video system not initialized)########

谁能帮我弥补一下错误。(如果我拼错了的话)

EN

回答 1

Stack Overflow用户

发布于 2022-07-16 06:36:00

问题是在应用程序循环开始时调用pygame.quit()。当调用pygame.quit()时,将不会初始化所有pygame模块,所有后续对pygame函数的调用都将失败。因为应用程序循环只在循环结束时执行一次语句,所以会得到一个错误。在应用程序循环之后调用pygame.quit()

代码语言:javascript
复制
while running:
    if gameOver:
        running = False
        #pygame.quit()                       <--- DELETE

    # your code
    # [...]

    for event in pygame.event.get():
        if event.type == pygame.QUIT: 
            # pygame.quit()                   <--- DELETE
            running = False                 # <--- INSERT

    # your code
    # [...]

pygame.quit()                               # <--- INSERT
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73002037

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档