2010-12-11 31 views
0

AS3/Flash CS4の使用ランタイムでの呼び出し関数swf

これを読んでいる皆様に感謝します。私の問題は、具体的に私はそれをコントロールとユーザーインターフェイスを設計しています。 5ボタンは左回転、右回転、ズームイン、ズームアウト、および自動回転を行います。インターフェイス自体は正常に動作し、ボタンのクリックをトレースしたり、自動回転ボタンなどを切り替えることができます。

私のプログラムはxmlファイルを読み込みます。いくつかの画像を読み込み、配列に各画像のリンクを埋め込み、画像がクリックされると、ローダーはURLからswfを読み込んで画面に表示します。問題ない。

私はもともと、runtime_loaded.flaライブラリのズームコントロールユーザーインターフェイスと、同じリンクドキュメントクラスのマウスリスナーを持っていました。同じコード内にある場合、インターフェイスはruntime_loaded.swf内のmovieClipと連動します。

良いコーディングを実践するために、私はruntime_loaded.flaからUIを削除し、それをMain.flaに追加することにしました。これは不可欠です。なぜなら、メインはリンクする独自のswfを持つ画像/オブジェクトの可能な100を処理するためです。インターフェイスの外観を変更しても同じ機能を呼び出すことにした場合、基本的に、すべての単一のオブジェクトに対して行う必要があるruntime_loaded.flaの代わりに、main.flaに必要な数だけ入れることができます。

ファイル構造

Main.fla <- interface in the library. 5 mouse event functions. Inside each function calls 
      a property of loaded_swf (loaded_swf.rotateLeft, loaded_swf.rotateRight) etc... 
Runtime_loaded.fla <- links specificObject.as in properties (AS3/CS4) 
specificObject.as <- has 5 public static functions{ rotateRight, rotateLeft, zoomIn, zoomOut, toggleAutoRotate } 

CODE

//showFlashBox 
function showFlashBox(temp_string:String):void { 
if(!flash_box_on){ 
var temp_top:uint = numChildren; 
addChildAt(FlashBoxContainer,temp_top); 
newXButton.addEventListener(MouseEvent.CLICK, flashBoxXClick); 

1. addChild(new_loader); 
2. var url:URLRequest = new URLRequest(temp_string); 
new_loader.x = 0; 
new_loader.y = 0; 
new_loader.load(url); 
3. new_loader.contentLoaderInfo.addEventListener(Event.COMPLETE, gotSwf); 

flash_box_on = true; 
} 
} 

function gotSwf(e:Event){ 
4. //loaded_swf = e.target.content; 
    trace(e.target.content); 
5. new_zoom_controls.button_minus.addEventListener(MouseEvent.CLICK, zoomOutFunction); 
    new_zoom_controls.button_plus.addEventListener(MouseEvent.CLICK, zoomInFunction); 
    new_zoom_controls.button_left.addEventListener(MouseEvent.CLICK, rotateLeftFunction); 
    new_zoom_controls.button_right.addEventListener(MouseEvent.CLICK, rotateRightFunction); 
    new_zoom_controls.button_rotate.addEventListener(MouseEvent.CLICK, toggleRotateFunction); 
    function rotateRightFunction(e:MouseEvent){ 
6. //loaded_swf.rotateRight(); 
    } 
    function rotateLeftFunction(e:MouseEvent){ 
    //loaded_swf.rotateLeft(); 
    } 
    function zoomInFunction(e:MouseEvent){ 
    //loaded_swf.zoomIn(); 
    } 
    function zoomOutFunction(e:MouseEvent){ 
    //loaded_swf.zoomOut(); 
    } 
    function toggleRotateFunction(e:MouseEvent){ 
    //loaded_swf.toggleAutoRotate(); 
    if(new_zoom_controls.button_rotate.currentFrame == 1){ 
    new_zoom_controls.button_rotate.gotoAndStop(2); 
    } 
    else new_zoom_controls.button_rotate.gotoAndStop(1); 
    } 
    new_loader.contentLoaderInfo.removeEventListener(Event.COMPLETE, gotSwf); 
} 

あなたは手順1-6に従った場合は、.swfファイルをロードする私の手順を参照してくださいマウスイベントリスナーとハンドラをクリックしてください次に、var loaded_swf:Object;のオブジェクト呼び出し。

私がmain.flaを実行してボタンをクリックしようとすると、これは起こる。

ReferenceError: Error #1069: Property rotateRight not found on ThreedsKU39web and there is no default value. at MethodInfo-82() ReferenceError: Error #1069: Property rotateLeft not found on ThreedsKU39web and there is no default value. at MethodInfo-83()

答えて

0

私はコードをコピーしてコピーしたので、私はこれを提出し終わる前に、本当に答えにつまずいた。しかし、この最後の夜に数時間の不満を抱いた後、次の人が同じ死を迎えないように私はそれを掲示します。

答えは、ランタイムが読み込まれたswfクラスの関数です。

public static function rotateRight():void 
{ 
    object.yaw(-animation_turning_speed); 
} 

公共の静的ではなく公共の機能である必要があることが判明しました。 ファイルが正常に動作した後は主にヒューマンエラーです。コードを他のすべてのオブジェクトファイルにコピーしようとしましたが、何とか静的にそこに戻ってきてしまいました。だから将来、外部swfでロードするときに参照するために、パブリック関数はそのトリックを行う必要があります。 *私の変数の多くは、静的変数として宣言されるまでエラーを返すことに注意してください。