見出し画像

pyxelの新機能を使ってみる

最近pyxelに画像の拡大縮小、回転機能が追加されました。今回は拡大縮小の部分をちょっと試してみたいと思います。

構文としては以下の形

blt(x, y, img, u, v, w, h, [colkey], [rotate], [scale])

今まで使っていた画像描画のblt関数にrotatescaleの引数が追加されました。今回はscaleの方をいろいろといじってみます。
等倍は1.0のようなので、ここから足したり引いたりしてみます。
※ちなみにタイルマップの描画にも同様の指定ができるようです。RPGでエンカウント時に画面がぼやける(?)やつとかに使えそう。

まずは最終的にできた動きを。

▲おばけがズームイン、ズームアウトしています。

メインのおばけだけではなく、壁の窓や燭台も画像としては1つで拡大率を変えることで対応しています。

コードは以下の通り。

import pyxel


class App:
    def __init__(self):
        #ここで起動時の処理をします                                
        pyxel.init(160, 250, fps=20)        
        pyxel.load('./assets.pyxres')    
        self.pos1 = [70, 50]       
        self.scale = 1.0
        pyxel.run(self.update, self.draw)

    def update(self):
        #ここで毎フレームの更新作業をします

        #おばけを手前に
        if pyxel.btn(pyxel.KEY_P):
            self.scale += 0.1
            self.pos1[1] += 2            
        #奥に
        elif pyxel.btn(pyxel.KEY_O):
            self.scale -= 0.1
            self.pos1[1] -= 2


    def draw(self):
        #ここで毎フレームの描画作業をします
        
        pyxel.cls(0)   
        #地面のガイドラインを描く
        pyxel.line(180, 200, 95, 50,  1)        
        pyxel.line(-20, 200, 65, 50, 1)        
        for i in range(8):
            pyxel.line(0+9*i, 200-20*i, 160-9*i, 200-20*i, 1)
        
        #おばけの描画
        pyxel.blt(self.pos1[0], self.pos1[1], 0, 0, 0, 16, 16, 15, None, self.scale)    
    
        #窓の描画
        for i1 in range(2):
            pyxel.blt(5+i1*25, 60-i1*22, 0, 32, 0, 16, 32, 15, None, 1.5-i1*0.5)
            pyxel.blt(140-i1*25, 60-i1*22, 0, 32, 0, -16, 32, 15, None, 1.5-i1*0.5)

        #ろうそくの描画
        for i2 in range(3):
            pyxel.blt(1+i2*20, 95-i2*30, 0, 16, 0, 16, 16, 15, None, 1.5-i2*0.4)     
            pyxel.blt(145-i2*20, 95-i2*30, 0, 16, 0, -16, 16, 15, None, 1.5-i2*0.4)     


App()

Pキーでズームイン、Oキーでズームアウト。窓や燭台はforで回しながら拡大率を変化させています。

pyxresファイルは以下のものを使いました。

今回はここまで。
読んでいただきありがとうございました。


ここまで読んでいただきありがとうございます!