2013/05/12(日) [n年前の日記]
#1 [prog] まだpygletを勉強中
勉強中。
◎ ogg再生。 :
oggのループ再生もできた。
source = pyglet.media.load('res/bgm32.ogg', streaming=False) self.player = pyglet.media.ManagedSoundPlayer() self.player.queue(source) # キューに入れる self.player.eos_action = self.player.EOS_LOOP # ループ再生を指定 self.player.play() # 再生開始こんな感じっぽい。
◎ ジョイスティックへの対応。 :
pyglet は、ジョイスティックにも対応しているらしい。ただし、pyglet 1.2以降(1.2 alpha1 1含む)で対応、という条件付きだけど。
手持ちのデジタルパッドを接続して実験してみたら、たしかに読み取れている模様。であれば、描画が遅い pygame をわざわざ使わなくても済みそうな予感も。
スクリプト実行中にジョイスティックを引き抜いたらどうなるのか試してみたら、エラーが出て終了してしまった。「応答なし」になったりしないあたりは助かるけれど、終了しちゃうのもよろしくない。接続状態をチェックしてスクリプトの動作に反映させられるのだろうか。try - except を使えばどうにかなるのかな。そのへんまだ調べてない。
手持ちのデジタルパッドを接続して実験してみたら、たしかに読み取れている模様。であれば、描画が遅い pygame をわざわざ使わなくても済みそうな予感も。
スクリプト実行中にジョイスティックを引き抜いたらどうなるのか試してみたら、エラーが出て終了してしまった。「応答なし」になったりしないあたりは助かるけれど、終了しちゃうのもよろしくない。接続状態をチェックしてスクリプトの動作に反映させられるのだろうか。try - except を使えばどうにかなるのかな。そのへんまだ調べてない。
◎ メインループの書き方がよくわからず。 :
メインループの書き方、というか、座標等の更新処理(update())と描画処理(on_draw())がどんな順番・流れで呼ばれているのか、そのあたりがちょっと分からなくて少しアレだなと。画面が時々カクッとなるのだけど、そのへんが絡んでたりするのだろうか。どうなんだろう。
◎ exe化しようとしてハマる。 :
pygletを使ったスクリプトをpy2exeでexe化しようとしてハマる。ちなみに環境は、Windows7 x64 + Python 2.6.6 + pyglet 1.2alpha1。pyglet 1.2 alpha 1 は、
_Python Extension Packages for Windows - Christoph Gohlke
から入手したもの、だったと思う。
不具合その1。モジュールが無い云々のエラーが出て起動しない。以下のようなエラーが出る。
不具合その2。.exe終了時にエラーを吐く。エラーというか、正確には warning なのだけど。以下のようなログが出力されて、「ログを残したよ!」とダイアログが開いて鬱陶しいわけで。
エラーは出なくなったけど、現状では別PCに持っていっても動くところまでできていない。メインPC上ならexe化したファイルも動いてるように見えるけど、録画用PC上では画面全体の色がランダムに変わるだけで、スプライト等の表示が一切できず。しかしoggは再生されている…。pygame + PyOpenGL が動いてたから、OpenGL 関係は一切扱えないPCというわけではないのだろうけど。AMD 785G を乗せたM/Bなわけだし…。
また、ウインドウアプリではなく、コンソールアプリとして exe を作ったら、avbin モジュールが無いとメッセージが表示された。
不具合その1。モジュールが無い云々のエラーが出て起動しない。以下のようなエラーが出る。
D:\pub\exe_test\test_pyglet>fullscrpyglet.exe Unexpected error loading library D:\pub\exe_test\test_pyglet\library.zip\pyglet\media\avbin: 指定されたモジュールが見つかりません。 Unexpected error loading library avbin: 指定されたモジュールが見つかりません。 Traceback (most recent call last): File "fullscrpyglet.py", line 35, in <module> File "zipextimporter.pyo", line 82, in load_module File "pyglet\media\__init__.pyo", line 1469, in <module> File "zipextimporter.pyo", line 82, in load_module File "pyglet\media\avbin.pyo", line 68, in <module> File "pyglet\lib.pyo", line 111, in load_library File "ctypes\__init__.pyo", line 431, in LoadLibrary File "ctypes\__init__.pyo", line 353, in __init__ WindowsError: [Error 126] 指定されたモジュールが見つかりません。これは、avbin.dll が必要ということだったらしい。avbin.dll は、
C:\Python26\Lib\site-packages\pyglet\media\avbin.dllあたりにあるので、exe化した .exe と同じフォルダにコピーする。音声の再生に使うのだろう…と思ったけれど、後になって、どうもそういう感じではなさそうな気もしてきた。
不具合その2。.exe終了時にエラーを吐く。エラーというか、正確には warning なのだけど。以下のようなログが出力されて、「ログを残したよ!」とダイアログが開いて鬱陶しいわけで。
C:\home\prg\_wk\PythonPygletTest1\src\dist\library.zip\pyglet\lib.py:118: DeprecationWarning: BaseException.message has been deprecated as of Python 2.6 C:\home\prg\_wk\PythonPygletTest1\src\dist\library.zip\pyglet\lib.py:119: DeprecationWarning: BaseException.message has been deprecated as of Python 2.6 C:\home\prg\_wk\PythonPygletTest1\src\dist\library.zip\pyglet\lib.py:120: DeprecationWarning: BaseException.message has been deprecated as of Python 2.6これは、pyglet 1.2 alpha 1 に入ってる lib.py 内の記述がマズいらしい。
C:\Python26\Lib\site-packages\pyglet\lib.pyというファイルなのだけど。 _1.2 Alpha and Python 3 - Google グループ に報告があったので、試しに書き換えてみたところ、終了時にエラーが出なくなった。
エラーは出なくなったけど、現状では別PCに持っていっても動くところまでできていない。メインPC上ならexe化したファイルも動いてるように見えるけど、録画用PC上では画面全体の色がランダムに変わるだけで、スプライト等の表示が一切できず。しかしoggは再生されている…。pygame + PyOpenGL が動いてたから、OpenGL 関係は一切扱えないPCというわけではないのだろうけど。AMD 785G を乗せたM/Bなわけだし…。
また、ウインドウアプリではなく、コンソールアプリとして exe を作ったら、avbin モジュールが無いとメッセージが表示された。
D:\pub\exe_test\test_pyglet>fullscrpyglet.exe Unexpected error loading library D:\pub\exe_test\test_pyglet\library.zip\pyglet\media\avbin: 指定されたモジュールが見つかりません。何をどうすればいいのか、さっぱり分からず。
◎ 参考にしているページをメモ。 :
_python - FPS with Pyglet half of monitor refresh rate - Stack Overflow
_python - Can't draw() sprites in pyglet - Stack Overflow
_Pyglet Tutorial - Vidya Dev Wiki
setup.py 記述の参考例。
_Pyglet/examples/astraea at master ・ adamlwgriffiths/Pyglet ・ GitHub
ジョイスティック関係の参考ページ。
_Working with other input devices ・ pyglet v1.2dev
_http://pyglet.googlecode.com/svn/trunk/examples/joystick.py
_Joystick Class ・ pyglet v1.2dev
_python - Can't draw() sprites in pyglet - Stack Overflow
_Pyglet Tutorial - Vidya Dev Wiki
setup.py 記述の参考例。
_Pyglet/examples/astraea at master ・ adamlwgriffiths/Pyglet ・ GitHub
ジョイスティック関係の参考ページ。
_Working with other input devices ・ pyglet v1.2dev
_http://pyglet.googlecode.com/svn/trunk/examples/joystick.py
_Joystick Class ・ pyglet v1.2dev
[ ツッコむ ]
以上です。