「フレームをシンボルに変換」βテスト

2007.11.11 11:07twitter hatena

「フレームをコピーして新規シンボル内にペーストしてそのシンボルを新規レイヤー上の同じ場所に置く」コマンドを作ってみました。つまりフレームごとその場でシンボル化です。レイヤー構造維持です。手動でやるとめんどくさいんですよねあれ。

 Frame2Symbol.zip

↑ダウンロードはこちらから。ある程度様子を見てから…とも思いましたがせっかくなので公開。まだβ版なので予告無く消えたり改変されたりする可能性があります。もちろんそのまま放置する可能性もあります。以下、説明と補足です。

■設定方法
C:\Documents and Settings\ユーザ名\Local Settings\Application Data\Macromedia\Flash 8\ja\Configuration\Commands
あたりに”フレームをシンボルに変換.jsfl”と”フレームをシンボルに変換.xml”を放り込むと Flashの上のメニュー>コマンドに「フレームをシンボルに変換」というメニューが出現。 OSやバージョンが違っても似たようなフォルダがあるので探してみて下さい。

■使い方

 20071111a.jpg

▲選んで

20071111b.jpg 

▲実行して

 

20071111c.jpg

▲できあがり

「フレームのコピー」ができない(=矩形じゃない)フレーム選択してるとエラーでます。
ショートカットctrl+alt+F8あたりオススメ。

8以上で動作確認してますが、MX2004でも動くと思います。MX以前は怪しいかも。但し日本語版限定。適当なつくりなのでバグ報告などお待ちしてます。あとダイアログの無駄が多いのでxmlに慣れてる人、いらっしゃいましたら改良お願いします。

どうせだからソースコードのっけときますね。zipの中のjsflファイルと同じです。ツッコミ、要望歓迎です。タブが全角スペースなのでコピペの際は注意。

// ダイアログを開く
var Frame2SymbolDialog = fl.getDocumentDOM().xmlPanel(fl.configURI+”Commands/フレームをシンボルに変換.xml”);

//OKボタンが押されたら
if (Frame2SymbolDialog.dismiss == “accept”) {

    //ダイアログからシンボル名とシンボルタイプを取得しておく
    var newName = String(Frame2SymbolDialog.symbolName);
    var newMenu = String(Frame2SymbolDialog.symbolMenu);

    //flashのタイムラインとかを扱うため変数に格納
    dom=fl.getDocumentDOM();
    timeline=dom.getTimeline();
    
    //現在選択されているフレーム範囲と、その始めと終わりの位置を取得
    selectedFrames=timeline.getSelectedFrames();
    startPosition = selectedFrames[1];
    endPosition = selectedFrames[2];
    
    //フレームが選択されていたら
    if(selectedFrames[0] >= 0)
    {
        
        //そのフレームをコピー
        timeline.copyFrames();
        
        //新規レイヤー上で選択開始フレームと同じフレーム選択
        timeline.addNewLayer(newName);
        timeline.setSelectedFrames(startPosition,startPosition);
        
        //開始が1フレーム目じゃなかったら、そこを空白キーフレームに変換
        if(startPosition > 0){
            timeline.convertToBlankKeyframes();
        }
        
        //ダイアログの入力に従って新規シンボルの作成
        var lib = fl.getDocumentDOM().library;
        if(newMenu == “graphic”){
            lib.addNewItem(’graphic’, newName);
        }    else if(newMenu == “movie clip”){
            lib.addNewItem(’movie clip’, newName);
        }
                
        //作ったシンボルを選択して
        dom.library.selectItem(newName);
        
        //コピー元がルートだったら、重なるように座標を調整して配置
        //コピー元がシンボル内だったら、そのままの座標でに配置
        if(timeline.name == “シーン 1″) {
            dom.library.addItemToDocument({x:(dom.width/2), y:(dom.height/2)}, newName);
        } else {
            dom.library.addItemToDocument({x:0, y:0}, newName);
        }
        
        // グラフィックで、かつ一回再生フラグが立ってたら一回再生にしておく
        if(newMenu == “graphic” && Frame2SymbolDialog.notLoopFlag == “true”){
            dom.setElementProperty(’loop’, ‘play once’);
        }
        
        // シンボルを同じ場所で編集モード
        dom.enterEditMode(’inPlace’);
        
        // 新規シンボル中で、選択されてたフレームを1フレーム目にペースト    
        fl.getDocumentDOM().getTimeline().setSelectedFrames(0, 0);
        fl.getDocumentDOM().getTimeline().pasteFrames();
        
        // シンボル内編集モードの終了
        fl.getDocumentDOM().exitEditMode();

        //カットフラグが立ってたら、終わりに合わせて空白キーフレームを入れる
        if(Frame2SymbolDialog.cutFlag == “true”){
            timeline.setSelectedFrames(endPosition,endPosition);
            timeline.convertToBlankKeyframes();
        }
    }
}

そう言えば昨日はMattari Factory公開からちょうど2年でした。もしあの頃「フレームのコピー」機能に気付かなかったら、ここまで作品作れなかったと思います。よかったよかった。

3 Comments to “「フレームをシンボルに変換」βテスト”

  1. ゲスト:

    なんだか便利そうですね。使わせていただきます。

  2. yama_ko:

    是非是非どうぞ。バグや要望など報告していただければ、バージョンアップするかもしれません。

  3. Mattari Blog:

    jsflのすすめ…

     以前、「フレームをシンボルに変換」というコマンドを公開したとき思ったこと。何人かからレスポンスがあったのですが…コマンドの便利さを知ってる人が少なすぎる!ほんとに!こ (more…)

Comment