微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

pygame-黑屏

如何解决pygame-黑屏

我做了一些研究,看我是否能以这种方式解决问题,但似乎没有找到解决我问题的办法。我发现了这两个:为什么我的pygame显示不显示任何内容?对PyGame为何显示黑屏感到困惑。我试图用评论中建议的内容解决问题,但没有成功,或者问题的原因与我的不同。

当我运行代码时,pygame窗口显示出来,但是只是全黑的,但是没有错误发生。

import pygame
import sys
import random
from time import sleep



padWidth = 480
padHeight = 640
rockImage = ['C:/Users/yount/Downloads/PyShooting/rock01.png','C:/Users/yount/Downloads/PyShooting/rock02.png','C:/Users/yount/Downloads/PyShooting/rock03.png','C:/Users/yount/Downloads/PyShooting/rock04.png','C:/Users/yount/Downloads/PyShooting/rock05.png',]
def drawObject(obj,x,y):
    global gamePad
    gamePad.blit(obj,(x,y))

def initGame():
    global gamePad,clock,background,fighter,missile,explosion
    pygame.init()
    gamePad = pygame.display.set_mode((padWidth,padHeight))
    pygame.display.set_caption('PyShooting')
    background = pygame.image.load("C:/Users/yount/Downloads/PyShooting/background.png")  
    fighter = pygame.image.load("C:/Users/yount/Downloads/PyShooting/fighter.png")
    missile = pygame.image.load("C:/Users/yount/Downloads/PyShooting/missile.png")
    explosion = pygame.image.load("C:/Users/yount/Downloads/PyShooting/explosion.png")
    clock = pygame.time.Clock()

def runGame():
    global gamePad,explosion

    fighterSize = fighter.get_rect().size
    fighterWidth = fighterSize[0]
    fighterHeight = fighterSize[1]

    x = padWidth * 0.45
    y = padHeight * 0.9
    fighterX = 0

    missileXY = []

    rock = pygame.image.load(random.choice(rockImage))
    rockSize = rock.get_rect().size
    rockWidth = rockSize[0]
    rockHeight = rockSize[1]

    rockX = random.randrange(0,padWidth - rockWidth)
    rockY = 0
    rockSpeed = 2

    isShot = False
    shotCount = 0
    rockPassed = 0

    onGame = False
    while not onGame:


    rockX = random.randrange(0,padWidth - rockWidth)
    rockY = 0
    rockSpeed = 2

    fighterSize = fighter.get_rect().size
    fighterWidth = fighterSize[0]
    fighterHeight = fighterSize[1]

    x = padWidth * 0.45
    y = padHeight * 0.9
    fighterX = 0

    onGame = False
    while not onGame:
        for event in pygame.event.get(): 
            if event.type in [pygame.QUIT]:
                pygame.quit()
                sys.exit()

            if event.type in [pygame.KEYDOWN]:
                if event.key == pygame.K_LEFT:
                    fighterX -= 5

                elif event.key == pygame.K_RIGHT:
                    fighterX += 5

                elif event.key == pygame.K_SPACE:
                    missileX = x + fighterWidth/2
                    missileY = y - fighterHeight
                    missileXY.append([missileX,missileY])

            if event.type in [pygame.KEYUP]:
                if event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT:
                    fighterX = 0
    
        drawObject(background,0)

        x += fighterX
        if x < 0:
            x = 0
        elif x > padWidth - fighterWidth:
            x = padWidth - fighterWidth

        drawObject(fighter,y)

        if len(missileXY) != 0:
            for i,bxy in enumerate(missileXY):
                bxy[1] -= 10
                missileXY[i][1] = bxy[1]

                if bxy[1] < rockY:
                    if bxy[0] > rockX and bxy[0] < rockX + rockWidth:
                        missileXY.remove(bxy)
                        isShot = True
                        shoutCount += 1

                if bxy[1] <= 0:
                    try:
                        missileXY.remove(bxy)
                    except:
                        pass
        if len(missileXY) != 0:
            for bx,by in missileXY:
                drawObject(missile,bx,by)

        rockY += rockSpeed

        if rockY > padHeight: 
            rock = pygame.image.load(random.choice(rockImage))
            rockSize = rock.get_rect().size
            rockWidth = rockSize[0]
            rockHeight = rockSize[1]
            rockX = random.randrange(0,padWidth - rockWidth)
            rockY = 0

        if isShot:
            drawObject(explosion,rockX,rockY)
            rock = pygame.image.load(random.choice(rockImage))
            rockSize = rock.get_rect().size
            rockWidth = rockSize[0]
            rockHeight = rockSize[1]
            rockX = random.randrange(0,padWidth - rockWidth)
            rockY = 0
            isShot = False

        drawObject(rock,rockY)

        pygame.display.flip()

        clock.tick(60)

    pygame.quit()

initGame()
runGame()

解决方法

