我对数组的概念很陌生……所以我需要一些帮助来理解和执行它……
所以我有5个按钮...
周一至周五
现在,当有人按下其中一个按钮时,我希望程序仅跟踪按下的那一天..有人可以逐步解释我该怎么做以及为什么吗?
我正在使用 flash actionscript 3 ..这几乎是我唯一知道该怎么做的事情...我已经尝试了一些 onlint tuts 但它们不是很清楚
var days: Array ["mon", "tues", "wed", "thurs", "fri"];
我对数组的概念很陌生……所以我需要一些帮助来理解和执行它……
所以我有5个按钮...
周一至周五
现在,当有人按下其中一个按钮时,我希望程序仅跟踪按下的那一天..有人可以逐步解释我该怎么做以及为什么吗?
我正在使用 flash actionscript 3 ..这几乎是我唯一知道该怎么做的事情...我已经尝试了一些 onlint tuts 但它们不是很清楚
var days: Array ["mon", "tues", "wed", "thurs", "fri"];
您的数组在您的帖子中创建错误。试试这个:
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 博士的回答一样复杂。他的绝对值得一看。
您的数组是一个项目列表,因此您的数组由一周中的几天组成。您可以使用这样的索引来访问它们。
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]);
}
请注意,此代码是从内存中编写的,请勿复制粘贴。这是做你想做的事情的更“复杂”的方法。希望这可以帮助 :)