最近ドット絵描きさんのasahaさんが配信でAdobe Animateを
使ってらっしゃるというテクニックを聞いて、早速Adobeのサブスクリプションを登録して、
色々試している日々です。
自分も同じテクニックでアニメーションを作ってみてるのですが、
これがすごーーーーーーーく便利で、いろんなオブジェクトを飛ばすのに超便利です!
ただ、ドット絵の描画ツールとして使うには1つ癖があり、
オブジェクトの座標に小数点が含まれていると、絵にアンチエイリアスが掛かってしまいます。
自分が意図しないかたちでぼやけてしまうので、困ったものですが・・・・
解決策としては座標の小数点を消すことになります。
こうなっちゃう
ただ、これを1つ1つ小数点を消し込むのはとても大変です。
今回はRPA*1を使ってこの処理を自動化することで、負担もかからないしサクサクっとできるようにします。
この記事内で利用するRPAはSikuliX 1.1.4*2です。
(SikuliXのインストール方法などは他のページを参照ください。javaのランタイムがあれば利用できます。)
くるくる回るお花
今回は予めこのgifアニメを作っておいて、それを斜め上に徐々に移動させるというものです。
1 使い方
スクリプトを使うのはこの状態から。
レイヤーにgifアニメを取り込んだ後、「ムービークリップ」→「グラフィック」に変更
貼り付けたのちにモーショントゥーンを作成し、
最初のフレームを選択→取り込んだgifアニメを選択して、
プロパティタブ:オブジェクトをクリックした状態です。
(詳しくはasahaさんの配信をご覧いただいた方がよいかと)
この状態で、以下のスクリプトをSikuliXで実行します。
(AdobeAnimate_Integerization.sikuliフォルダごとコピーします)
日本語のパスが含まれているとなぜか実行がうまくいかないので、
Cドライブの直下にフォルダを作成し、その中にスクリプトを保管します。
(文字コードとか細工すればうまくいく気がしますが、とりあえず暫定で。)
SikuliXで開いたら実行!
モーショントゥーンのフレーム数を入力してOKをクリックすると
自動操作が始まります。
仕上がった後はこんな感じ。
Adobe Animateでのモーション作成の特徴は、
同じ動きをするオブジェクトを複製できることです。
1つ作ったらレイヤーごとシンボルに置き換えて・・・
オブジェクトを選択して・・・
コピペではりつけると!
これをGIFアニメとして書き出すわけですが、後ろの背景レイヤーは邪魔なので消します。
(分かりやすくするために黒背景にしてました)
出来上がったものはこんな感じです。
自分はこのGIFをAsepriteで取り込んで重ねて使ってる感じです。
この術を応用してできたのが、以下の絵です。
(速度などは変更してます)
2 スクリプトの説明
import math count = input(u"フレーム数は?") for i in range(1, int(count)+1): # インスタンス名クリック click("1614139124140.png") wait(0.5) type(Key.TAB) type(Key.TAB) type(Key.TAB) type(Key.TAB) type(Key.TAB) type(Key.TAB) # X # コピー wait(0.5) type('c',Key.CTRL) wait(0.3) Xlocate = App.getClipboard() if float(Xlocate).is_integer(): #小数点がつかないときはそのまま output = Xlocate else: # 小数点削除 output = math.floor(float(Xlocate)) wait(0.5) type(Key.DELETE) # 貼り付け type(str(int(output))) type(Key.TAB) # Y wait(0.5) type('c',Key.CTRL) wait(0.3) Ylocate = App.getClipboard() if float(Ylocate).is_integer(): #小数点がつかないときはそのまま output = Ylocate print("integer") else: # 小数点削除 output = math.floor(float(Ylocate)) print(str(output)) wait(0.5) type(Key.DELETE) # 貼り付け type(str(int(output))) type(Key.TAB) #type('c',Key.CTRL) #Xlocate = App.getClipboard() # 小数点削除 #output = math.floor(float(Xlocate)) # 貼り付け #paste(output) # コピー #type('c',Key.CTRL) # 小数点削除 # 貼り付け click("1614139158530.png") wait(0.5) type('.') click("1614139158530.png")
さて。処理順序は以下の通りです。
1.総フレーム数の確認
2.フレーム数分ループ
2-1.インスタンス名テキストボックスをクリック(※)
2-2.そこからXの座標のテキストボックスに移るまでTABキー押下
2-3.値をクリップボードにコピー
2-4.クリップボードの内容を取得
2-5.値から小数点を取り除く
2-6.テキストボックスに貼り付けなおす
2-7.Yの座標のテキストボックスに移るまでTABキー押下
2-8.2-4から2-6の処理を実行
2-9.次のフレームを選択(「.」キーを押下)
2-10.「オブジェクト」タブを選択(※)
※印の処理は画像のパターンマッチングで検出
(もしこの画像のパターンマッチングでで実行が止まる場合は
PCの環境ごとにキャプチャを取り直すor画像ファイルを差し替える必要があります)
ほぼキーボード操作を自動化させて、一部に画像のパターンマッチングでボタン操作をする格好ですね。
たまに2-3から2-6の処理で値がおかしくなって、画像の動きがずれることがあるみたいですが、
著しくズレるので流石に見てわかるかと。 Ctrl+Zで元に戻して再実行でOKです。
これがPowerAutomateでできるといいんだけどな~~
ウィンドウの指定方法がよくわからなくて戸惑っているところです
(画像ベースのRPAではないのでウィンドウ指定で動くんだけど、
録画機能で生成したスクリプトだと、ウィンドウ名が変わるとちゃんと動かないという。)