pygをPyGameへの透過インターフェイスに
投稿日: May 25, 2019 9:53:46 AM
何いってんだかわからん。というアレね。わかりますわかります。
具体的にはpygに実装されていないPyGameの機能へアクセスするときは
pyg.pygame.ほにゃらら
こんな感じでアクセスしていました。
これを一部修正して
pyg.ほにゃら
と、pyg自体がPyGameと同等の扱いになりましたよー。みたいな、そういう感じ。
つまりPyGameのサンプルプログラムとか使うときにいちいちpyg.pygame〜みたいにかかなくても
pyg.imageとかいった感じで直接アクセス出来ます。みたいなね。
これに伴って
pyg.init
pyg.quit
このふたつが
pyg.begin
pyg.end
に変わりました。
今の段階なら影響ほとんど無いだろうし実質ほとんど書き直すことは無いくらいの修正でおわってよかったねー。
ところでpygってなにしてるの。
というところを説明しとかないといけないなーと思いました。
まずpygを使わずに書くとどういう感じになるか。
import pygame, time, subprocess
from pygame.locals import *
#---------------------------------------------
# function start
#---------------------------------------------
def polling( value ):
global _running
st = time.time()
_procWait = True
while(_procWait):
for event in pygame.event.get():
if event.type == pygame.QUIT:
_running = False
if time.time() - st > value:
_procWait = False
def blink( value ):
global screen, img1, img2, tempText
screen.fill( (50,50,50) )
screen.blit(tempText,(48,89))
if( value == 1 ):
screen.blit(img1,(14,83))
else:
screen.blit(img2,(14,83))
pygame.display.update()
#---------------------------------------------
# function end
#---------------------------------------------
_running = True
_size = ( 320,200 )
_mode = pygame.HWSURFACE | pygame.DOUBLEBUF
pygame.init()
screen = pygame.display.set_mode(_size,_mode)
pygame.display.set_caption("hello pygame")
myFont = pygame.font.Font(None,30)
img1 = pygame.image.load("res/bluedot.png").convert_alpha()
img2 = pygame.image.load("res/glaydot.png").convert_alpha()
thermal = "cat /sys/class/thermal/thermal_zone0/temp"
while(_running):
vTemp = subprocess.check_output(thermal, shell=True)
vTemp = int(vTemp) / 1000.0
tempText = myFont.render("Temp: " + str(vTemp),1,(255,255,255))
blink(1)
polling(0.2)
blink(0)
polling(0.2)
pygame.quit()
pygを使ってやるとこうなります。
#!/usr/bin/python3
import pyg
import subprocess
pyg.begin((320,200))
myFont = pyg.font.Font(None,30)
img1 = pyg.imgLoad("res/bluedot.png")
img2 = pyg.imgLoad("res/glaydot.png")
thermal = "cat /sys/class/thermal/thermal_zone0/temp"
blk = True
while pyg._running:
pyg.process(0.2)
vTemp = subprocess.check_output(thermal, shell=True)
vTemp = int(vTemp) / 1000.0
tempText = myFont.render("Temp: " + str(vTemp),1,(255,255,255))
if blk:
pyg.putImg(img1,(14,83) )
blk = False
else:
pyg.putImg(img2,(14,83) )
blk = True
pyg.putImg( tempText, (48,89) )
pyg.end()
どうでしょう、かなりスッキリするんじゃないでしょうか。
どちらも内容は一緒で実行するとこんな感じで温度が表示されて横の丸いのがピカピカするっていうものです。
LEDチカチカ 通称 Lチカにちなんで過去に作ったものですが、Raspberry PiのCPU温度取得してたりして何気に実用性高いサンプルになってます(?)
pygが何を目的としているか というと、煩わしい定形処理はpygにすべて任せてしまってロジックを考えるのに集中できる環境をつくること。です。
イベント、ノンブロッキングウェイト、画面の更新などをpyg側で処理しています。
キーの同時入力なんかも処理してたりします。
また、PyGameには変なバッドノウハウがいろいろあります。
そのなかでサウンド再生の問題、画面の位置が毎回ばらばらになる問題についてpygで吸収しています。
なにか面白く使うとか派手にするとかではなくて、簡単に便利にするため。
そして何よりも自分で使いたいので作ってます。
なーんとなく意図がつたわるといいな〜。