0

コードが 2 番目のスニペットのように見えるように、変数 "userSave" を追加するにはどうすればよいですか?

var userSave:Number = 1;

user_presets["u"+userSave].addEventListener(MouseEvent.MOUSE_DOWN, ["u"+userSave]);
function ["u"+userSave](event:MouseEvent):void
{

}


// It needs to look like this:
user_presets.u1.addEventListener(MouseEvent.MOUSE_DOWN, u1);
function u1(event:MouseEvent):void
{

}

編集: OK、私が達成しようとしていることを正確に説明しましょう。むちゃくちゃで申し訳ありません。自分が何をしようとしているのかを理解するのに時間がかかりました。

以下のコードを実行したいボタンが36個あります。以下のコードは最初のボタンです。次のボタンは、u2、u3、u4 などである必要があります。したがって、次のコードの u1 のすべてのインスタンスは、各ボタンに応じて変更する必要があります。このコードを 36 回複製せずにこれを行うにはどうすればよいですか? コードはタイムラインにあります。

f_presets.user_presets.u1.addEventListener(MouseEvent.MOUSE_DOWN, u1);

function u1(event:MouseEvent):void
{

if (saveFlag == "play")
{

userSave = "u1";
myuserSave();


}
else
{
    userSave = "u1";
myuserPlay();

}

}

最終編集 すべての助けをありがとう。これが私のために働いたものです。

for (var i:Number=1; i<37; i++)
{
var userSaver = "u" + i;
f_presets.user_presets[userSaver].addEventListener(MouseEvent.MOUSE_DOWN, recall);
function recall(event:MouseEvent):void
{
    if (saveFlag == "play")
    {
        trace(userSave = event.currentTarget.name);
        myuserSave();
    }
    else
    {
        trace(userSave = event.currentTarget.name);
        if (mySO.data["user_saved" + userSave] == "yes")
        {
            myuserPlay();
        }
    }
}
}
4

3 に答える 3

1

あなたが達成しようとしていることを理解しているかどうかはわかりませんが、userSaveが複数の値を取ると仮定しています...

//save userSave for later
user_presets["u"+userSave].id = String(userSave);
//add listener
user_presets["u"+userSave].addEventListener(MouseEvent.MOUSE_DOWN, eventHandler);

function eventHandler(event:MouseEvent):void
{
    //retrieve userSave from target
    var userSaveValue:Number = Number(event.target.id);
    //do something based on value of userSave...?    
}

または、インライン関数を使用することもできます(間違いなくベストプラクティスではありませんが、必要な場合があります)。

user_presets["u"+userSave].addEventListener(MouseEvent.MOUSE_DOWN, function(event:MouseEvent){
    //code here
});
于 2012-12-15T01:39:04.840 に答える
1

これを単純化するには、アプローチを調整する必要があります。

まず、save_presets の子はすべてボタンであると想定しています。そうでない場合は、これらのボタンだけのコンテナを用意することを検討してください。これを簡単に実行できます。

for(var index:int = 0;index < save_presets.numChildren;index++)
{
    var button:MovieClip = save_presets.getChildAt(index) as MovieClip;
    button.id = index;
    button.addEventListener(MouseEvent.MOUSE_DOWN, eventHandler);
}

ハンドラーを削除するには、次のようにします。

for(var index:int = 0;index < save_presets.numChildren;index++)
{
    var button:MovieClip = save_presets.getChildAt(index) as MovieClip;
    button.removeEventListener(MouseEvent.MOUSE_DOWN, eventHandler);
}
于 2012-12-15T02:09:36.320 に答える
0

編集:

さて、私はあなたが何をしたいのかを知っていると確信しています。これがクラスの例です。このクラスは、各ボタンの間に1ピクセルのスペースがある36個の正方形のボタンを作成します。各ボタンにはイベントリスナーがあり、マウスがボタンの上にあるときにそれぞれがイベントを発生させます。私に知らせない場合でも、これが役立つことを願っています

package {

import flash.display.MovieClip;
import flash.events.*;
import flash.geom.*; // Used to create rectangle for buttons

/**
 * ...
 * @author [Your Name Here]
 */
public class Main extends MovieClip
{
    public var user_presets:Array; // Array to store buttons

    public const BUTTON_COUNT:int = 36; // How many buttons do you want?

    public function Main():void 
    {   
        user_presets = new Array(); // Initialize button array

        this.addEventListener(Event.ADDED_TO_STAGE, onAddedToStage); // Listener for ADDED_TO_STAGE event
    }

    private function onAddedToStage(e:Event = null):void 
    {
        var tmpX:int = 0; // Button's x value
        var tmpY:int = 0; // Button's y value

        for (var i:int = 0; i < BUTTON_COUNT; i++) { // For loop to create 36 buttons

            var tmpButton:MovieClip = new MovieClip(); // Create a temporary button

            tmpButton.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown); // Add MOUSE_DOWN event listener to the temporary button

            tmpButton.graphics.beginFill(0x000000, 1); // Fill the rectangle we create with 0x000000 (Black)
            tmpButton.graphics.drawRect(0, 0, 10, 10); // Draw a 10 x 10 rectangle that will be one button
            tmpButton.graphics.endFill(); // Stop filling rectangle

            tmpButton.name = "u" + (i + 1); // This is your u1, u2 ... u(n) where n is how many buttons you want
            tmpButton.x = tmpX; // Temporary buttons x value
            tmpButton.y = tmpY; // Temporary buttons y value

            tmpX += 11; // Add 11 to tmpButtons x value, basically adding a 1 pixel space between each button

            user_presets.push(tmpButton); // Add the temporary button to your user_presets array

            stage.addChild(tmpButton); // Add the temporary button to the stage

            } // Repeat above steps 35 times

        this.removeEventListener(Event.ADDED_TO_STAGE, onAddedToStage); // Remove the ADDED_TO_STAGE listener
    }

    public function onMouseDown(event:Event):void
    {
        trace(event.currentTarget.name); // Output which button was clicked

        // I used a switch statement but you can use if else statements if you'd like,
        // I think switch statements are easier to code for alot of conditionals.
        switch(event.currentTarget.name) {
            case "u1": // If the mouse is down over the first button, output "u1 was clicked!"
                trace("u1 was clicked!");
                break;

            case "u2": // If the mouse is down over the second button, output "u2 was clicked!"
                trace("u2 was clicked!");
                break;
        }
    }

}

}

于 2012-12-15T23:17:52.073 に答える