簡體   English   中英

對 PyGame 顯示黑屏的原因感到困惑

[英]Confused at why PyGame display's a black screen

所以在我決定問這個問題之前,我做了一些研究,看看我的問題是什么,並遇到了這個問題: Code Only Produces Black Screen In Pygame Window然而,這並不是那么有幫助,因為我沒有遇到同樣的問題人。 我肯定知道我的 PyGame 並沒有過時或類似的東西,因為我的代碼的先前版本可以工作。

每次我運行代碼時,我最終都會得到一個黑屏。

這是我的代碼(有點長抱歉):

import pygame
import sys
from pygame.locals import *

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

objs = []

MAIN_BUTTON = 1

class Pane():

    def __init__(self):
        self.Screen = pygame.display.set_mode((1000,600), 0, 32)
        self.font = pygame.font.SysFont('Arial', 25)

    def drawPane(self, textToDisplay):
        self.Screen.blit(self.font.render(textToDisplay, True, (black)), (250, 115))
        pygame.draw.rect(self.Screen, (black), (175, 75, 200, 100), 2)

    def drawPane1(self, textToDisplay):
        self.Screen.blit(self.font.render(textToDisplay, True, (black)), (250, 115))
        pygame.draw.rect(self.Screen, (black), (175, 75, 200, 100), 2)

    def drawPane2(self, textToDisplay):
        self.Screen.blit(self.font.render(textToDisplay, True, (black)), (250, 115))
        pygame.draw.rect(self.Screen, (black), (175, 75, 200, 100), 2)

    def drawPane3(self, textToDisplay):
        self.Screen.blit(self.font.render(textToDisplay, True, (black)), (250, 115))
        pygame.draw.rect(self.Screen, (black), (175, 75, 200, 100), 2)

    def drawPane4(self, textToDisplay):
        self.Screen.blit(self.font.render(textToDisplay, True, (black)), (250, 115))
        pygame.draw.rect(self.Screen, (black), (175, 75, 200, 100), 2)

    def drawPane5(self, textToDisplay):
        self.Screen.blit(self.font.render(textToDisplay, True, (black)), (250, 115))
        pygame.draw.rect(self.Screen, (black), (175, 75, 200, 100), 2)

    def drawPane6(self, textToDisplay):
        self.Screen.blit(self.font.render(textToDisplay, True, (black)), (250, 115))
        pygame.draw.rect(self.Screen, (black), (175, 75, 200, 100), 2)

    def drawPane7(self, textToDisplay):
        self.Screen.blit(self.font.render(textToDisplay, True, (black)), (250, 115))
        pygame.draw.rect(self.Screen, (black), (175, 75, 200, 100), 2)

    def drawPane8(self, textToDisplay):
        self.Screen.blit(self.font.render(textToDisplay, True, (black)), (250, 115))
        pygame.draw.rect(self.Screen, (black), (175, 75, 200, 100), 2)

    def drawPane9(self, textToDisplay):
        self.Screen.blit(self.font.render(textToDisplay, True, (black)), (250, 115))
        pygame.draw.rect(self.Screen, (black), (175, 75, 200, 100), 2)

class Screen():

    def __init__(self):
        pygame.init()
        self.font = pygame.font.SysFont('Arial', 25)
        pygame.display.set_caption('Box Test')
        self.screen = pygame.display.set_mode((1000,600), 0, 32)
        self.screen.fill((white))
        pygame.display.update()
        numberOfPanes = 0
        self.NoOfPanes = numberOfPanes

    def addPane(self, textToDisplay):
        myPane = Pane()
        myPane.drawPane(textToDisplay)

    def clearScreen(self):
        self.screen = pygame.display.set_mode((600,400), 0, 32)
        self.screen.fill((white))
        pygame.display.update()

    def mousePosition(self):
        global clickPos
        global releasePos
        for event in pygame.event.get():
            if event.type == MAIN_BUTTON:
                self.Pos = pygame.mouse.get_pos()
                return MAIN_BUTTON
            else:
                return False


if __name__ == '__main__':
    Pan3 = Screen()
    Pan3.addPane("hello")
    Pan3.mousePosition()
    pygame.display.update()
    while True:
        ev = pygame.event.get()
        for event in ev:
            if event.type == pygame.MOUSEBUTTONUP:
                posx,posy = pygame.mouse.get_pos()
                print(posx)
                print(posy)


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

所以我基本上是嘗試在**class Screen()**中顯示來自**class Pane()**現在是一個),但是就像我之前說的那樣,當我運行代碼時,我得到了一個黑屏。 但出於某種原因,鼠標坐標跟蹤器仍然有效。 任何幫助是極大的贊賞。

問題是您的代碼組織。

您有樹時間pygame.display.set_mode() 每次調用pygame.display.set_mode()您都會破壞上一個screen ,創建新screen並且新屏幕始終為黑色。

您應該只創建一次screen並將其作為參數發送到其他類。

def addPane(self, textToDisplay):
    myPane = Pane(self.screen) # send screen to Pane
    myPane.drawPane(textToDisplay)

# ...

class Pane():

    def __init__(self, screen):
        self.Screen = screen # get screen 

並從clear()函數中刪除pygame.display.set_mode() -在程序末尾使用一個屏幕。

現在,我可以看到帶有“你好”的窗格

好的,現在我已經解決了我的問題。 (啊哈新手錯誤)。 因此,在class Pane()__init__(self)區域中,添加了self.Screen.fill((white)) ,使其看起來像這樣:

    def __init__(self):
        self.Screen = pygame.display.set_mode((1000,600), 0, 32)
        self.font = pygame.font.SysFont('Arial', 25)
        self.Screen.fill((white))

我不確定這是否是解決問題的最佳方法,但它是否有效。 這樣很好。 但是,如果您認為這不是解決問題的好方法,那么一定要教我一種更好的解決問題的方法。

我也有同樣的問題但是我只用過一次,沒有破壞窗戶😳

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM