2013-12-16 39 views
2

我的工作與Python 3,pygame的寫了一個遊戲。我想介紹一個功能,玩家可以按S來暫停遊戲進程(場景和音樂),然後再按一次繼續。是pygame.mixer.music.pause應該以我的方式工作?

但是我發現pygame.mixer.music.pause()從來沒有工作過,因爲它,pygame.mixer.music.get_busy()總是真。

停止()的作品,但我仍然需要暫停(),這樣我可以從那裏的音樂已暫停繼續。

下面是我寫的縮小可能範圍問題的方案:

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

''''conclusion: pause() is not working(seems it triggers nothing, and 
as a result, get_busy() is not working with pause()) 
''' 

# Define some colors 
black = ( 0, 0, 0) 
white = (255, 255, 255) 
red  = (255, 0, 0) 
blue  = ( 0, 0, 255) 
purple = (159, 0, 197) 

bgColor= (0, 0, 0) 
textColor = (250, 250, 255) 

width = 600 
height = 600 

def end(): 
    pygame.quit() 
    sys.exit() 

def drawText(text, font, surface, x, y): 
    textobj = font.render(text, 1, textColor) 
    textrect = textobj.get_rect() 
    textrect.topleft = (x, y) 
    surface.blit(textobj, textrect) 

pygame.init() 
screen = pygame.display.set_mode([width,height]) 

pygame.mixer.music.load('background.mid') 
font = pygame.font.SysFont(None, 48) 

clock = pygame.time.Clock() 

pygame.mixer.music.play(-1, 0.0) 
pygame.mixer.music.set_volume(0.5) 
paused=False 
while True: #game loop when the game is playing.  
    if not pygame.mixer.music.get_busy(): #is not playing 
     print("Not playing") 
    for event in pygame.event.get(): 
     if event.type == pygame.QUIT: 
      end();  
     elif event.type == KEYUP:  
      if event.key == K_ESCAPE: 
       end() 
      elif event.key == K_s:  
       print("pause.") 
       #pygame.mixer.music.pause() 
       pygame.mixer.music.stop() 


    screen.fill(bgColor) 
    pygame.display.flip() 
    clock.tick(40)   
+1

爲什麼你需要'get_busy()'返回'FALSE'?你可以使用'if not paused:'並在'K_s'上設置/取消設置。如果您調用'pygame.mixer.music.pause()',音樂會暫停嗎? – jfs

+0

這裏的問題是,pause()什麼都不做;音樂仍在播放。根據pygame文件,當音樂播放時,get_busy()返回True。 – Peihui

+3

所以問題是'music.pause()'不會暫停音樂。你有沒有試圖用'get_pos,stop'來模擬它,暫停和'set_pos,play'來取消暫停? – jfs

回答

2

最後,我嘗試了背景音樂的其他格式。我將音樂格式從midi更改爲mp3或ogg,暫停()工作。所以這裏的問題是格式。

此外,get_busy()不會做的都是pygame的文件說什麼:暫停()和取消暫停()不改變get_busy的返回值()。

+0

在我的遊戲中(也使用MIDI格式),音樂播放只在文件結束後暫停,儘管處於無限循環。不停頓將再次啓動無限循環。在這種情況下,get_busy的值確實發生了變化。 –

相關問題