2013-11-25 122 views
0

我試圖做一個腳本,將一個事件監聽器添加到數組中的每個對象,並在該事件監聽器觸發我希望它添加與該密鑰相關聯的字母以便輸入到標籤。但是當我運行這個程序時什麼都沒發生?我可以添加一些虛擬代碼,如lblInput.text =「cats」;它運行良好,所以程序肯定會運行腳本。大量添加按鈕單擊事件

編輯︰事實證明,按鈕點擊實際上並沒有工作,爲什麼這我看不出有什麼問題,並沒有錯誤?

這裏是我的代碼:

package { 
    import flash.display.MovieClip; 
    import flash.events.MouseEvent; 

    public class Main extends MovieClip { 

     public function Main() { 
      this.addEventListener('enterFrame',function() { 
       var buttons:Array = new Array(["Q",btnQ], 
               ["W",btnW], 
               ["E",btnE], 
               ["R",btnR], 
               ["T",btnT], 
               ["U",btnY], 
               ["U",btnU], 
               ["I",btnI], 
               ["O",btnO], 
               ["P",btnP], 
               ["A",btnA], 
               ["S",btnS], 
               ["D",btnD], 
               ["F",btnF], 
               ["G",btnG], 
               ["H",btnH], 
               ["J",btnJ], 
               ["K",btnK], 
               ["L",btnL], 
               ["Z",btnZ], 
               ["X",btnX], 
               ["C",btnC], 
               ["V",btnV], 
               ["B",btnB], 
               ["N",btnN], 
               ["M",btnM]); 

       for(var i:int = 0; i < buttons.length; i++) 
       { 
        buttons[i][1].addEventListener(MouseEvent.CLICK,function(){ 

         if(lblInput.text == "Type something to begin..") 
          lblInput.text = buttons[i][0]; 
         else 
          lblInput.appendText(buttons[i][0]); 

        }); 
       } 
      }); 
     } 

    } 
} 
+0

裏面的函數'i'是不是您所期望的價值所在成爲。你需要在你的scropt中添加一些你可以調用的按鈕的引用。 – putvande

+0

這種語言足夠像JavaScript,我可以通過做object.variable添加一個變量到一個對象,所以我可以做按鈕[i] [1] .letter = buttons [i] [0] – user1763295

+0

按鈕的類型是什麼類型?影片剪輯?這樣你不能只是像我想的那樣添加一個變量。 – putvande

回答

0

由於putvande,發表了意見i變量的值是不是您所期望的事件處理程序中的內容。所以最簡單的做法是讓變量成爲按鈕的屬性,然後您可以從處理程序中的事件對象中檢索該屬性。你說你的按鈕是影片剪輯,所以這將工作得很好,因爲它們是對象的擴展。

但是,當你想要一個字符範圍時,你可以不用數組,而只是指定一個範圍。特別是因爲你給所有的按鈕一個通用名稱加上所需的字符。

在你Main功能:

// 65 = capital A in Unicode 
// 90 = capital Z in Unicode 
var characterRange:Object = {begin:65, end:90}; 

var character:String; 
var button:MovieClip; 

for (var i:int = 0; i < characterRange.end-characterRange.begin; ++i) { 
    // use String.fromCharCode to get "A" from 65 etc. 
    character = String.fromCharCode(i + characterRange.begin); 
    // get the button based on the character 
    button = MovieClip(this.getChildByName("btn"+character)); 
    // add the character as a property of the button 
    button.character = character; 
    // attach an click handler 
    button.addEventListener(MouseEvent.CLICK, buttonClick); 
} 

由於事件處理函數:

function buttonClick(e:MouseEvent):void { 
    // get the character/letter from the currently clicked button 
    var letter:String = MovieClip(e.currentTarget).character; 
    if (lblInput.text == "Type something to begin..") { 
     lblInput.text = letter; 
    } else { 
     lblInput.appendText(letter); 
    } 
} 

字符代碼示例:http://help.adobe.com/en_US/as3/dev/WS5b3ccc516d4fbf351e63e3d118a9b90204-7efe.html