簡體   English   中英

加載和使用SWF文件

[英]Loading and using SWF files

我是AS3的新手,我正在嘗試了解外部加載的SWF如何在AS3中運行。 從Flash 4/5開始,通常在Flash Web項目中有一個主SWF文件,然后將其他SWF文件加載到其中,通常用於網站或Web項目的各個“部分”。 在主文件中,我們有動畫容器動畫片段(其中加載了外部部分/ SWF文件)的動畫,並在部分完成加載並顯示加載的內容時播放動畫和過渡。

在AS3中,我使用Loader類來加載和顯示外部文件, 我的主要問題是與加載的內容進行通信,調用它的函數或從中調用根函數。

在AS2中,我們可以使用someMovieClip.loadMovie(“ExternalContent.swf”),ExternalContent文件將加載到someMovieClip中。 您可以使用someMovieClip.function();訪問“External.swf”主時間軸上的函數。 在“ExternalContent.swf”中,我們可以使用_root.function()來訪問正在加載的ExternalContent主文件中的函數。 在AS3中這樣做似乎很奇怪和神經質,我覺得我在這里缺少一些相當基本的東西。

//Loading in ExternalContent.swf into the sprite
//ExternalContent has a movieclip called "boxes" on it's main timeline
//boxes has a boxesPrompt() function in it's timeline.

var sprite:Sprite = new Sprite();
addChild(sprite);

var loader:Loader = new Loader();
loader.load(new URLRequest("ExternalContent.swf"));

loader.contentLoaderInfo.addEventListener(Event.COMPLETE,onLoaded);

function onLoaded(event:Event):void
{
    sprite.addChild(event.target.content);

        sprite.boxes.boxesPrompt();
        //Flash gives the following compiler error at the above
        //Scene 1, Layer 'Layer 1', Frame 1, Line 21 1119: Access of possibly undefined property boxes through a reference with static type flash.display:Sprite.

        //But when I comment out sprite.boxes.boxesPrompt() and use this, it works:
        event.target.content.boxes.boxesPrompt()
}

“ExternalContent.swf”中的boxesPrompt()函數只跟蹤它的父,祖父和偉大的祖父 - 跟蹤(this.parent.parent.parent);. 當我使用“event.target.content.boxes.boxesPrompt()”在onLoaded事件處理程序中調用該函數時,它顯示Boxes對象(位於External.SWF的主時間軸上)具有父動畫片段,一個祖父精靈,一個偉大的祖父對象mainTimeline。

我認為將加載的內容重新綁定到精靈中將允許我像loadMovie()一樣容易訪問加載的內容 - 訪問加載的內容,就像它直接存在於加載的剪輯中一樣。但是這不是工作。

所以重新說一下,我的問題是:

  • 如何從主“加載器”SWF文件與加載的內容進行通信。我不想使用event.target.content。{etc}進行通信,因為那時我只能處理加載的內容在Loader的event.complete事件處理程序中。

  • 我如何“重新加載”加載的內容,因此我可以將它放在加載程序文件的主時間軸上的某個movieclip / sprite中,而不是使用一些非常冗長的方式。

  • 如何從加載的內容內部與main / loader文件進行通信。 以前,我們使用_root.functionName()來做一些事情,比如播放從當前外部加載的“部分”轉換到另一部分的動畫。 我怎么去做那件事。

AS2和AS3有很大的不同。 但是你必須承認AS3已經發展成為對AS2的改進。 因此,您所做的任何轉變也都會變得更好。

例如:AS2中的_root允許在任何地方訪問和更改全局對象和變量,這是一種不好的做法,導致項目中不可維護的代碼。

話雖如此,讓我來解答你的問題:

  • 如果您能夠使用event.target.content訪問加載的內容...您應該將其保存在一個類似的變量中,並可以在類的其他地方訪問它。

    您必須明白,只有在加載后才能訪問內容,因此必須等待它完成並且event.complete處理程序可能是您最好的選擇。

  • 我懷疑你是否可以從加載的swf中選擇隨機內容並將其重新加入到當前的swf中。如上所述,你可能沒有一個漫長的復雜方式。

  • 可以通過多種方式訪問​​父級。 您可以使用.parent或實際調用父swf中的函數,將其引用傳遞給子項。


var sprite;
addChild(sprite);

var loader:Loader = new Loader();
loader.load(new URLRequest("ExternalContent.swf"));

loader.contentLoaderInfo.addEventListener(Event.COMPLETE,onLoaded);

function onLoaded(event:Event):void
{
        sprite = event.target.content;

        //This should work
        sprite.boxes.boxesPrompt();
}

有關詳細信息,請參閱此示例

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM