豊橋市の鍼灸・指圧マッサージ小浜治療院

小浜治療院トップページ > 趣味に関して 目次 > Pygame その2

Pygame その2

レイヤーは欲しくないか?
Pygameではレイヤーが作れる。
日本語訳にレイヤーが作れるとは書いてないが、ネットを探せば「作れる」と書いてある。
しかし、作れると書いてあるが、作り方が書いてない。
なのでそれを書こうと思う。

まずは土台となる画面を作る。
幅1200,高さ960としておこう。
screen = pygame.display.set_mode((1200,960))

Pygameでは画面に貼るものをサーフェス(Surface)という。
レイヤーとは、「画面の大きさと同じ透明なフィルム」ということだ。
つまり、透明なサーフェスを作ってその上に何か書き、それを土台に貼れば、レイヤーが出来た、ということだ。
それでは透明なレイヤーを作る。
レイヤー名は layer1 としておこう。

layer1 = pygame.Surface([1200, 960], pygame.SRCALPHA)

これだけだ。
これで透明なフィルムが出来たのだ。
このlayer1に何か画像を貼れば、その画像だけが描かれた寸法[1200,960]の透明フィルムが出来上がる、ということだ。
たとえば、chara1.pngという画像を読みだして

chara_img = pygame.image.load("chara1.png")

layer1に貼る。(描くことになる)

layer1.blit(chara_img, [x,y]) #xとyはchara_imgを貼りたいlayer1上の座標

そしてlayer1を土台に貼る

screen.blit(layer1.[0,0]) #スクリーンとlayer1が同じ大きさのため、スクリーンの座標[0,0]にlayer1を貼る

これでスクリーン上にレイヤーを貼ったことになる。

レイヤーはlayer2,layer3,・・・と何枚でも作れる。
何枚でも重ねられる。(メモリとスピードを犠牲にして)
貼る順番によって表示の上下関係が変化するので、考えて貼るように。

「pygame.SRCALPHA」が、Pygameドキュメントには「ピクセル単位の透過」と書いてあり、やや分かりにくいがこういうことだ。
便利だが、この透過方法はやや処理スピードが劣るらしい。
私にはどの程度か分からない。
スピードを要求されるゲームにはこの方法は使わないようにした方がいいらしい。


レイヤーに一度貼ってしまった画像は、レイヤーに「描いた」ことになり、はがせないようだ。
このレイヤーに別の絵を描きたいときはどうするか。
「同名」のレイヤーを作り直し、貼り直す(描き直す)ことになる。
いいんだ。どうせレイヤーなんて使い捨てだ。
「同名」なら何の問題もない。
バンバン作り直して描き直そう。

皆さんの助けになれれば幸いです。

小浜治療院トップページに戻る