2013-10-19 19 views
0

假設我們有4個SimpleButton Class實例。 SimpleButton類具有變量b:Boolean。當你點擊按鈕實例時,它的變量b:Boolean變爲true,其他所有按鈕的b:Boolean變量都爲false。如何實現這一目標?任何建議感激。在AS3中的類實例之間切換?

+1

是不是RadioButton? – ton

回答

0

每當一個實例是創建者時,其構造函數就會將自己「註冊」到一個類靜態數組中。通過將實例推入這個靜態數組變量,變量會跟蹤所有創建的實例。這些實例將具有變量b的公共setter函數。如果傳入的布爾值爲true,則將其private b屬性設置爲true,然後循環遍歷靜態數組中註冊的所有其他實例,並將其b設置函數設置爲false。如果傳入的b布爾值爲false,那麼它只是將其b設置爲false,並可能更改其顯示(無論您想要什麼)。這將實現你想要的功能,以便無論何時將實例的b setter函數設置爲true,它都會自動將所有其他設置更改爲false。你可以適應這個做不同的事情。例如:它們最多可以有2個可以具有b值的實例。在你的情況下,只要讓偵聽器函數調用b setter函數,或者其他什麼。

下面是我寫的,以顯示我的解釋,按照批註,以瞭解代碼:

package{ 
public class SimpleButton extends Sprite { // your class 

    private static var instances:Array = new Array(); // your static class-wide instance tracker 
    private var x_b:Boolean; // your private var of b (I am using OOP techniques here 

    public function SimpleButton() { 
     instances.push(this); // "register" this instance into the array 
    } 
    // ... (rest of class) 
    public function set b(newB:Boolean):void { // setter function for b 
     this.x_b = newB; //set its value 
     if (this.x_b) { // if its true 
      for (var i in instances) { //loop through all the other "registerd" instances 
       if(instances[i]!=this){ //if its not this instance 
        SimpleButton(instances[i]).b = false; // then set its b value to false 
       } 
      } 
     }else { // if its being set to false (either manualy from outside, or from the loop of another instance 
      // If you want to do something when it is false 
     } 
    } 
    public function get b():Boolean { //just a getter to match our setter 
     return this.x_b; 
    } 
} 
} 

如果我已經回答了找你的問題那麼大!但如果沒有,請回複評論並告訴我。謝謝。

編輯

會有隻有一個SimpleButton的所有實例數組。這對於班級來說是靜態的。它不是提及記憶的實例,而是實例本身。我的意思是如果你已經創建了50個SimpleButtons實例,那麼它們就是50個不同的對象來跟蹤它們。即使你創建1000個變量都指向相同的實例,但對計算機來說,這些變量只是對實例的引用,而不是對實例本身的引用,因此內存中仍然只有50個對象。這裏也是如此。該數組只是一個數組,其中包含許多對各種SimpleButton的引用。如果你刪除了一個類的實例的所有引用,那麼這個實例仍然是他們的計算機 - 你只是無法再訪問它,它只會在Flash播放器的「垃圾收集」運行時被刪除,並刪除所有對象沒有提及它們。這個「集合」是刪除Flash Player中的東西的唯一方法,使得等於null的變量不會刪除它,它只會刪除對它的引用。這種方式在處理來自課堂外的SimpleButtons時非常優雅和容易。你所要做的就是創建一個,它會自動記錄自己 - 準備好在另一個變化時更改它的變量。

如果您仍然無法理解對象的引用和內存中對象的區別,請再次迴應,我會找到一個很好的鏈接向您發送有關它的信息。

+0

謝謝你透露一些隱藏的地方,Xiler。 但是,對於pc內存來說,將main變量放在實例上會更好嗎?請糾正我,如果我看到那部分錯誤的方式: 初始化SimpleButton的每個實例,我們最終會得到儘可能多的instace:與我們創建的許多SimpleButton instaces一樣在內存中創建數組。 –

+0

看看我的編輯到我的答案,我試圖解釋,我們不會創建更多的SimpleButtons實例,只會更多地引用它們。 – Xiler