0

非常に単純なコードに問題があります。

for(i=1;i<3;i++){
        _root.otoczenie["z"+i].onPress = function()
        {
            trace(i)
        }
    }

すべての MovieClip (z1 または z2) がトレースに「1」を返すのはなぜですか。また、別の方法でビルドする方法を教えてください。

4

1 に答える 1

0

まず、アイテムを押すと「3」がトレースされます。

問題は、すべての関数が「for」によって最後に影響を受けた「i」の値をトレースすることです。

たとえば、各オブジェクトに値を割り当てる必要があります。

for(var i:Number = 1; i <= 2 ; i++) {
    _root.otoczenie["z"+i].myValue = i;
    _root.otoczenie["z"+i].onPress = function () {
        trace(this.myValue);
    }
}

より良い方法は、委任を使用して共通の関数を使用することです。

for(var i:Number = 1; i <= 2 ; i++) {
    _root.otoczenie["z"+i].myValue = i;
    _root.otoczenie["z"+i].onPress = mx.utils.Delegate.create(this,onItemPressed);
}

function onItemPressed() {
        trace(this.myValue);
}
于 2013-02-26T10:32:47.960 に答える