删除这些行(第57 \ 58行)。他们创建了一个不执行任何操作的循环。

onGame = False
while not onGame:

您也可以删除接下来的9行,因为它们似乎是重复的。

也要更改

shoutCount += 1

收件人

shotCount += 1

有了这些更改,游戏就可以正确运行。

完整代码

import pygame
import sys
import random
from time import sleep

padWidth = 480
padHeight = 640
rockImage = ['C:/Users/yount/Downloads/PyShooting/rock01.png','C:/Users/yount/Downloads/PyShooting/rock02.png','C:/Users/yount/Downloads/PyShooting/rock03.png','C:/Users/yount/Downloads/PyShooting/rock04.png','C:/Users/yount/Downloads/PyShooting/rock05.png',]

def drawObject(obj,x,y):
    global gamePad
    gamePad.blit(obj,(x,y))

def initGame():
    global gamePad,clock,background,fighter,missile,explosion
    pygame.init()
    gamePad = pygame.display.set_mode((padWidth,padHeight))
    pygame.display.set_caption('PyShooting')
    background = pygame.image.load("C:/Users/yount/Downloads/PyShooting/background.png")  
    fighter = pygame.image.load("C:/Users/yount/Downloads/PyShooting/fighter.png")
    missile = pygame.image.load("C:/Users/yount/Downloads/PyShooting/missile.png")
    explosion = pygame.image.load("C:/Users/yount/Downloads/PyShooting/explosion.png")

    clock = pygame.time.Clock()

def runGame():
    global gamePad,explosion

    fighterSize = fighter.get_rect().size
    fighterWidth = fighterSize[0]
    fighterHeight = fighterSize[1]

    x = padWidth * 0.45
    y = padHeight * 0.9
    fighterX = 0

    missileXY = []

    rock = pygame.image.load(random.choice(rockImage))
    rockSize = rock.get_rect().size
    rockWidth = rockSize[0]
    rockHeight = rockSize[1]

    rockX = random.randrange(0,padWidth - rockWidth)
    rockY = 0
    rockSpeed = 2

    isShot = False
    shotCount = 0
    rockPassed = 0

#    onGame = False
#    while not onGame:

#    rockX = random.randrange(0,padWidth - rockWidth)
#    rockY = 0
#    rockSpeed = 2

#    fighterSize = fighter.get_rect().size
#    fighterWidth = fighterSize[0]
#    fighterHeight = fighterSize[1]

#    x = padWidth * 0.45
#    y = padHeight * 0.9
#    fighterX = 0
        

    onGame = False
    while not onGame:
        for event in pygame.event.get(): 
            if event.type in [pygame.QUIT]:
                pygame.quit()
                sys.exit()

            if event.type in [pygame.KEYDOWN]:
                if event.key == pygame.K_LEFT:
                    fighterX -= 5

                elif event.key == pygame.K_RIGHT:
                    fighterX += 5

                elif event.key == pygame.K_SPACE:
                    missileX = x + fighterWidth/2
                    missileY = y - fighterHeight
                    missileXY.append([missileX,missileY])

            if event.type in [pygame.KEYUP]:
                if event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT:
                    fighterX = 0
    
        drawObject(background,0)

        x += fighterX
        if x < 0:
            x = 0
        elif x > padWidth - fighterWidth:
            x = padWidth - fighterWidth

        drawObject(fighter,y)

        if len(missileXY) != 0:
            for i,bxy in enumerate(missileXY):
                bxy[1] -= 10
                missileXY[i][1] = bxy[1]

                if bxy[1] < rockY:
                    if bxy[0] > rockX and bxy[0] < rockX + rockWidth:
                        missileXY.remove(bxy)
                        isShot = True
                        shotCount += 1  # not shoutCount

                if bxy[1] <= 0:
                    try:
                        missileXY.remove(bxy)
                    except:
                        pass
        if len(missileXY) != 0:
            for bx,by in missileXY:
                drawObject(missile,bx,by)

        rockY += rockSpeed

        if rockY > padHeight: 
            rock = pygame.image.load(random.choice(rockImage))
            rockSize = rock.get_rect().size
            rockWidth = rockSize[0]
            rockHeight = rockSize[1]
            rockX = random.randrange(0,padWidth - rockWidth)
            rockY = 0

        if isShot:
            drawObject(explosion,rockX,rockY)
            rock = pygame.image.load(random.choice(rockImage))
            rockSize = rock.get_rect().size
            rockWidth = rockSize[0]
            rockHeight = rockSize[1]
            rockX = random.randrange(0,padWidth - rockWidth)
            rockY = 0
            isShot = False

        drawObject(rock,rockY)

        pygame.display.flip()

        clock.tick(60)

    pygame.quit()

initGame()
runGame()
,

您从未真正致电过:

SELECT SEC_TO_TIME(12000)

这样,显示将永远不会更新。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。