Pygameの処理速度

SolarWolfっていうゲームをちょっと遊んでみた。

ドットイート+弾除けっていう感じのゲーム。まあ昨今の弾幕と比べると、敵弾がなんともつつましやかで、上下左右4方向しか飛んでなくてすげー地味。まあもとはAtari 2600のSolarFoxっていうゲームらしいので、地味なのはしょうがないか。

で、SolarWolfってのはSDLPythonバインディングであるPygameで書かれている。Pygameについては前(id:ABA:20031115#p1)にちょっと触れてそのまま大放置状態だったんだけど、このゲームでたまたままたお目にかかることになった。

Pythonでゲームを書くと、十分な処理速度が得られるかがどうしても気になるんだけど、このSolarWolfはPygameで速いゲームを書くときのお手本とされているらしい。

5. 汚れた rect をアニメーションさせる。

こいつがうみだす速度のちがいには、ぶったまげる。 Solarwolf を思い出してよ、これは何十というスプライトがスムーズに動いて update していて、そのうえまだ背景に交差する星々を流していて、これまた update する時間がじゅうぶんにあるんだ

ここで述べられているのは、フレームごとに画面全体を更新するのではなくて、前フレームとの差分だけを書き換えるテクニックのことだ。昔のマイコンで、画面がスクロールするゲームを作るときに非常に重要だったテクニックだが、今世紀になってまだ生きていたとは。

今の時代にこういったこまごまとしたテクニックが求められるとなるとちょいとつらいね。このドキュメントがいつごろ書かれたものかは知らないけど、今の普通のマシンでもこんなことをする必要があるのかな。Pythonってほんとにそんなに遅いの?

適当にぐぐったらこんなのが引っかかったが...他のLLと比べてもそんなには遅くなさげ。まあPygameだとSDLをラップした部分のオーバヘッドの方がでかそうだから、こんなところを見てもだめかも。

関係ないけどLuaは全般に優秀だね。strcatだけ抜群に遅いのはなにか組みかたをへくっているのだろうか。