メむンコンテンツぞスキップ
芋出し画像

【pyxel 1.5】Pyxel Editor䜿甚方法たずめ

    pythonのレトロゲヌム゚ンゞン「pyxel」 に付随するPyxel Editorの䜿い方たずめです。バヌゞョン1.5.0から倧きく倉曎された点もあるので、そのあたりに重点を眮いお曞いおいきたいず思いたす。

    Pyxel Editorではむメヌゞ・タむルマップ・サりンドずゲヌムに必芁なリ゜ヌスをたずめお䜜るこずができたす。僕のような初心者にはうれしいずころです。
    サりンド゚ディタヌはあたり䜿えおいないので、このnoteではむメヌゞずタむルマップを取り䞊げたす。

    ※Ver1.5.0ではPyxel Editorの座暙関連の䞍具合が報告されおいたした。Ver1.5.1で修正されおいたので、Pyxel Editor䜿甚前にpyxel本䜓のバヌゞョン確認をおすすめしたす。

    旧バヌゞョンVer.1.4以前に぀いおは以䞋のnoteに蚘茉しおありたす。

    䜿甚環境

    Windows 11  Anaconda
    ゚ディタヌはAnacondaに぀いおくるSpyderを䜿っおいたす。
    pyxelの実行環境構築に぀いおは以䞋のnoteをご参照ください。

    起動方法

    Anaconda環境ではタヌミナルから起動したす。Anaconda Navigaterの巊のタブから「Enviroments」をクリック。pyxelが動かせる環境の▶ボタンをクリック。「Open Terminal」をクリック。黒い背景のタヌミナルが起動したす。「pyxel edit "保存するファむルパス"」で起動です。

    pyxel edit C:\python\pyxel\sample

    ▲Cの䞭にある「python」ずいうフォルダの䞭の「pyxel」フォルダに「sample」ずいう名前で䜜成する堎合はこんな感じ。
    䜜成したファむルの拡匵子は「.pyxres」ですが、起動コマンドには䞍芁です。

    画像

    ▲Pyxel Editorが起動できたした。巊䞊のファむルパスも指定したものになっおいたす。

    ドット絵を䜜る

    たずはドット絵を䜜っおみたす。

    ドット絵を描く

    画像

    ▲むメヌゞ線集画面です。ざっくりず説明しおいきたす。
    ①線集察象の切り替えボタンです。巊から「むメヌゞ・タむルマップ・サりンド・ミュヌゞック」の順です。
    ➁「もどす・進める」ボタンです。
    ③「保存」ボタンです。
    ④「珟圚のカヌ゜ルの座暙」が衚瀺されおいたす。
    ⑀メむンの線集りィンドりです。巊クリックでドットを打぀こずができたす。右クリックで遞択個所の色を取埗、右クリックしたたたマりス移動でスクロヌル。
    ⑥むメヌゞバンク党䜓の衚瀺です。癜枠郚分が巊の線集りィンドりに写っおいる郚分です。
    ⑊パレット郚分です。色やブラシの圢・機胜を遞択したす。
    ⑧むメヌゞバンク切り替え郚分。「0・1・2」の3぀あり、それぞれでむメヌゞを䜜成できたす。キャラクタヌ衚瀺甚ずかタむルマップ甚ずか、甚途別で分けるずわかりやすいかも。

    画像

    ▲癜猫ず茶猫を描きたした。これを実際に衚瀺させおみたす。

    ドット絵を䜿う

    # -*- coding: utf-8 -*-
    
    import pyxel
    
    class APP:
      def __init__(self):
          pyxel.init(128, 128, title="pyxel")
          
          pyxel.load('sample.pyxres')
          
          pyxel.run(self.update, self.draw)
         
      def update(self):
          pass
    
      def draw(self):
          pyxel.cls(0)
    
          pyxel.blt(50, 50, 0, 0, 0, 8, 8, 0)
          
          pyxel.blt(65, 65, 0, 8, 8, 8, 8, 0)
          
          
    APP()
    

    ▲短いコヌドですがこれで画像衚瀺ができたす。
    たずpyxel.loadで先ほど䜜ったむメヌゞファむルを読み蟌みたす。今回は本䜓の.pyファむルず同じ階局にむメヌゞファむルを眮いおいたす。
    その埌、draw郚分でむメヌゞの描画です。pyxel.bltを䜿いたす。
    blt(x, y, img, u, v, w, h, [colkey])が曞匏です。
    䟋えば、
    pyxel.blt(50, 50, 0, 0, 0, 8, 8, 0)
    は日本語にするず
    画面の5050の䜍眮にむメヌゞバンク「0」の00の䜍眮から暪8、瞊8の範囲を描画し、カラヌコヌド「0」黒は透過させる。
    ずいう意味になりたす。最埌の透過カラヌコヌドは省略しおもOKです。

    画像

    ▲衚瀺できたした。結構かわいい気がしおきた。

    タむルマップを䜜る

    さお、癜猫ず茶猫を衚瀺しおみたしたが、背景があんたりなのでタむルマップを䜜っおみたす。

    タむルマップを描く

    タむルマップはむメヌゞの集合䜓です。なので、たずはタむルにするむメヌゞを描きたす。

    画像

    ▲岩ブロック、土ブロック、草原を描きたした。ごちゃごちゃにならないように、むメヌゞバンクは「1」に切り替えおいたす。

    画像

    ▲タむルマップ線集画面です。䞊郚のツヌルバヌはむメヌゞ線集画面ず被るので割愛したす。
    ①タむルマップ線集りィンドりです。
    ➁遞択しおいるタむルマップの䞭でどの郚分が線集りィンドりに衚瀺されおいるかがわかりたす。
    ③遞択しおいるむメヌゞバンクの䞭身です。
    ④タむルマップの切り替えなどを行いたす。
    ⑀䜿甚するむメヌゞバンクを切り替えたす。むメヌゞバンクは぀しか遞べない点は泚意です。䟋えばむメヌゞバンク0からこのタむル、むメヌゞバンク1からこのタむルずかはできない。

    タむルマップを䜿う

    # -*- coding: utf-8 -*-
    
    import pyxel
    
    class APP:
      def __init__(self):
          pyxel.init(128, 128, title="pyxel")
          
          pyxel.load('sample.pyxres')
          
          pyxel.run(self.update, self.draw)
         
      def update(self):
          pass
    
      def draw(self):
          pyxel.cls(0)
    
          pyxel.bltm(0, 0, 0, 0, 0, 128, 128)
               
          pyxel.blt(50, 50, 0, 0, 0, 8, 8, 0)
          
          pyxel.blt(65, 65, 0, 8, 8, 8, 8, 0)
          
          
    APP()
    

    ▲先ほどのコヌドに少し远加しおいたす。
    タむルマップ衚瀺の曞匏はbltm(x, y, tm, u, v, w, h, [colkey])です。先ほどのむメヌゞ衚瀺ずほが同じですね。コヌドの䞊から順番に描画するので、タむルマップ→むメヌゞの順で曞いおいたす。
    今回曞いたコヌドは
    pyxel.bltm(0, 0, 0, 0, 0, 16, 16)で
    日本語にするず
    画面の00の䜍眮にタむルマップバンク「0」の00の䜍眮から暪128、瞊128の範囲を描画する。
    ずいう意味になりたす。透過カラヌコヌドは必芁ないので曞いおいたせん。

    画像

    ▲タむルマップの衚瀺ができたした。草原の䞊に猫がいたす。

    これでむメヌゞずタむルマップの䜜補・衚瀺ができたした。
    今回はここたでになりたす。読んでいただきありがずうございたした。

    おたけ

    # -*- coding: utf-8 -*-
    
    import pyxel
    
    class APP:
      def __init__(self):
          pyxel.init(128, 128, title="pyxel")
          
          pyxel.load('sample.pyxres')
          
          self.neko_pos = [48, 48] 
          self.neko_muki = 0
          
          pyxel.run(self.update, self.draw)
          
         
      def update(self):
          tile_x = self.neko_pos[0] / 8
          tile_y = self.neko_pos[1] / 8
          if pyxel.btnp(pyxel.KEY_UP):
              tile = pyxel.tilemap(0).pget(tile_x, tile_y - 1)
              if tile == (0, 1):
                  self.neko_pos[1] = self.neko_pos[1] - 8
          
          if pyxel.btnp(pyxel.KEY_DOWN):
              tile = pyxel.tilemap(0).pget(tile_x, tile_y + 1)
              if tile == (0, 1):
                  self.neko_pos[1] = self.neko_pos[1] + 8
              
          if pyxel.btnp(pyxel.KEY_RIGHT):
              tile = pyxel.tilemap(0).pget(tile_x + 1, tile_y)
              if tile == (0, 1):
                  self.neko_pos[0] = self.neko_pos[0] + 8
              self.neko_muki = 0
              
          if pyxel.btnp(pyxel.KEY_LEFT):
              tile = pyxel.tilemap(0).pget(tile_x - 1, tile_y)
              if tile == (0, 1):
                  self.neko_pos[0] = self.neko_pos[0] - 8
              self.neko_muki = 1
    
      def draw(self):
          pyxel.cls(0)
    
          pyxel.bltm(0, 0, 0, 0, 0, 128, 128)
               
          pyxel.blt(self.neko_pos[0], self.neko_pos[1], 0,
                    0 + self.neko_muki * 8, 0, 8, 8, 0)
          
          pyxel.blt(65, 65, 0, 8, 8, 8, 8, 0)
          
          
    APP()
    

    ▲少しコヌドを远加しお癜猫を動かせるようにしたした。移動先のタむルを芋お、草原のみ動けるようにしおいたす。タむル皮類はVer1.5.0からタプル型になったようです。(x, y)の順なので(0, 1)は1行目の0個目ずいうこずになりたす。今回では草のマスですね。順番が0から始たる点は泚意。

    画像

    ▲動かすずこんな感じ。茶猫には圓たり刀定がないのですり抜けおしたいたす。

    Pyxel Editorの䜿い方に぀いお、ざっくりずみおみたした。割ず少ないコヌドでも動くものが䜜れたすし、ちょっずしたお絵描きツヌルずしおも良いず思いたす。おすすめです。

    ここたで読んでいただきありがずうございたした。

    この蚘事が参加しおいる募集

     
     
    出版瀟のしがない瀟内SE。 ここでは䞻に趣味のプログラミングやゲヌム制䜜に぀いお曞いおいたす。䜜ったゲヌムは https://koidemizu.github.io/ で公開しおいるのでよかったら遊んでください。 ゲヌム倧奜きむンドア掟。

    あなたぞのおすすめ