0

迫りくる流星を回避するスペース シャトルのゲームを作成しています。これは私の最初の Python プログラムであり、音楽の部分に本当に苦労しています。アイデアはwxPython(pyGameは禁止されています) のみを使用することです。

現在、ボタンをクリックすると音楽が再生されるようになりましたが、宇宙船を制御できなくなりました。

何が起こっているのか完全には理解できず、答えのない日々を探し続けています。

class Board(wx.Panel):
BoardWidth = 5
BoardHeight = 12
Speed = 50
ID_TIMER = 1

def __init__(self,parent):
    wx.Panel.__init__(self,parent)

    self.timer = wx.Timer(self, Board.ID_TIMER)

    self.Bind(wx.EVT_PAINT, self.OnPaint)
    self.Bind(wx.EVT_KEY_DOWN, self.OnKeyDown)
    self.Bind(wx.EVT_TIMER, self.OnTimer, id=Board.ID_TIMER)
    self.ClearBoard()

    self.music = wx.Panel(self)
    button = wx.Button(self, label="Play")
    self.music=wx.media.MediaCtrl(self.music, -1, "game.mp3")
    button.Bind(wx.EVT_BUTTON, self.play)

def play(self,event):
    self.music.Play()

私に関する限り、これはどのように機能すると思いますが、機能しません:

    #...
    self.music=wx.media.MediaCtrl(self, -1, "game.mp3")
    self.Bind(wx.media.EVT_MEDIA_LOADED, self.play)

def play(self,event):
    self.music.Play()
4

1 に答える 1

2

スレッドを使用して音楽を再生できます。現在、音楽が終了するのを待っている間にフレームがフリーズしますが、これはバックグラウンド ミュージックであるため、もちろん決して起こりません。
イベントが生成されない奇妙なバグがあります。これを解決するには、追加szBackend=wx.media.MEDIABACKEND_WMP10します(以下のコードを参照)

試す:

import threading
#...

self.music=wx.media.MediaCtrl(self.music, -1, "game.mp3",
                              szBackend=wx.media.MEDIABACKEND_WMP10)    

#...
def play(self, event):
    threading.Thread(target=self.music.Play).start()

または、タイマーを使用して、ファイルがロードされるのを待つこともできます。

def __init__(self, parent):
    #...
    self.play()

def play(self):
    threading.Timer(0.5, self.music.Play).start()
于 2012-05-26T13:51:19.050 に答える