[英]pygame - black screen
我做了一些研究,看看我是否可以通過這種方式解決問題,但似乎沒有找到任何可以解決我的問題的方法。 我發現了這兩個:為什么我的 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, clock, background, fighter, 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, 0)
x += fighterX
if x < 0:
x = 0
elif x > padWidth - fighterWidth:
x = padWidth - fighterWidth
drawObject(fighter, x, 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, rockX, 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, clock, background, fighter, 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, 0)
x += fighterX
if x < 0:
x = 0
elif x > padWidth - fighterWidth:
x = padWidth - fighterWidth
drawObject(fighter, x, 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, rockX, rockY)
pygame.display.flip()
clock.tick(60)
pygame.quit()
initGame()
runGame()
你從來沒有真正調用過:
pygame.display.update()
這樣顯示就永遠不會更新。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.