0

我对数组的概念很陌生……所以我需要一些帮助来理解和执行它……

所以我有5个按钮...

周一至周五

现在,当有人按下其中一个按钮时,我希望程序仅跟踪按下的那一天..有人可以逐步解释我该怎么做以及为什么吗?

我正在使用 flash actionscript 3 ..这几乎是我唯一知道该怎么做的事情...我已经尝试了一些 onlint tuts 但它们不是很清楚

var days: Array ["mon", "tues", "wed", "thurs", "fri"];
4

2 回答 2

1

您的数组在您的帖子中创建错误。试试这个:

var days:Array = ["mon", "tues", "wed", "thurs", "fri"];

或者你也可以这样创建它,使用 Array 类的 push() 方法:

var days:Array = new Array();
days.push( 'mon');
days.push( 'tues');
days.push( 'weds');
days.push( 'thurs');
days.push( 'fri');

在您的帖子中跟踪数组的值:

trace( days[0] ); // returns "mon"
trace( days[1] ); // returns "tues"
trace( days[2] ); // returns "wed"
trace( days[3] ); // returns "thurs"
trace( days[4] ); // returns "fri"

数组的内容存储在数组的“索引”中。数组的索引总是从 0 开始。

数组有一个长度。空数组的长度为 0。如果数组中至少包含一项,则长度为 1,并随着您添加更多项而增加。要遍历您的数组以获取值,请执行以下操作:

for(var i:int = 0; i < days.length; i++)
{
    trace( days[i] );
}

数组是任何编程语言的强大且必不可少的部分。您可以从数组中删除项目、添加项目、删除特定索引处的特定项目、按名称删除项目、组合数组等等。您将从查看此链接并研究 Array 类的属性和方法中受益。一旦您掌握了如何操作 Array 的窍门,您将永远不会在没有它们的情况下生存!

有很多方法可以将按钮与特定的数组索引相关联。Dr.Denis McCracleJizz提供的答案是一种方式,但如果您像您所说的那样对 AS3 不熟悉,那么它可能看起来有点让人不知所措,因为它使用了您可能还不熟悉的几个概念。让我看看我是否可以简化一下,尽管这会使代码更冗长:

mondayButton.addEventListener( MouseEvent.CLICK, onClickDayButton );
tuesdayButton.addEventListener( MouseEvent.CLICK, onClickDayButton );

function onClickDayButton( e:MouseEvent ):void
{
    if( e.target.name == 'mondayButton')
    {
        trace( days[0] );
    }
    else if( e.target.name == 'tuesdayButton')
    {
        trace( days [1] );
    }

    // and so on...
}

如果您熟悉对象,则可以为每个按钮创建一个对象,该对象同时包含按钮和按钮 ID,并将它们存储在数组中:

var days:Array = ["mon", "tues", "wed", "thurs", "fri"];

var dayButtonArray:Array = new Array();

var mondayButtonObject:Object = new Object();
mondayButtonObject.button = mondayButton;
mondayButtonObject.id = 0;
dayButtonArray.push( mondayButtonObject );


var tuesdayButtonObject:Object = new Object();
tuesdayButtonObject.button = tuesdayButton;
tuesdayButtonObject.id = 1;
dayButtonArray.push( tuesdayButtonObject );

// and like above, the rest of the days here

// then loop through them and set the mouseEvent

for(var i:int = 0; i < dayButtonArray.length; i++)
{
   dayButtonArray[i].button.addEventListener( MoouseEvent.CLICK, onClickDayButton );
}

// and the function each button calls to

function onClickDayButton( e:MouseEvent ):void
{
    trace( days[ evt.target.id ] );
}

您可以通过完全跳过 days 数组并将与按钮关联的日期添加到 dayButtonArray 而不是 id 来进一步简化上面的对象方法:

var dayButtonArray:Array = new Array();

var mondayButtonObject:Object = new Object();
mondayButtonObject.button = mondayButton;
mondayButtonObject.day = "monday";
dayButtonArray.push( mondayButtonObject );


var tuesdayButtonObject:Object = new Object();
tuesdayButtonObject.button = tuesdayButton;
tuesdayButtonObject.day = "tuesday";
dayButtonArray.push( tuesdayButtonObject );

// and like above, the rest of the days here

// then loop through them and set the mouseEvent

for(var i:int = 0; i < dayButtonArray.length; i++)
{
   dayButtonArray[i].button.addEventListener( MoouseEvent.CLICK, onClickDayButton );
}

// and the function each button calls to

function onClickDayButton( e:MouseEvent ):void
{
    trace( evt.target.day );
}

现在变得像Denis McCracleJizz 博士的回答一样复杂。他的绝对值得一看。

于 2013-01-29T18:19:22.757 回答
1

您的数组是一个项目列表,因此您的数组由一周中的几天组成。您可以使用这样的索引来访问它们。

trace(days[0])
//Outputs: mon


trace(days[3])
//Outputs: thurs

现在对于您的按钮,有两种方法可以做到这一点,一种更复杂的干净,另一种工作得一样好,更简单。

在您的按钮上添加事件侦听器,以便当您单击第一个事件侦听器时,您可以使用 days[0] 跟踪天数数组的第一个元素

真正的方法是这样。

var days: Array ["mon", "tues", "wed", "thurs", "fri"];
var buttons: Array = [ stage.getChildByName("mondayButton"), stage.getChildByName("tuesdayButton") ];
//you need buttons name 'mondayButton' in your stage or this will crash.

//then somewhere in your program you add event listener to all the buttons in your array like so
for(var i:int =0; i < buttons.Length; i++){
     var myButton:Button = buttons[i];
     myButton.AddEventListener(onButtonClicked,Event.Mouse_Click);
}

public onButtonClicked(MouseEvent e):void{
    var myClickedButton:Button = (e.target as Button);
    //e.target is who sends the event, in this case its your buttons
    //next you look what position this button takes in your button array and get get
    //the day in the array from its index
    var index:int = buttons.indexOf(myClickedButton);
    trace(days[index]);
}

请注意,此代码是从内存中编写的,请勿复制粘贴。这是做你想做的事情的更“复杂”的方法。希望这可以帮助 :)

于 2013-01-29T18:30:24.600 回答