funde-rectangleのブログ

ウルトラごった煮

Aseprite:セルの画像を数値指定でシフト移動する。(複数フレーム/移動)

最近、歩くアニメーションの画像を作りたいなと思っていくつかアップロードしました。
これまでは手でポチポチ押しながら画像を移動させていましたが、
せっかくスクリプトが導入できるソフトなので、どうにか効率化できないかな・・・と思い
スクリプトを組んでみました。

スクリプト保管先(GitHub)
github.com

1.使い方

f:id:funde-rectangle:20210217005652p:plain
▲例えばこんな感じの画像があったとして、背景レイヤーを指定ピクセル分徐々に移動したいとします。

1.移動したいセルを選択してスクリプトを実行

f:id:funde-rectangle:20210217005835p:plain
▲ごっちゃりしてきたなぁ スクリプトを所定のフォルダに保管後、「SHIFTCelbyNumber」をクリック。

2.移動したいピクセル数を指定

f:id:funde-rectangle:20210217005933p:plain
スクリプトを実行するとダイアログが表示されるので移動したいピクセル数を指定します。

3.反映したいフレーム数を指定

f:id:funde-rectangle:20210217010231p:plain
▲次に反映したいフレーム数を指定します。 例えばここで10と選択すると、1フレームごとに3ピクセル移動し、
 最終的には10フレーム後に30ピクセル移動することになります。

4.移動方向を指定

f:id:funde-rectangle:20210217010524p:plain
▲画像を移動させたい方向を指定します。 ダイアログで案内されている文字列をそのまま入力してください。
 (うまい方法が思いつかなくてすみません・・・)

f:id:funde-rectangle:20210217010622p:plain
▲成功すると右側方向のフレームに反映されます。

f:id:funde-rectangle:20210217011530p:plain
f:id:funde-rectangle:20210217011542p:plain
f:id:funde-rectangle:20210217011556p:plain
f:id:funde-rectangle:20210217011630p:plain

2.ちょっとだけ解説。

以下の順番で実行しています。
 1.先頭のセルをコピー
 2.空のセルを生成
 3.選択セルを2で生成したセルに移動
 4.貼り付け(単純にコピペの操作です)
 5.セル全体を矩形選択
 6.指定セル*ループ数分移動
  (1フレーム目なら3*1=3ピクセル、2フレーム目なら3*2=6ピクセル...)

      app.command.Copy()
      spr:newCel(app.activeLayer, app.activeSprite.frames[firstFrameCount+i])
      app.activeCel = app.activeLayer:cel(firstFrameCount+i)
      app.command.Paste()

▲1~4の操作。ちなみにCopyCelなる動作もあるみたいですが、うまくいきませんでした。
 多分セル選択したときにAlt+Dするとできる操作だと思うんだけど、引数がよくわからなくて・・・

      -- 選択範囲移動(共通)
      app.command.MoveMask{
          target='content',
          direction=directiondata.direction,
          units='pixel',
          quantity=(addquantity.addcount*i),
          wrap=false
        }

▲5~6の操作。 MoveMaskというのが6の操作です。
 同じMoveMaskという記述をもう1個追加して違うdirectionを指定すれば斜め移動もできます。
 (directionがleftのものとupのものを追加すれば左上に徐々に移動します。)


これで大分楽になった印象です。
風の表現とかがうまくいくといいな~と思います。

https://github.com/aseprite/api/blob/master/api/app_command.md#appcommand
ちなみに最近知ったのですが、Asepriteで引数が見つからないとき(app.commandのもののみ?)はhttps://github.com/aseprite/aseprite/blob/master/data/gui.xml
でメソッド名を検索して引数を確認するか、AsepriteのC++ソースコードでメソッド名検索して頂戴とのこと。
それでうまくいったケースはいくつかあったのですが、app.command.CopyCelは引数がなく、どう使ったらいいのやら・・・
といった感じで悩んでおります。  どうしようかな。 なんかそれでうまくいきそうだったらまた更新します。