多数のモーションのタイミングを調整するときに、F5キーと格闘する必要性はもうありません。「階段状にフレームを挿入する」コマンド”FrameIntoFunction”リリースです。なんつってなんつって。
効果は図の通りですが、作ってみて思いのほか用途の広いコマンドです。少なくとも、私にとっては。
以下使い方、使用例、ソースの順に紹介いたします。
インストール方法はjsflとxmlをcommandsフォルダに放り込むだけ。フォルダに関しては「jsflのすすめ」後半参照。放り込むと、Flashの上メニューの「コマンド」一覧に現れます。使用条件は「縦一列に1フレームを選択していること」です。複数レイヤーにまたがってないと意味を成しません。
階段の形式は、上向き・下向き、幅の一段指定・全体指定・ランダムモードが選べます。また、フレーム挿入の直前まで少数精度で計算を行ってますので、例えば「1.5フレームずつ」と指定すると2f, 1f, 2f…と挿入することが可能です。
補足ですが、このコマンドと特に相性のよいのが、Flashデフォルトに搭載されている「レイヤーに配分」という機能。特にテキストとは相性抜群です。「Takt」のタイポグラフィでは、このコマンドをフル活用しています。
使用例としてここに代表的なパターンをまとめたものを表示しておきます。
いずれもレイヤー配分とコマンドを使って、3~4ステップでできています。制作時間約15分。
参考までにFlaファイルも置いておきます。
最後にjsflのソースをのっけて終わり。エラーチェックとか実はとんでもなく適当です。
// ダイアログを開く
var insertStairlyDialog = fl.getDocumentDOM().xmlPanel(fl.configURI+"Commands/階段状にフレームを挿入.xml");
//OKボタンが押されたら
if (insertStairlyDialog.dismiss == "accept") {
//ダイアログの入力情報を取得
//間隔フレーム数。数データに変換。
diff = Number(insertStairlyDialog.st_diff);
//ずらし方
how = insertStairlyDialog.st_how;
//階段の上下
order = insertStairlyDialog.st_order;
//flashのタイムラインとかを扱うため変数に格納
dom = fl.getDocumentDOM();
tl = dom.getTimeline();
//現在選択されているフレーム範囲を配列として取得
selectedFrames = tl.getSelectedFrames();
//縦一列じゃないと困るからエラーチェック。実はてきとー。
if((selectedFrames[2] - selectedFrames[1]) != 1){
alert('フレームの選択範囲を縦一列にして下さい');
}
//ちゃんと縦一列を選んでいたら
else {
//選択フレーム範囲の縦の長さ=レイヤー数と、一番上が何枚目のレイヤーかを格納
n = (selectedFrames.length / 3);
sfhead = selectedFrames[0];
//レイヤー数分の配列を用意して
var diffarray = new Array(n);
//入力条件にあわせて、i番目のレイヤーに何フレーム挿入するか配列内に計算しておく
//「間隔ずつ」レイヤーをずらすなら
if (how == 'layer'){
//公差=間隔の単純な等差数列。上のレイヤーからだんだん挿入数が増える。
if (order == 'goLow'){
for (i = 0; i < n; i++){
diffarray[i] = Math.round(diff * (i));
}
//上り階段のときは、下のレイヤーほど挿入数が減るから逆に。
} else if (order == 'goHigh'){
for (i = 0; i < n; i++){
diffarray[i] = Math.round(diff * (n - i - 1));
}
}
//「間隔」を全てのレイヤーで均等に配分するなら
} else if (how =='total'){
if (order == 'goLow'){
//間隔をレイヤー数で割ったものが公差。代入直前で四捨五入して整数値に。
for (i = 0; i < n; i++){
diffarray[i] = Math.round(diff / n * i);
}
} else if (order == 'goHigh'){
for (i = 0; i < n; i++){
diffarray[i] =Math.round(diff / n * (n - i - 1));
}
}
//「間隔」幅内でランダムにずらすなら
} else if (how =='random'){
for (i = 0; i < n; i++){
diffarray[i] = Math.round(Math.random() * diff);
}
}
//配列が用意できたので、i番目のレイヤーに配列のi番目の値の分だけフレームを挿入
for (i = 0; i < n; i++){
tl.setSelectedFrames([sfhead +i, selectedFrames[1] , selectedFrames[2]], true);
tl.insertFrames(diffarray[i]);
}
}
}



はじめまして。
新作が出るたびにわくわくしながら見ています。
ソースも公開されていらっしゃるのでFLASH初心者の私には大変勉強になります。
そのソースの方なのですが、FrameIntoFunctionのサンプルを見ようと思って開いてみたら・・・「スクリーンが使われているのでこのFlash8じゃ見れネェよ」と出ました・・・orz
学校のプロフェッショナルだと問題なく見れるのですがうちのベーシックではスクリーンに対応してないので開けませんでした。
PP08CMからのようなので最近使い方をマスターしたとか、そんな感じですかね?
長くなってしまいましたのでこの辺りで。
次の作品も期待してます(`・ω・´)b
>hiroeさん
はじめまして。感想ありがとうございます。
ソースについてですが、PrismとPOPMIX6th以外は全て8pro以上が必要かと思います。最近からではなく、Glowmotionの頃からブレンドモードとカスタムイージング多用してるのですが…。
ちなみに上サンプルではスクリーンは使ってないと思います。カスタムイージング使ってますが。
もしかしたらCS3で保存していたのかもと思い、念のため8で保存しなおしてみました。
[…] Mattari Blog - 階段状にフレームを挿入するjsflコマンド […]
[…] 最近導入した、【FLASH7,8】ライブラリ一発整理 拡張機能が良い感じで重宝してます。あと、階段状にフレームを挿入するjsflコマンドも重宝しそう。 Author: c3 Categories: Flash Tags: コメント (0) トラックバック (0) コメントをどうぞ トラックバック […]