Skip to content

Instantly share code, notes, and snippets.

@sugarflower
Last active July 8, 2019 06:41
Show Gist options
  • Save sugarflower/48d1efc902378ecc3cef14852d41ca32 to your computer and use it in GitHub Desktop.
Save sugarflower/48d1efc902378ecc3cef14852d41ca32 to your computer and use it in GitHub Desktop.

pygの目的

ゲームつくるならPICO8で良いと思ってます。 pygは、PC上でグラフィックを扱うのを便利にするためにPyGameの助けを借りるのが目的。 ただPyGameのプログラムを組むともろもろの手続きが凄く多かったりバッドノウハウが多かったりするのでそういう部分を吸収するためのミドルウェアとしてpygはつくられてます。 グラフィック以外にもオーディオやmidi、JoyStickやそのままでは利用出来ないHIDのボタンとかに簡単に対応することが出来ます。

現状問題があるとすればPyGameが起動されるとオーディオデバイスを掴んでしまうので別のオーディオ系ソフトの操作には使えないということ。 Raspberry Piのマルチタッチ機能を使いたい場合はPyGameではなくKivyを使ったほうがいいということ。 PyGameとKivyを同時に動作させることは多分難しいのでターゲットを絞る必要があります。

といった感じでしょうか。

pygのターゲットを少し修正

もともとはプログラミング初心者にも使ってもらえればとフラットに実装していたのだけれども非常に面倒なのでClassを使うように変更しました。 すごく快適です。

inspectでparentを取得して、みたいなのも必要なくなりました。 確証が得られない技術を使うのはとても気持ちが悪かったりこわいことなので確実に大丈夫ってわかってる手段に切り替わったのはとても気持ちがよい。

helloworld.py

#!/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 というクラスを用意して文字の表示関係をいろいろやってもらうとか。

まあ、まだまだいろいろ考えることが多いようです。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment