Pygame †
入門用サイト †
- Pygame入門 - 各モジュールの使い方を一通りサンプルコードとともに紹介.画像の表示,文字の描画,音楽の再生などpygameで何ができるか,どうやるのかをいっぺんに把握できます.
- FrontPage - Pythonでゲーム作りますが何か? - 実際にpygameでRPGやインベーダー,ブロック崩しなどのゲームを作りながら勉強することができます.姉妹サイト:FrontPage - Javaでゲーム作りますが何か?
- Pygame 関連文書 - pygame公式サイトのチュートリアル文書の和訳.特にこの文書を最初に読んでおくことをお勧めします.初心者のための pygame ガイド
- Pygame Documentation - pygame公式のドキュメントです.説明が足りない部分は自分で動かしたり下のサイトを見て動作を把握しましょう.
- SDLドキュメント和訳 - pygameのベースになっているSDLのドキュメントです.
- Python Performance Tips - ゲームを作っていて遅く感じる部分があったらまずはここの基本的なTipsを使ってみましょう.Python全般で使えるテクニックです.
- 2ch関連スレ - 【pygame】pythonでゲーム製作【ぱいがめ】
Tips †
numpy:大きな配列や行列計算ができるパッケージを入れよう †
pygameではピクセル単位の操作にnumpyやNumericといった大規模行列計算用のパッケージを使っています.数百×数百のピクセルを自前のforループで書くと非常に遅くなってしまいますが,これらのパッケージを利用することで高速な処理を実現することができます.以下のTipsでも透明度の操作や連立方程式の解を得るなどの目的で使用しています.
ダウンロードはこちら:SciPy - Download
SciPyというのは科学的なさまざまな問題(統計,積分,イメージ処理,最適化など)を解くためのツールですが,ここでは気にせずDownloadページに行ってnumpyをダウンロードしましょう.
Binary installation for Windows (32-bit) Install NumPy 1.1.1 for Python 2.5 or NumPy 1.1.1 for Python 2.4 or NumPy 1.1.1 for Python 2.3
↑のようにPythonの各バージョンに合わせたものがありますので,お使いのPythonのバージョンに合ったものをクリックしてください.
一応行列計算のサンプルなど.numpyのarrayはPythonのlistとほとんど同じで,相互の変換が簡単にできます.arrayに対する操作もたいていlistにもarrayにも適用できるようにただの関数になっています.(arrayのオブジェクトと結合していない)
ピクセルごとのα値を持つサーフェスの半透明化 †
画像を半透明にして描画する際にset_alphaを使うことが多いですが,画像がピクセルごとにα値を持っている場合*1はset_alphaは効果がありません.ピクセルごとにα値を持っているサーフェスを徐々に透明にしていきたい場合はこの値を直接操作する必要があります. 大きな画像をリアルタイムにフェードするような場合はたぶん重いです.
画像の中心を軸にした回転 †
画像を回転させるとサイズが変わってしまうので,回転前と同じ座標に描画するとバウンドしているような微妙な動きになってしまいます(下画像右側).以下のrotate_blit関数はもともとの画像の中心を軸に回転するように描画します.centerフラグをFalseにしたときが左側,Trueにしたときが真ん中で赤い点は描画位置に指定した座標を表しています.Falseのときは回転角度が0のときの左上座標を基準にしているので通常のblitと親和性が高いです.
pygameでは「回転させて描画」を一度にやることはできず,「回転させたサーフェスを作成」「描画」という手続きが必要なので,大きな画像の回転はかなり重くなってしまいます.
画像の任意の点を軸にした回転 †
上記の方法は常に中心を軸にして回転を行いますが,こちらは任意の点を軸にして回転する方法です.中心を軸にしたときよりも少し計算は多いですが描画や回転サーフェスの作成に比べれば計算コストは圧倒的に小さいです.
※微妙にカクカクしてるので誤差分の修正が必要…
なめらかな曲線が欲しい(Spline-Curve:スプライン曲線) †
ゲームで使うことはあまり無いかもしれませんが,例えばシューティングゲームで敵や弾のなめらかな軌道を実現したいときにこういった補間曲線を使うと良いかも知れません.以下のmake_spline_funcは参考サイトに載っている計算をそのまま実装したものですが,連立方程式の解を求める部分はnumpyのsolve関数を使っているのでそんなに遅くはないと思います.
* 参考
* サンプル画像
黄色がスプライン曲線,紫がCatmull-Romスプライン曲線です.
なめらかな曲線が欲しい(Catmull-Romスプライン曲線) †
上記のスプライン曲線は連立方程式の解を求めるなど手続きが煩雑ですが,こちらはかなり手軽に補間曲線の関数を得ることができます.ここではイテレータブルなオブジェクトとしてCatmullクラスを定義してみました.35〜37行目の例にあるとおり,サンプル点を与えてCatmullオブジェクトを作り,for文で回すだけで簡単に補間曲線を形成する点を取得することができます.
* 参考
添付ファイル: spline_curve.png 739件 [詳細] rotate2.gif 710件 [詳細] transparency.gif 685件 [詳細] rotate.gif 2242件 [詳細]