簡體   English   中英

使用MovieClip作為AS3中的參數

[英]Using a MovieClip as a parameter in AS3

我在將MovieClips附加到類的不同實例時遇到問題。 老實說,我是ActionScript 3的新手,所以這個問題可能有點笨拙。 我進行了研究,但是沒有找到我期望的答案。

function AddNewElement(clip:MovieClip, array:Array, name:String, firstValue:int, secondValue:int):Element

您可能會猜到,這是我用來動態創建類實例並將其添加到數組中的功能。 我在第一個參數上遇到了問題。 如何將MovieClip從我的媒體庫傳遞到此函數?

我看到了很多類似問題的答案,指出每個MovieClip都應該是一個單獨的類,但是由於我有40個MC,我想將它們全部用於幾乎相同的事情,所以我覺得它會殺死人課程的目的,真的。

我應該如何處理?

首先,在導出時需要從鏈接部分中為庫符號提供唯一的類名,或者在以后從“屬性”選項中導出時。 當您在此處選中“導出為ActionScript”選項時,將看到此輸入。 然后,您將需要實例化庫符號(使用new關鍵字)並將其強制轉換為MovieClip以傳遞給此函數。 所以

  • AddNewElement(new LibrarySymbolClass() as MovieClip,[],'etc',0,0);
  • AddNewElement(MovieClip(new LibrarySymbolClass()),[],'etc',0,0);

都會讓你做自己想做的事。

但是,由於並非所有庫元素都需要擴展MovieClip類,因此最好選擇DisplayObject而不是MovieClip 因此,您的函數的更好版本是

import flash.display.DisplayObject;

function AddNewElement(clip:DisplayObject, ...):* {
    // some code here
    return clip;
}
var clip:LibrarySymbolClass = AddNewElement(new LibrarySymbolClass() as DisplayObject,[],'etc',0,0);
trace(clip);

在返回值類型中使用星號將使其返回具有正確類型的對象(在此示例中為[object LibrarySymbolClass] )。

在Flash中創建MovieClip時,它會為您提供某些選項,其中一個選項是讓Flash為該MovieClip創建類。 話雖這么說,如果您將該選項應用於所有40個影片剪輯,那么您將創建類似於主影片剪輯類的內容,並讓每個影片剪輯類擴展主影片剪輯類。 唯一的事情是,您將必須為40個影片剪輯中的每個剪輯創建一個.as文件,並將extends MasterMovieClip添加到類聲明中。 例如:

public class MasterMovieClip extends MovieClip {
    // All of the variables and methods pertaining to each movie clip go here
}


然后每個單獨的影片剪輯都類似於此類。

public class IndividualMovieClip_1 extends MasterMovieClip {
    // Just include a constructor, even though you don't have to
}


現在,只要所述方法和變量是公共的,而不是私有的,則所有單個影片剪輯都將具有相同的方法和變量。

使用此方法,您將必須創建所有40個類,但是在Flash中,當創建一個新的影片剪輯時可以使用一種方法來設置影片剪輯擴展的類,然后您不必創建40個不同的類。



更新:

我重新閱讀了您的問題,並想到了其他內容,我在第一句話中談到了該選項,關於Flash的選項提供了創建類的選項。 好吧,如果未提供類,則Flash將在運行時動態創建一個類。 我認為,當它動態創建一個類時,它不會保持與庫影片剪輯相同的名稱,因此,當您嘗試將影片剪輯的靜態名稱傳遞給函數時,它不知道您在說什么並拋出運行時錯誤。

為什么不在運行時創建影片剪輯。 在運行時執行上下文中創建它們,然后在調用該類時實例化它們。 如果每個MC都不同,則可以為每個MC創建一個MC類,給它們命名以一個升序結尾的名稱,然后使用for循環將它們放入數組中,如下所示:

var mc_num:int = 40 // the number of MovieClips
var arr:Array = new Array();

for (var i:int=0; i < mc_num; i++) {
    arr.push("myMovieClip" + String(i)); 
}

..然后使用數組索引對其進行引用。 我跳過了將圖像與MovieClips關聯的部分。

之后,按如下所示調用所需的MC:

var mc_1:MovieClip = arr[1] as MovieClip;
stage.addChild(mc_1);

暫無
暫無

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

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