Flash は、複数のレイヤーを一度にコピーすることができない。
例えば、_root に作ってしまった複数のレイヤー、複数のフレームに渡るアニメーションを、新規作成した MovieClip にコピーしたいというニーズが多々あるのに、できない。
いや、できないというのは語弊がある。
レイヤー 1 のフレーム 1 を選択した後、Shift キーを押しながらレイヤー n の、フレーム n を選択してからコピーすれば、一応、できる。
ただし、多くの Flash ユーザが経験するであろうこの行為、ペーストした後がつらい。全レイヤーのフレーム数が一番長いものに統一されてしまうのだ。
意図する動作を JSFL で実行できないものかと調べた結果、やはり、できないことがわかった。以下のスクリプトで一見正しそうに見えるが、クリップボードにコピーされていない。
フレームが選択された状態で、タイムラインのコンテキストメニューを開いても「フレームのコピー」は不可になっている。
//レイヤー 1 のフレーム 1 にカーソルがある状態で実行
var timeline = fl.getDocumentDOM().getTimeline();
timeline.currentLayer = 0;
timeline.currentFrame = 0;
for (var i = 0; i < timeline.layers.length; i++) {
var frameTotal = timeline.layers[i].frames.length;
timeline.currentLayer = i;
timeline.setSelectedFrames(0, frameTotal, false);
}
timeline.copyFrames();
どうやら、複数のレイヤーのフレームをコピーするためには、「選択されたレイヤーの選択されたフレーム数が全て同じである」必要があるらしい。
はじめまして。以前から拝見させてもらってます。
複数レイヤー、Ctrl+Alt+C ではだめですか?
普段私もうっかり_rootに作ってしまうのですが、これでやってます(貼り付けはCtrl+Alt+V)
はじめまして。コメント有り難うございます。
Ctrl+Alt+Cを試しました。
コピー&ペーストはできますが、
相変わらず各フレームの長さが同じになってしまいます。
方法が間違っているのでしょうか……?
==========
レイヤー1 : 5フレーム
レイヤー2 : 10フレーム
==========
このようなタイムラインを、レイヤー1の6フレーム以降が、5フレーム目の延長にならないようにペーストしたいのです。
初めまして。
僕もよくやりますけれど、
レイヤー1 の6フレーム目に空白キーフレームを打っておくのじゃダメですかね
はじめまして。
そもそも「全レイヤーのフレーム数が一番長いものに統一されてしまう」のに
何か問題があるのでしょうか?
個々のレイヤーのフレームの長さが違う場合、フレームの編集時にいくつかのめんどくさい作業が増えます。
また、あるレイヤーの長さがその長さなのは、フレームの足し忘れである可能性も捨てきれなくなります。(外部スタッフからFlaを受け取る場合)
以上のような理由で、
わたしの場合、オーサリング時は常に「全レイヤーのフレーム数は統一」し、
オブジェクトがないレイヤーのフレームには空白キーフレームをうつことで
何もないレイヤーだということを明示しています。
Flashもそういう使い方を想定した仕様になっているのではないでしょうか。
kenさん、yamaharuさん
はじめまして。コメント有り難うございます。
「全レイヤーのフレーム数が一番長いものに統一されてしまう」
ことの何が問題かというと、
「短いフレーム=最終フレーム以降、そのフレームに配置したグラフィックを表示したくない→自動的に長くなる→グラフィックが表示され、不都合が起きる」
ことです。
仕事では、殆どタイムラインをいじることは無いのですが、
時々、スクリプトを入れる際に、本エントリのような包括作業が発生します。
いただいたコメント通り、
「それ以降不要なフレームには、空のキーフレームを作成し、全てのレイヤーのフレームの長さは統一する」
ことがベストな解決策だと思いました。いわゆる標準化ですね。
検索していたら、いい例のタイムラインがありました。
http://pastelmilk.com/blog/img/2006_10/flashmovie01.php
理想型です。