簡體   English   中英

當moviclip變為null時,如何使包含動畫片段的數組自動更新?

[英]How to make an array containing a movieclip to update automaticallly , when moviclip goes null?

我正在嘗試以下代碼,以便每當我將movieclip設置為null時,包含其引用的數組也將變為null。

我知道以下代碼無法做到這一點,但是我想以某種方式,如果動畫片段為null,則數組可以提供信息。 有什么好辦法嗎? 有什么建議么 ?

import flash.display.MovieClip;
import flash.events.Event;

var a_arr:Array = new Array(a_Mc,b_Mc); 

trace(a_arr); 

a_Mc= null ;
trace(a_arr);

//output is:
//[object MovieClip],[object MovieClip]

//  ==>>>> but i want something like null,[object MovieClip ]

那是不可能的,因為變量a_MC只是指向對象的指針。 您可以執行以下操作:

var a_arr:Array = [a_Mc, b_Mc];  // use [] instead of new Array()

a_arr[0] = null;

trace(a_arr);

這會將數組指針值更改為null。

您還可以在MovieClip對象上使用自定義屬性,因為它們是動態類(與Sprites不同)

 var a_arr:Array = [a_Mc, b_Mc];
 a_Mc.alive = true;
 b_Mc.alive = true;

 // change the custom property
 a_Mc.alive = false;

 // later detect this and solve
 if (a_arr[0].alive){
     trace("ALIVE!");
 }

我對AS3的了解還很生疏,但是由於該問題的性質對於任何編程實踐都是相當普遍的,因此我仍將嘗試以獨立於語言的方式進行回答。 如果AS3提供特定的機制來實現您想要的功能,我的解決方案可能不是最好的,但是您必須為此聽取其他人的意見。

從通用編程的角度來看,本質的問題是指向同一對象的多個引用彼此不了解。 將其中一個引用分配為null只會重定向該變量的指向,它不會將更改通知給其他引用,並且通常不會更改對象本身的狀態,因此其他引用仍然保持指向該對象的狀態。 您希望分配為null意味着在語義上“釋放該對象並使所有對該對象的引用無效”,但是由於垃圾回收機制,它不會發生。

處理這種情況的正確方法是使用正確的引用-如果您希望對象消失,請將對該對象的所有引用設置為null。 但是,根據您的情況想做的事情(我感覺到您正在嘗試做一些稍微不合常規的事情),這可能是不可能的。 您可能可以將數組用作主列表,並且是指向該對象的指針的唯一位置,並且始終可以通過索引到其他位置的數組來引用該對象。

如果必須按照您所說的去做,我能想到的最直接的解決方案是讓對象本身帶有一個標志(是否已將其標記為釋放),以用作所有引用之間的通信方式。 只要將引用設置為null,就將標志設置為true。 在取消引用任何引用之前,請檢查標志。 我不知道MovieClip中是否有內置屬性可以達到類似目的,但是AS3是動態的,您可以隨時自己添加屬性。 在其他語言中,您可以圍繞它創建一個包裝器來攜帶該標志。 但是要注意:這會彎曲一個基本的編程概念(指向對象的引用不會互相交談),如果不小心,可能會在這里和那里感到驚訝。

您必須獲取集合中項目的索引並將其設置為null,或者如果您只想從集合中刪除它,請使用splice,這是我可以想到的兩個選項:

        a_arr.splice(a_arr.indexOf(a_Mc),1);
        //or
        a_arr[a_arr.indexOf(a_Mc)] = null;

暫無
暫無

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

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