我的工作與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)
爲什麼你需要'get_busy()'返回'FALSE'?你可以使用'if not paused:'並在'K_s'上設置/取消設置。如果您調用'pygame.mixer.music.pause()',音樂會暫停嗎? – jfs
這裏的問題是,pause()什麼都不做;音樂仍在播放。根據pygame文件,當音樂播放時,get_busy()返回True。 – Peihui
所以問題是'music.pause()'不會暫停音樂。你有沒有試圖用'get_pos,stop'來模擬它,暫停和'set_pos,play'來取消暫停? – jfs