2012-07-02 24 views
0

我有一大堆按鈕,都需要同時具有鼠標懸停效果和切換效果(點擊),這會改變色調。我已經爲每個色調變化制定了功能,並且這些部分工作得很好。可悲的是我無法弄清楚如何讓我的切換功能工作。Flash as3 - 在點擊事件中從實例創建一個變量

以下是我的切換按鈕代碼。它工作正常,除了我的變量是全局的而不是具體的實例。因此,只有當我只有一個按鈕時它纔有效。我怎樣才能改變它使用一個焦點按鈕的變量?

在此先感謝!

var primary = false; 

function clickOn(e:MouseEvent):void{ 
    if (primary == false)  { 
      greenHue(e.target); 
      primary = true; 
    } else { 
      noHue(e.target); 
      primary = false; 
    } 
} 

回答

0

這就是我所做的。

var primary:Array = new Array; 



    if (primary[e.target.name] == true || secondary[e.target.name] == true) { 
     noHue(e.target); 
     primary[e.target.name] = false; 

    } else { 

      greenHue(e.target); 
      primary[e.target.name] = true; 

     } 
    } 

} 
0

這取決於您如何爲您的應用程序選擇設計,真的。我的意思是,如果您的按鈕數量有限,並且您確切知道它們是什麼,並且它們保持不變(例如,button1,button2,button3或hue,飽和度和亮度),則可以有三個切換變量。所以,你想做的事:

var primaryH = false; 
var primaryS = false; 
var primaryL = false; 

然後,這三個事件的聲明:

buttonH.addEventListener(MouseEvent.CLICK, clickOnH); 
buttonS.addEventListener(MouseEvent.CLICK, clickOnS); 
buttonL.addEventListener(MouseEvent.CLICK, clickOnL); 

和三個函數聲明:

function clickOnH(e:MouseEvent):void{ 
    if (primaryH == false)  { 
      greenHue(e.target); 
      primaryH = true; 
    } else { 
      noHue(e.target); 
      primaryH = false; 
    } 
} 

...

否則,最好的辦法是在按鈕對象中創建切換變量和函數。這將是「更多OOP」,並允許您創建儘可能多的按鈕,而無需一遍又一遍地寫同樣的東西。

2

要做的最好的事情是擴展你用於按鈕的類,並將函數添加到它,所以你從它派生出來的所有按鈕將具有你想要的符號行爲。

class ColoredButton extends Button { 
    var primary = false; 

    public function ColoredButton() { 
     this.addEventListener(MouseEvent.CLICK, clickOn); 
    } 

    private function clickOn(e:MouseEvent):void { 
     if (primary == false)  { 
      greenHue(e.target); 
      primary = true; 
     } else { 
      noHue(e.target); 
      primary = false; 
     } 
    } 

    ... 
    } 
+0

這似乎是一個很好的解決方案,但事情是我需要將它存儲爲按鈕,因爲當鼠標離開按鈕時,它需要保留它的正確顏色。 我希望我可以從這樣的實例的名稱創建一個變量。 var e.target.name +「primary」= true; – Resin01

+0

這樣它會做你想做的。你有沒有試過我的代碼? – rcdmk

+0

您必須將您的懸停事件移至擴展的代碼中,位於click事件的下方,它將單獨運行每個實例,而不會干擾其他事件。請在問題中發佈您的更新代碼。 – rcdmk