GG 文解というAEのスクリプトの生い立ちを解説する。6
閉じる
閉じる

GG 文解というAEのスクリプトの生い立ちを解説する。6

2019-12-31 02:41
    4の冒頭から飛んできた方と、5の終わりから飛んできた方が居ますね。
    今からするのは生い立ち1で書いた3つ目の処理の仕様
    「構造ごとにまとめたグループを1レイヤーずつに分離する。」
    の話です。

    4の冒頭から飛んできた方のために4と5の内容をざっくり説明すると、シェイプのコンテンツ内の文字グループの中で、更にパス構造ごとのグループになるように、グループを追加してパスを移動して、とかしたところです。

    で、構造ごとのグループにしたという事は、このグループをレイヤーごとに分ければもう処理3が終わるわけです。
    そのアルゴリズムを考えてみましょう。
    4と5を読んだ方はもうお分かりだと思いますが、レイヤーを増やして値をコピーして、削除して、みたいな流れです。

    と、二年前の私なら言っていたでしょう。

    GGAddLayers ver2.0という、レイヤーを何個も追加しまくれるスクリプトを作った時から、私はとある事実を知っています。
    AEは、レイヤーの追加よりも、レイヤーの複製の方が、圧倒的に処理が軽いです。
    めちゃくちゃ軽いです。全然違います。
    皆さん試しに百個レイヤーを追加する文と、一個レイヤーを追加して99回複製する文を比べてみてください。
    comp.layer[1].duplicate();が複製です。
    はい試しましたね。試してない方はなんの証拠もない私のこの一文を盲目的に信じてください。

    という事は、今回もシェイプレイヤーを追加してプロパティを追加して値をsetValueしてみたいな事をするよりも、レイヤーを複製して、そこからプロパティを削除してしまった方が圧倒的に速い。その方針で行きましょう。
    for(文字数をNで){
     for(構造グループ数をiで){
      テキストシェイプレイヤー(インデックスをkで)を複製
      for(シェイプのコンテンツ直下のグループ数-1){
       レイヤー(k+1)の2個目の文字グループを削除
      }
      for(シェイプの1文字目の構造グループ数-1){
       レイヤー(k+1)の1個目の文字グループ内の2個目のグループを削除
      }
      if(レイヤー(k)の1個目の文字グループ内の構造グループが残り2個以上なら)
       レイヤー(k)の1個目の文字グループ内の1個目のグループを削除
     }
     if(レイヤー(k)の文字グループが残り2個以上なら)
      レイヤー(k)の1個目の文字グループを削除
    }

    という感じになるわけです。
    実はこの書き方だと最後に一個余計なプロパティやレイヤーが作られてしまうので、それを削除するなり一回分ループ減らして最後手動でなんとかするなり調整が必要なわけですが、これで構造ごとにレイヤーを分解する事が出来ました。


    これでGG文解プロトタイプは完成しました。
    しかしまた問題が発生します。
    アンカーポイントが真ん中に無いのです。操作性が悪すぎるのです。
    ここを何とかするために、生い立ち7の記事があるのです。
    広告
    コメントを書く
    コメントをするには、
    ログインして下さい。