2014-05-16 77 views
4

我正在用pygame模塊製作遊戲,現在我遇到了問題。該程序本身非常棒,但我想啓用的全屏模式不起作用。我爲全屏模式製作了一個完美的測試程序,但是當我試圖讓遊戲全屏時,顯示屏顯得很奇怪。 首先程序啓動。 您可以看到它以全屏模式進入並顯示文字說:「正在加載...」 然後窗口消失並重新顯示原始非全屏尺寸。 屏幕底部的瀏覽器欄顯示爲雙倍,然後2e資源管理器欄消失。 遊戲然後以非全屏模式運行。 這是我使用的程序:pygame窗口不保留全屏

import pygame, sys, os 
from pygame.locals import * 

pygame.mixer.pre_init(44100, -16, 4, 2048) 
pygame.init() 

DISPLAYSURF = pygame.display.set_mode((476, 506), FULLSCREEN) 

pygame.display.set_caption('Title of the game') 

DISPLAYSURF.fill((128,128,128)) 
FONT = pygame.font.Font('freesansbold.ttf',20) 
LoadingText = FONT.render('Loading...', True, (0,255,0)) 
LoadingRect = LoadingText.get_rect() 
LoadingRect.center = (238,253) 
DISPLAYSURF.blit(LoadingText, LoadingRect) 
pygame.display.update() 


# These files will be created when needed. They are now removed to prevent interference later. 
try: 
    os.remove('LOAD.txt') 
except IOError: 
    pass 
try: 
    os.remove('OPEN.txt') 
except IOError: 
    pass 
try: 
    os.remove('RUN.txt') 
except IOError: 
    pass 
try: 
    os.remove('TEMP.txt') 
except IOError: 
    pass 

# All parts of the program are split into small programs that are callable with a main function 
import ROIM 
import ROIM_CreateNewGame 
import ROIM_LevelMenu 
import ROIM_Menu 
import ROIM_SmallMenus 
import ROIM_GameIntroduction 
import SetupController 


# RUN.txt is a file that says wich program to run 
Run = 'Menu' 
RUN = open('RUN.txt','w') 
RUN.write('RUN\n') 
RUN.write(Run) 
RUN.close() 

ChangeRun = False 

FPS = 35 
fpsClock = pygame.time.Clock() 

while True: # MAIN GAME LOOP 

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

    Preferences = open('Preferences.txt') 
    PreferencesLines = Preferences.read().split('\n') 
    x = 1 
    Volume = -1 
    Brightness = -1 
    for Item in PreferencesLines: 
     if Item == 'BRIGHTNESS': 
      Brightness = int(PreferencesLines[x]) 
     if Item == 'VOLUME': 
      Volume = int(PreferencesLines[x]) 
     x += 1 
    Preferences.close() 
    assert Volume != -1 
    assert Brightness != -1 

    # The colors will be changed to the right brightness. 
    GREEN = (0,255 * (Brightness/100),0) 
    YELLOW = (255 * (Brightness/100),255 * (Brightness/100),0) 
    RED = (255 * (Brightness/100),0,0) 
    BLUE = (0,0,255 * (Brightness/100)) 
    WHITE = (255 * (Brightness/100),255 * (Brightness/100),255 * (Brightness/100)) 
    BLACK = (0,0,0) 
    GREY = (128 * (Brightness/100),128 * (Brightness/100),128 * (Brightness/100)) 


    # Every small program gets the main variables and constants as arguments 
    if Run == 'Menu': 
     ROIM_Menu.RunMenu(FONT, ChangeRun, GREEN, YELLOW, RED, BLUE, WHITE, BLACK, GREY, DISPLAYSURF, Volume, Brightness, fpsClock, FPS) 
    elif Run == 'NewGame': 
     ROIM_CreateNewGame.RunNewGame(FONT, ChangeRun, GREEN, YELLOW, RED, BLUE, WHITE, BLACK, GREY, DISPLAYSURF, Volume, Brightness, fpsClock, FPS) 
    elif Run == 'Game': 
     ROIM.RunGame(FONT, ChangeRun, GREEN, YELLOW, RED, BLUE, WHITE, BLACK, GREY, DISPLAYSURF, Volume, Brightness, fpsClock, FPS) 
    elif Run == 'SmallMenu': 
     ROIM_SmallMenus.RunSmallMenu(FONT, ChangeRun, GREEN, YELLOW, RED, BLUE, WHITE, BLACK, GREY, DISPLAYSURF, Volume, Brightness, fpsClock, FPS) 
    elif Run == 'LevelMenu': 
     ROIM_LevelMenu.RunLevelMenu(FONT, ChangeRun, GREEN, YELLOW, RED, BLUE, WHITE, BLACK, GREY, DISPLAYSURF, Volume, Brightness, fpsClock, FPS) 
    elif Run == 'Introduction': 
     ROIM_GameIntroduction.RunIntro(FONT, ChangeRun, GREEN, YELLOW, RED, BLUE, WHITE, BLACK, GREY, DISPLAYSURF, Volume, Brightness, fpsClock, FPS) 
    elif Run == 'Setup': 
     SetupController.Run_Controller_Setup(FONT, ChangeRun, GREEN, YELLOW, RED, BLUE, WHITE, BLACK, GREY, DISPLAYSURF, Volume, Brightness, fpsClock, FPS) 
    else: 
     assert False 
    # Every program edits the RUN file before finishing 
    ChangeRun = False 
    RUN = open('RUN.txt') 
    assert RUN.readline() == 'RUN\n' 
    Run = RUN.readline().split('\n')[0] 
    RUN.close() 

遊戲運行正常,但不是在全屏模式。 DISPLAYSURF未在程序中編輯。這意味着我不打電話給pygame.display.set_mode()。 我使用的是Windows 8和Python 3.4。 是否因爲我將窗口對象作爲參數傳遞? 我不知道我做錯了什麼。

+0

好的,pygame全屏目前不能在windows中工作,至少據我所知。你可能想要谷歌,pygame全屏在Windows上,或類似的東西。 – KodyVanRy

回答

1

我發現問題是子程序。在每個導入的程序中,你必須導入pygame,但是我認爲我也必須再次啓動pygame,但這不是必需的。我在每個子程序中刪除了pygame.init(),現在它完美了。

2

您可能需要一些傳遞到顯示錶面的.set_mode()函數的附加標誌。以下作品適用於我在Windows 7上:

DISPLAYSURF = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT), FULLSCREEN | HWSURFACE | DOUBLEBUF) 
+0

我試過了。它不起作用。我確實發現,當我在其中一個小程序中執行'pygame.display.set_mode()'時,屏幕在全程序中保持全屏顯示。 –

+0

不幸的是它看起來不太好。它閃爍到全屏。然後它會離開全屏模式,然後再次進入全屏模式。屏幕上閃爍着不好看的動作...... –