ゲームつくるならPICO8で良いと思ってます。 pygは、PC上でグラフィックを扱うのを便利にするためにPyGameの助けを借りるのが目的。 ただPyGameのプログラムを組むともろもろの手続きが凄く多かったりバッドノウハウが多かったりするのでそういう部分を吸収するためのミドルウェアとしてpygはつくられてます。 グラフィック以外にもオーディオやmidi、JoyStickやそのままでは利用出来ないHIDのボタンとかに簡単に対応することが出来ます。
現状問題があるとすればPyGameが起動されるとオーディオデバイスを掴んでしまうので別のオーディオ系ソフトの操作には使えないということ。 Raspberry Piのマルチタッチ機能を使いたい場合はPyGameではなくKivyを使ったほうがいいということ。 PyGameとKivyを同時に動作させることは多分難しいのでターゲットを絞る必要があります。
といった感じでしょうか。
もともとはプログラミング初心者にも使ってもらえればとフラットに実装していたのだけれども非常に面倒なのでClassを使うように変更しました。 すごく快適です。
inspectでparentを取得して、みたいなのも必要なくなりました。 確証が得られない技術を使うのはとても気持ちが悪かったりこわいことなので確実に大丈夫ってわかってる手段に切り替わったのはとても気持ちがよい。
#!/usr/bin/python3
import pyg
import pyg.font8x8
class main:
def setup(self):
pyg.setSize((128,128),(256,256))
pyg.setTitle("hello world")
# make text
self.img = pyg.createImage(88,8)
font = pyg.font8x8.Font(pyg)
font.printStr("Hello World", surf=self.img)
self.r = 0
def loop(self):
pyg.clear()
pyg.putImage(self.img, (64,64), center=True, rotate=self.r)
self.r = (self.r + 1) % 360
if __name__ == "__main__":
m = main()
pyg.run(m)
一番簡単でキレイなサンプルを出そうと思い hello worldを用意したはよいのだけれどもテキストの扱いがややこしい。 ここはPyGameとほぼ同じ手法を利用しているのでpygがっていうんではなくてPythonでリアルタイム性の高いプログラム作るのには手法としてはこうなっちゃうよっていうことで。
どういうことかというと、テキストを毎フレームレンダリングしてるとPythonってそんなすごい速い言語ではないのでやっぱり速度的に不利になってしまう。 なので予めネイティブ側で処理できるようにバッファリングというか、PyGame流に言えばサーフェイスを作ってサーフェイスでやり取りをする。ということになります。 コメントでmake textってつけてある部分がそれなのだけどもたった1行「Hello World」と表示したいだけなのにやけに面倒です。 ココらへんをもうちょっと考えて直接サーフェイスを返してもらえるとかそういう処理にしたほうがいいのかな、とか。 あるいは console というクラスを用意して文字の表示関係をいろいろやってもらうとか。
まあ、まだまだいろいろ考えることが多いようです。