投稿日: Jun 03, 2019 2:57:14 PM
PyGameにターゲットしていた理由といえば、Raspberry Piにもともとインストール済みで即利用可能という点からです。
しかしPyGame自体が使いやすいかというとちょっと微妙で、そこをなんとかするためにpygを作ってます。
だいぶ使いやすくなったと思いますよ!
しかしどうにも解決できない問題があって悩んでいました。
ここから回想シーン。
それは、PyGameが起動するとオーディオデバイスを掴んでしまうこと。
Raspberry Piの標準の設定ではオーディオはAlsaドライバによって再生・録音が実行されます。
Alsaは複数のアプリケーションからの出力を同時には処理しません。
PyGameはゲーム用なので他のアプリケーションと同時に利用するなんていう使い方は想定されていないかもしれません。ここらへんはPICO8もオーディオを掴んでしまうので一緒なんですがPICO8の場合はオーディオが掴めない場合音が出ないだけなのでいいんですけどPyGameの場合はエラーになって実行出来ません。
オーディオを使わずに起動するオプションとかあればなー...。
回想シーン終わり。
ということなんです。
それで、ちらちらとTkinterだとかの名前が出ていたわけですねー。奥が深い。
そんなこんなしてるうちにもう一つ候補が出てきました。
Pygletです。なんかどっかで見たことあるような名前だけど、はて?
とりあえずやってみよう。
インストール!
pip3 install pyglet
もともと使えるPyGameと違ってインストールが必要なのがアレですが。
普通はこうだよね。
python3を起動してimport pygletしてエラーでなければオッケー。
ちなみにバージョンは1.3.2でした。
Successfully installed future-0.17.1 pyglet-1.3.2
ちょいと試してみる。
>>> import pyglet
>>> w = pyglet.window.Window(100,100)
>>> w.set_caption("test")
>>> pyglet.app.run()
いろいろと設定したらapp.run()って感じですかね。
どうもメッセージなど見ているとOpenGLが使われているようですねぇ。大丈夫かな。
イベント処理など書かずともウィンドウを閉じると勝手に終了してくれます。
さらに公式サイトへいってHello worldを試してみる。
#!/usr/bin/python3
import pyglet
w = pyglet.window.Window(300,200)
label = pyglet.text.Label("hello world",
font_name="Times New Roman",
font_size=36,
x=w.width//2,y=w.height//2,
anchor_x="center",anchor_y="center")
@w.event
def on_draw():
w.clear()
label.draw()
pyglet.app.run()
オブジェクト指向風味。
ちょっとTkinterを彷彿とさせる感じでしょうか。
わかりやすくぶっちゃけると、わかりづらい。ですね。
処理の流れとしてはオブジェクトを作成してそれらを関連付け、各メソッドに処理を追加してアプリケーション実行というような感じです。
Pythonならではともいえる感じですがー。
とりあえずもう少しいじってみることにしましょう。
感触としてはまあまあ、悪くないんですがこれならTkinterでもいいんじゃないかー?
というような微妙なラインに今います。
あ、でも文字表示すっごいきれいでしたよ。