ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

Pythonコミュのpygame1.6.2のバグ?

  • mixiチェック
  • このエントリーをはてなブックマークに追加
初めて書き込みます。
つい最近Pythonの勉強を始めた者です。

Python2.3.4 + pygame1.6.2でWindows用アプリケーションを
作ろうとしているのですが、どうもpygameのtime.Clock.tick()
でバグのようなものを見つけたのでご報告いたします。

time.Clock.tick()を実行した後、次にこの関数が実行される
までの間に、pygame.event.get()が呼び出されないと、
アプリケーションがフリーズしてしまうようです。

ソースの一部を書きますと、

-----
while 1:
 clock.tick(60)

 pygame.event.get()

 # 描画
 screen.blit(background, (0, 0))
 pygame.display.flip()
-----

という感じでして、このpygame.event.get()を
コメントアウトすると、実行時に即フリーズしてしまいます。

OSはWindowsXPなのですが、他のOSではまだ試していません。
逆にならなかった方がいらっしゃれば、
環境を教えていただけると幸いです。

もしバグではなくて、マニュアルに記載されている仕様
であれば、該当箇所を教えていただければと思います。
探してみましたが見つかりませんでした。
よろしくお願いいたします。

コメント(4)

追加報告です。

どうやら、tickメソッドは関係ないようです。
ループ中にpygame.eventモジュールが呼ばれているかどうか
というのが問題になっているような気がします。

ちなみに、IDLEから実行した場合も、pythonインタプリタで
実行した場合も同様に起きるようです。

OSとの相性なのか、ライブラリのバージョンによるものなのか
まだはっきりしませんが、もう少し調べてみます。

http://www.unixuser.org/~euske/doc/pygame/
この方のチュートリアルでは特にこのようなことは
起きていませんでした。
(pygame1.6.0, windows98?)

pygame + py2exeでも、GUIアプリケーションが正しく
コンバートできないようで、この件も合わせて
MLにPOSTしてみるべきかなあと思っております。
http://mail.python.org/pipermail/python-list/2004-March/213168.html
Pygame使いの端くれでございます。

基本的には「pygame.event.get()は毎フレーム呼びましょう」ということになると思います。
PygameというよりはSDLの仕組みなのですが、イベントがキューに溜まっていくのでそれを定期的に取得してチェックするのが定石です。

しかしキューが溢れるとフリーズするんだとしたらそれはそれでまずい気はしますが...
そういえば、先の書き込みでご紹介したチュートリアルでは、
whileループを回してませんでした。
インタプリタからラインごとに実行してましたので。

ということは、やっぱりwhileで回している間に
キューにイベントが溜まり続けるという感じなのでしょうかね。
それをpygame.event.get()でポップさせてやると。

実行直後にフリーズするというのは、
いきなりダイアログが出て強制終了という感じではなくて、
実行はされているけれどもスレッドががっちり
ロックされているような感じです。
(ずっと砂時計が出っ放しで、応答しなくなる)
XPだからかもしれませんが、他のOSではいきなり
落ちる可能性もあるかもしれません。
ドキュメントを見ていたら、それらしい記述がありました。

http://www.pygame.org/docs/ref/pygame_event.html
pygame.event.pump()の説明より。

>If you fail to make a call to the event queue for too long, the system may decide your program has locked up.

だそうですが、そんな重要なことは先頭に書いて!(笑)

ちなみに、pygame.event.get([type])
とありますが、引数にtypeを入れておくと、
128回前後のpushがあったあたりで、
なぜかキューが機能しなくなりました。。。
これもMLに投げておこうと思います。

ログインすると、みんなのコメントがもっと見れるよ

mixiユーザー
ログインしてコメントしよう!

Python 更新情報

Pythonのメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。

人気コミュニティランキング