2011-12-17 7 views
0

FLAのタイムラインアニメーションを(おそらくXMLを介して)AS3コードに変換する必要があります。問題は、文字通り数百のレイヤーと数千のフレームがあることです。JSFLエクスポートの「ガイド」アニメーション

私はJSFLの構造を理解していますが、タイムライン→レイヤー→フレームにループすることで、「ガイド」アニメーションを見つけることができません。 curFrame.isMotionObject()の使用は常にfalseです。ここで

は私がしようとしているもののサンプルです:

/* Gets all motions in all motion objects and exports to a file. */ 
fl.outputPanel.clear(); 

//store max layers/frames 
var fcnt = fl.getDocumentDOM().getTimeline().frameCount; 
var lcnt = fl.getDocumentDOM().getTimeline().layerCount; 
fl.trace("fl.getDocumentDOM().getTimeline().frameCount = " + fcnt); 
fl.trace("fl.getDocumentDOM().getTimeline().layerCount = " + lcnt); 

//store pre-run layers/frames: 
var origFr = fl.getDocumentDOM().getTimeline().currentFrame; 
var origLyr = fl.getDocumentDOM().getTimeline().currentLayer; 
fl.trace("fl.getDocumentDOM().getTimeline().currentFrame = " + origFr); 
fl.trace("fl.getDocumentDOM().getTimeline().currentLayer = " + origLyr); 

var totout = 0; 
var curFrm; 
var curl = origLyr; 
var curf = origFr; 
var outstr = ""; 

for (curf = 0; curf < fcnt; curf++) 
{ 
    // have the IDE go into the current frame: 
    fl.getDocumentDOM().getTimeline().currentFrame = curf; 

    // removed to test one layer only 
    //for (curl = 0; curl < lcnt; curl = lcnt) // curl++) // curl = lcnt) 
    //{ 

     // have the IDE go into the current layer: 
     fl.getDocumentDOM().getTimeline().currentLayer = curl; 

     if(curf > fl.getDocumentDOM().getTimeline().layers[curl].frames.length) 
      break; 

     curFrm = fl.getDocumentDOM().getTimeline().layers[curl].frames[curf]; 

     //this is always false. . . why? 
     if (
      curFrm.isMotionObject() 
      //&& curFrm.hasMotionPath() 
     ){ 
      totout++; 
      //curFrm.selectMotionPath(true); 
     } 
     else{ 
      outstr += "There is no motion path\n"; 
     } 

     //for testing: 
     break; 
    //} 
    //for testing: 
    //break; 
} 

//reset layers/frames back to pre-run status: 
fl.getDocumentDOM().getTimeline().currentFrame = origFr; 
fl.getDocumentDOM().getTimeline().currentLayer = origLyr; 

fl.trace(outstr); 
fl.trace("totout = " + totout); 
+0

モーションパスのトゥイーンのみをエクスポートする必要がありますか?また、デフォルトのモーションXMLにエクスポートしようとしましたか? –

+0

もう少し説明できますか? 「デフォルト」モーションパスの意味を理解していない。 。 。私はドキュメントで何かを逃したのですか?私は彼らがすべて動きの道だと思う。彼らが何か他のものだったらそれは問題だろうか? – iND

+0

よく、モーションパスを適用できるClassic Tweenがありますか、そうでない場合は常にモーションパスを持つモーショントゥイーンがあります。コマンド>モーションXMLをエクスポートすると、XML形式は2種類のトゥイーンで異なると思います(私が覚えている限り) –

答えて

1

あなたが経由してあなたがJSFLから呼び出すことができますエクスポートモーションXMLコマンドを使用することができます限り

fl.runScript(fl.configURI + 'Javascript/MotionXML.jsfl', 'exportMotionXML'); 

私はClassic Tween XML形式がMotion Tween XML形式とは異なることを覚えています。モーションXMLの機能は非常に便利で、未使用です。 copyMotionXMLも使用でき、JSエンジンでサポートされているようにJSFLのXMLを処理できますE4X

あなたはfl.motionパッケージからアニメーター/ AnimatorFactoryクラスに満足している場合あるいは、あなたがこれを行うことができます:

fl.runScript(fl.configURI + 'Javascript/MotionXML.jsfl', 'copyMotionAsAS3'); 

デフォルトのトゥイーンクラスは​​のように、他のトゥイーンエンジンよりも遅いことに注意してください、また、トゥイーンが終了したときに動作するようにトゥイーンの間タイマーを使用する必要があるため、トゥイーンされたオブジェクトへのactionscriptアクセスを再度取得できます。

私はMotionXMLを使用しましたが、我々はいくつかの美しい上でいくつかの双方向性を一致させる必要があったとして、私たちがやったwork for the AudiA8 siteのビットがThe Millからレンダリングし、私はこの機能を使用してFlashのタイムラインにimporter for Mocha Keyframesを書いています。

+0

答えをありがとう。これは私が必要とするものにつながっています:「ガイド」や他のアニメーションにアクセスするためのJSFLコード。 ** MotionXML.jsfl **ファイルには、MotionXMLExporter.prototype.getXMLという関数があります。これは、JSFLからモーションXMLを書き出すためのFlashの主要なFLA処理コードです。これは、さまざまなアニメーションタイプを扱うので、かなり複雑です。このコードを書き直す必要はありません。ただし、FLAをドリルダウンしてデータを検索するための多くのソリューションを提供しています。 – iND

+0

助けてくれてうれしい!レイヤーの 'layerType'プロパティをチェックしてガイドレイヤーか、タイムラインの' getGuidelines() '関数を介してJSFLでアクセス可能な 'ガイドライン'(表示>ガイド>ガイドを表示)にアクセスするかどうかを調べることができます。 [JSFLドキュメント](http://www.google.com/url?sa=t&rct=j&q=flash_cs5_extending.pdf&source=web&cd=1&ved=0CCEQFjAA&url=http%3A%2F%2Fhelp.adobe.com%2Fen_US%詳細については、2Fflash%2Fcs%2Fextend%2Fflash_cs5_extending.pdf&ei = YW3uTtvPIs3x8QPIq6WCCg&usg = AFQjCNHSRUtg54hM5TlKmDbqNiuFwU_S_A&sig2 = oJidGJuJFNvcxhO_QFnJcw)(pdfリンク)を参照してください。 –

関連する問題