UndoFishのブロマガ

[aviutl]obj.setanchorの注意点(アンカーポイント動かなくなる問題)

2017/11/06 21:44 投稿

コメント:1

  • タグ:
  • Aviutl
  • setanchor
  • Aviutlスクリプト

aviutlのobj.setanchorといえば、マウスによる直感的操作が可能な
座標設定の手助けをしてくれる便利機能ですね。


しかし実は私、このsetanchorについて長年悩まされてきました。
何がかというとこの現象。

何故か後半のアンカーが設定されない(もとに戻る)


他人のスクリプトでも自分のスクリプトでも関係なく
必ず起きるわけでもないが起きたら最後、それ以降は設定できない。

ポイントの数が多ければ多いほど起きやすく、
何となく左上の方に作ったときほど起きやすいかなー?
程度の傾向はあるものの、原因不明なまま困り果てていました。

しかもこれ、自分的には結構な頻度で起きてたのですが、
検索してみても同様の現象に悩まされているという情報は、中々見当たらない。

こりゃ自分だけなのかなーと諦めていたんですが、
この度、ついに原因らしきものを突き止めることができました。


原因は……なんと、スクリプトの--dialogパラメータの量でした。

量、といってもパラメータの項目数ということではありません
(なお、lua.txtによると--dialogに使える最大項目数は16個のようです)

--dialogに記述するlua構文部分(下のスクリプトで言うと青字の部分)、
実はこれにも制限があったようで、合計で半角255文字までしか書けない
という制限があるようなのです。

--dialog:param1,local v1="123456789012345678901234567890123456789";param2,local v2="123456789012345678901234567890123456789";param3,local v3="123456789012345678901234567890123456789";param4,local v4="123456789012345678901234567890123456789";param5,local v5="123456789012345678901234567890123456789";

Web上だと変な場所で改行されると思うのでわかりにくければ https://www.dropbox.com/s/cg92iply4j28vhq/param255.anm?dl=0 から

このスクリプトは青字部分が255文字となっています。
ここで最初のパラメータv1をvv1にしてAviutlで実行するとどうなるか?

問答無用でAviutlをフリーズさせる鬼スクリプトに変貌します。


Aviutl起動時に赤線が乗るオブジェクトで、このスクリプトを適用してしまった日には
フリーズするだけのAviutlが一丁上がりです。
(勿論スクリプトを修正すれば治りますが)


ここまで書いたら、気づいた方もいらっしゃるのではないでしょうか。
obj.setanchorってよくこう書きますよね。

--dialog:座標,pos={};
obj.setanchor("pos",16,"line")

このpos、アンカーを動かしたら文字数が可変するわけです。
可変した結果が、255文字を超えてしまったら?

その結果がこれ。


左上のほうで設定したほうが起きやすいわけです。
原点よりも左ならX座標が、上ならばY座標がマイナスになって
その分、文字数が増えるわけですから。

検証用に用意したスクリプトがこちら

--dialog:座標,pos={};param2,local v2="123456789012345678901234567890123456789";param3,local v3="123456789012345678901234567890123456789";param4,local v4="123456789012345678901234567890123456789";param5,local v5="123456789012345678901234567890123456789";
obj.setanchor("pos",16,"line")

Web上だと変な場所で改行されると思うのでわかりにくければ https://www.dropbox.com/s/gb4o1fepbi7frcr/setAnchor.anm?dl=0 から


この場合、ポイント16個分の座標がいきなり入り切らないせいなのか
1個もポイントを設定できなくなります。


つまり結論としては、obj.setanchorを--dialogのパラメータ変数で使うときは
その他のパラメータの変数名や初期値を出来るだけ短くするのが大事、ってことですかね。
(もしくは面倒ですが、座標パラメータだけ別スクリプトにするとか)

まぁあくまで、私の環境でだけ起こっているものかもしれないので
なんとも言い切れないのですが、もし他にも同様の現象に悩まされている方がいたら
その手助けになれば幸い、ということで。


コメント

たこ/ゆでだこP
No.1 (2017/11/06 21:50)
あ、これ、そう言う事なのか…納得しました。
検証ご苦労様でした。
コメントを書き込むにはログインしてください。

いまブロマガで人気の記事