AS3数组清理长代码?

时间:2015-06-09 18:04:44

标签: actionscript-3

我想要一个更好的方法来写这个可能使用数组,但我没有成功。请参阅下面的代码。我需要添加更多详细信息以发布此内容,但我无法想到更多内容。我想我最终还是需要设置一排btnA同时显示B和C.这也会有所帮助。

我有一个图表,要么打开一个正方形,要么在点击时将其关闭,例如btn3切换checkMark3的可见性,按照书面形式工作,但是当我有50或60个点击代码的选项时,写入和变得不守规矩

btnB1.addEventListener (MouseEvent.CLICK, showB1);
function showB1(event:MouseEvent) {

if (checkMarkB1.alpha == 1){
checkMarkB1.alpha = 0;} else {checkMarkB1.alpha = 1}
}

btnB2.addEventListener (MouseEvent.CLICK, showB2);
function showB2(event:MouseEvent) {

if (checkMarkB2.alpha == 1){
checkMarkB2.alpha = 0;} else {checkMarkB2.alpha = 1}
}

btnB3.addEventListener (MouseEvent.CLICK, showB3);
function showB3(event:MouseEvent) {

if (checkMarkB3.alpha == 1){
checkMarkB3.alpha = 0;} else {checkMarkB3.alpha = 1}
}

btnB4.addEventListener (MouseEvent.CLICK, showB4);
function showB4(event:MouseEvent) {

if (checkMarkB4.alpha == 1){
checkMarkB4.alpha = 0;} else {checkMarkB4.alpha = 1}
}

btnC1.addEventListener (MouseEvent.CLICK, showC1);
function showC1(event:MouseEvent) {

if (checkMarkC1.alpha == 1){
checkMarkC1.alpha = 0;} else {checkMarkC1.alpha = 1}
}

btnC2.addEventListener (MouseEvent.CLICK, showC2);
function showC2(event:MouseEvent) {

if (checkMarkC2.alpha == 1){
checkMarkC2.alpha = 0;} else {checkMarkC2.alpha = 1}
}

btnC3.addEventListener (MouseEvent.CLICK, showC3);
function showC3(event:MouseEvent) {

if (checkMarkC3.alpha == 1){
checkMarkC3.alpha = 0;} else {checkMarkC3.alpha = 1}
}

btnC4.addEventListener (MouseEvent.CLICK, showC4);
function showC4(event:MouseEvent) {

if (checkMarkC4.alpha == 1){
checkMarkC4.alpha = 0;} else {checkMarkC4.alpha = 1}
}

2 个答案:

答案 0 :(得分:1)

将所有按钮添加到数组,将所有checkMark添加到另一个数组。确保数组中项目的顺序意味着按钮数组中每个按钮的位置与checkMarks数组中其关联的checkMark的位置相对应。

//add an event listener to all buttons
for(var i:uint=0; i<buttons.length; i++){ 
  buttons[i].addEventListener(MouseEvent.CLICK, showBox);
}

//showBox function
function showBox(evt:MouseEvent):void{
  for(var a:uint = 0; a<buttons.length; a++){
    if (evt.target == buttons[a]){
      if(checkMark[a].alpha == 1){
        checkMark[a].alpha = 0;
      } else {
        checkMark[a].alpha = 1;
      }
    }
  }
}

这应该意味着你可以随意添加任意数量的按钮和checkMark,只要你按正确的顺序添加它们并且每个按钮都有一个checkMark。

答案 1 :(得分:0)

Trex拥有它我只需要正确使用它,这会动态生成名称并设置复选标记的可见性。因此,对于具有许多复选标记以使用并打开和关闭的网格,这是我最终的结果,

import flash.events.Event;
import flash.events.MouseEvent;
import flash.display.DisplayObject;

// The two parameters below will be used to dynamically generate the clipinstance names
var letters: Array = ['A', 'B', 'C', 'D', 'E'];
var index: int = 9;

for (var i: int = 1; i <= index; i++) {

// we keep a reference of the movie clip because the scope is lost in the anonymous event listener
var mc = this;

// instead of setting checkMarkE9.visible = false; we do all of this dynamically
trace('Updating visibility of : ' + 'checkMark' + letters[1] + i);
this['checkMark' + letters[1] + i].visible = false;
trace('Updating visibility of : ' + 'checkMark' + letters[2] + i);
this['checkMark' + letters[2] + i].visible = false;
trace('Updating visibility of : ' + 'checkMark' + letters[3] + i);
this['checkMark' + letters[3] + i].visible = false;
trace('Updating visibility of : ' + 'checkMark' + letters[4] + i);
this['checkMark' + letters[4] + i].visible = false;

// dynamically adding event listeners
this['btn' + letters[0] + i].addEventListener(MouseEvent.CLICK, function (e: MouseEvent) {
    var btnIndex: String = getLastLetter(e.currentTarget.name);
    trace('Updating visibility of : ' + 'checkMark' + letters[1] + btnIndex);
    trace('Updating visibility of : ' + 'checkMark' + letters[2] + btnIndex);
    trace('Updating visibility of : ' + 'checkMark' + letters[3] + btnIndex);
    trace('Updating visibility of : ' + 'checkMark' + letters[4] + btnIndex);
    mc['checkMark' + letters[1] + btnIndex].visible = true;
    mc['checkMark' + letters[2] + btnIndex].visible = true;
    mc['checkMark' + letters[3] + btnIndex].visible = true;
    mc['checkMark' + letters[4] + btnIndex].visible = true;
});

// dynamically add event listeners for cells
this['btn' + letters[1] + i].addEventListener(MouseEvent.CLICK, function (e: MouseEvent) {
    switchVisibility(mc['checkMark' + letters[1] + getLastLetter(e.currentTarget.name)]);
});
this['btn' + letters[2] + i].addEventListener(MouseEvent.CLICK, function (e: MouseEvent) {
    switchVisibility(mc['checkMark' + letters[2] + getLastLetter(e.currentTarget.name)]);
});
this['btn' + letters[3] + i].addEventListener(MouseEvent.CLICK, function (e: MouseEvent) {
    switchVisibility(mc['checkMark' + letters[3] + getLastLetter(e.currentTarget.name)]);
});
this['btn' + letters[4] + i].addEventListener(MouseEvent.CLICK, function (e: MouseEvent) {
    switchVisibility(mc['checkMark' + letters[4] + getLastLetter(e.currentTarget.name)]);
});
}

// switches a display item visiblity
function switchVisibility(display: DisplayObject): void {
display.visible = !display.visible;
}

// get the last letter of a string
function getLastLetter(str: String): String {
return str.substr(str.length - 1, str.length);
}