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で吸収しています。

なにか面白く使うとか派手にするとかではなくて、簡単に便利にするため。

そして何よりも自分で使いたいので作ってます。

なーんとなく意図がつたわるといいな〜。