0

私は配列の概念に非常に慣れていないので、それを理解して実行するのに少し助けが必要です....

ボタンが5個あるので…

月曜日金曜日

今、誰かがボタンの 1 つを押すと、プログラムが押された日だけをトレースするようにしたい.. 誰かが何をすべきか、そしてその理由を順を追って説明してくれませんか?

私はフラッシュアクションスクリプト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つのアイテムが含まれている場合、長さは1であり、アイテムを追加すると長くなります。配列をループして値を取得するには、次のようにします。

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

配列は、あらゆるプログラミング言語の強力で不可欠な部分です。配列からアイテムを削除したり、アイテムを追加したり、特定のインデックスで特定のアイテムを削除したり、名前でアイテムを削除したり、配列を組み合わせたりすることができます。このリンクを見て、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配列を完全にスキップし、ボタンに関連付けられた日をidの代わりにdayButtonArrayに追加します。

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 );
}

今では、Dr.DenisMcCracleJizzの答えと同じくらい複雑になっています。彼も一見の価値があります。

于 2013-01-29T18:19:22.757 に答える
1

配列はアイテムのリストであるため、配列は曜日で構成されています。このようなインデックスを使用してアクセスできます。

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


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

ボタンには 2 つの方法があります。より複雑なクリーンな方法と、同様に機能し、よりシンプルな方法です。

ボタンにイベント リスナーを追加して、最初のリスナーをクリックしたときに、days[0] を使用して days 配列の最初の要素をトレースできるようにします。

それを行う本当の方法はこれです。

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 に答える