# Python wrapper このラッパーは、適切なPythonのAllegroバインディングではなく、 ctypesを使ってすべてのAllegro関数や定数を単純に1対1でエクスポート したものである。 ## Building cmakeで WANT_PYTHON_WRAPPER を有効にして、 buildのpythonフォルダにallegro.pyと呼ばれる単一のファイルを置いておく必要があります。 また、必要なら共有バージョンをビルドする必要があります: Windows: liballegro*.dll OSX: liballegro*.dylib Unix: liballegro*.so 単純化のために我々は、単にそれらのファイルを"DLLファイル"として呼び出します。 ## Using it allegro.pyだけでなく、あなたのプロジェクトと一緒に必要なDLLファイルを配布します。 それが見つかるようにあなたが直接、DLLファイルを指すようにそれを変更することができます。 デフォルトでは、いくつかのシステムの特定の場所が走査しようとします。 例えばlinuxは、それらが LD_LIBRARY_PATH やldconfig paths内にありさえすれば、soファイルを見つけます。 ゲーム配布のためのビルドのためには、これはたいてい、/usr/lib ディレクトリ内にある配布物の soファイルを見つけることを意味します。 スタンドアロン配布では、あなたのゲームのライブラリフォルダにして Pythonの実行可能ファイルを実行を指すようにLD_LIBRARY_PATHを変更するシェルスクリプトを提供することがあります。 Linuxのもとで、Pythonを含むようなサンプルか何かを実行させるために、 Allegro source distribution フォルダ内ではじめましょう。 mkdir build cd build cmake -D WANT_PYTHON_WRAPPER=1 .. make export PYTHONPATH=python/ export LD_LIBRARY_PATH=lib/ python ../python/ex_draw_bitmap.py 我々はallegro.pyモジュールとSOファイルの場所を指定する際に LD_LIBRARY_PATHの場所を指定するのに、PYTHONPATHを使用しています。 OSXではこのようにして動かします: mkdir build cd build cmake -D WANT_PYTHON_WRAPPER=1 .. make export PYTHONPATH=python/ export DYLD_LIBRARY_PATH=lib/ python ../python/ex_draw_bitmap.py Windowsでは...: 構築時にWANT_PYTHON_WRAPPERが有効になっていることを確かめて下さい。 それはあなたがMinGWやMSVCを使用するかどうかは問題ではありませんが、 Pythonがシステムにインストールする必要があります。 その後ex_draw_bitmap.py実行します。同様にallegro.pyとしてDLLが存在する必要があり、 最も簡単な方法は単に同じディレクトリにそれら全てを入れておくことです。またはallegro.py編集して、 DLLをロードするディレクトリを指定することができます - その部分のコメントを参照してください。 ## 制限事項 現在いくつかの機能は、アイディア実装の検証段階にすぎません。 重要なことは、まだ修正する必要があるということです。 ### 可変引数は、まだ正しくパースされません たとえばC言語のコードでは: al_draw_textf(font, x, y, flags, "%d, %d", x, y); 今度はこれをPythonで同じようにすると: al_draw_textf(font, x, y, flags, "%s", "%d, %d" % (x, y)) ### 参照カウントまたはガーベジコレクションはありません。 たとえば al_load_bitmap関数を呼んで,あるCポインタが返ります。 もしスコープ外をさした場合、結果メモリリークを起こすでしょう --- とてもPython的ではありません。 それゆえ、このようにするべきです: class Bitmap: def __init__(self, filename): self.c_pointer = al_load_bitmap(filename) def __del__(self): al_destroy_bitmap(self.c_pointer) def draw(self, x, y, flags): al_draw_bitmap(self.c_pointer, x, y, flags); 言い換えれば、適切なPythonのラッパーを作成します。 ### docstringsはありません。 ドキュメントシステムは、各関数の説明を提供していてもそれは今allegro.pyにコピーされていません。 この問題が修正されるまで、Cのドキュメントを使用する必要があります。 ### 多くのサンプルが必要です。 デモのゲームを実行したければ、それは、少なくともそれぞれのアドオンを使用できるかテストする必要があります。