Игра с изменением цвета коробки

С помощью этого кода я хочу добиться того, что всякий раз, когда я нажимаю на любое из 16 полей, я получаю красный цвет, но в следующий раз, когда я делаю это на любом другом (или том же) поле, я получаю синий цвет. Что делает этот код, так это то, что если я щелкну любое другое поле, оно сначала даст мне красный цвет (всегда), а следующий цвет я получу только тогда, когда снова щелкну одно и то же поле, то есть все цвета ящиков не зависят друг от друга. . Пожалуйста, помогите, я новичок в actionscript. Заранее спасибо.

var i=0;

box1.addEventListener(MouseEvent.CLICK, func1(i));
box2.addEventListener(MouseEvent.CLICK, func2(i));
box3.addEventListener(MouseEvent.CLICK, func3(i));
box4.addEventListener(MouseEvent.CLICK, func4(i));
box5.addEventListener(MouseEvent.CLICK, func5(i));
box6.addEventListener(MouseEvent.CLICK, func6(i));
box7.addEventListener(MouseEvent.CLICK, func7(i));
box8.addEventListener(MouseEvent.CLICK, func8(i));
box9.addEventListener(MouseEvent.CLICK, func9(i));
box10.addEventListener(MouseEvent.CLICK, func10(i));
box11.addEventListener(MouseEvent.CLICK, func11(i));
box12.addEventListener(MouseEvent.CLICK, func12(i));
box13.addEventListener(MouseEvent.CLICK, func13(i));
box14.addEventListener(MouseEvent.CLICK, func14(i));
box15.addEventListener(MouseEvent.CLICK, func15(i));
box16.addEventListener(MouseEvent.CLICK, func16(i))


function func1(i:int):Function{
    return function paint(e:MouseEvent):void{
        var myColorTransform:ColorTransform = new ColorTransform();
        if (i%4==0) {
            myColorTransform.color = 0xFF0000;
        }
        else if (i%4==1) {
            myColorTransform.color = 0x0000FF;
        }
        else if (i%4==2) {
            myColorTransform.color = 0x00FF00;
        }
        else if (i%4==3) {
            myColorTransform.color = 0xFFFF00;
        }
        box1.transform.colorTransform = myColorTransform;
        i++;
    }
}

function func2(i:int):Function{
    return function paint(e:MouseEvent):void{
        var myColorTransform:ColorTransform = new ColorTransform();
        if (i%4==0) {
            myColorTransform.color = 0xFF0000;
        }
        else if (i%4==1) {
            myColorTransform.color = 0x0000FF;
        }
        else if (i%4==2) {
            myColorTransform.color = 0x00FF00;
        }
        else if (i%4==3) {
            myColorTransform.color = 0xFFFF00;
        }
        box2.transform.colorTransform = myColorTransform;
        i++;
    }
}

function func3(i:int):Function{
    return function paint(e:MouseEvent):void{
        var myColorTransform:ColorTransform = new ColorTransform();
        if (i%4==0) {
            myColorTransform.color = 0xFF0000;
        }
        else if (i%4==1) {
            myColorTransform.color = 0x0000FF;
        }
        else if (i%4==2) {
            myColorTransform.color = 0x00FF00;
        }
        else if (i%4==3) {
            myColorTransform.color = 0xFFFF00;
        }
        box3.transform.colorTransform = myColorTransform;
        i++;
    }
}

function func4(i:int):Function{
    return function paint(e:MouseEvent):void{
        var myColorTransform:ColorTransform = new ColorTransform();
        if (i%4==0) {
            myColorTransform.color = 0xFF0000;
        }
        else if (i%4==1) {
            myColorTransform.color = 0x0000FF;
        }
        else if (i%4==2) {
            myColorTransform.color = 0x00FF00;
        }
        else if (i%4==3) {
            myColorTransform.color = 0xFFFF00;
        }
        box4.transform.colorTransform = myColorTransform;
        i++;
    }
}

function func5(i:int):Function{
    return function paint(e:MouseEvent):void{
        var myColorTransform:ColorTransform = new ColorTransform();
        if (i%4==0) {
            myColorTransform.color = 0xFF0000;
        }
        else if (i%4==1) {
            myColorTransform.color = 0x0000FF;
        }
        else if (i%4==2) {
            myColorTransform.color = 0x00FF00;
        }
        else if (i%4==3) {
            myColorTransform.color = 0xFFFF00;
        }
        box5.transform.colorTransform = myColorTransform;
        i++;
    }
}

function func6(i:int):Function{
    return function paint(e:MouseEvent):void{
        var myColorTransform:ColorTransform = new ColorTransform();
        if (i%4==0) {
            myColorTransform.color = 0xFF0000;
        }
        else if (i%4==1) {
            myColorTransform.color = 0x0000FF;
        }
        else if (i%4==2) {
            myColorTransform.color = 0x00FF00;
        }
        else if (i%4==3) {
            myColorTransform.color = 0xFFFF00;
        }
        box6.transform.colorTransform = myColorTransform;
        i++;
    }
}

function func7(i:int):Function{
    return function paint(e:MouseEvent):void{
        var myColorTransform:ColorTransform = new ColorTransform();
        if (i%4==0) {
            myColorTransform.color = 0xFF0000;
        }
        else if (i%4==1) {
            myColorTransform.color = 0x0000FF;
        }
        else if (i%4==2) {
            myColorTransform.color = 0x00FF00;
        }
        else if (i%4==3) {
            myColorTransform.color = 0xFFFF00;
        }
        box7.transform.colorTransform = myColorTransform;
        i++;
    }
}

function func8(i:int):Function{
    return function paint(e:MouseEvent):void{
        var myColorTransform:ColorTransform = new ColorTransform();
        if (i%4==0) {
            myColorTransform.color = 0xFF0000;
        }
        else if (i%4==1) {
            myColorTransform.color = 0x0000FF;
        }
        else if (i%4==2) {
            myColorTransform.color = 0x00FF00;
        }
        else if (i%4==3) {
            myColorTransform.color = 0xFFFF00;
        }
        box8.transform.colorTransform = myColorTransform;
        i++;
    }
}

function func9(i:int):Function{
    return function paint(e:MouseEvent):void{
        var myColorTransform:ColorTransform = new ColorTransform();
        if (i%4==0) {
            myColorTransform.color = 0xFF0000;
        }
        else if (i%4==1) {
            myColorTransform.color = 0x0000FF;
        }
        else if (i%4==2) {
            myColorTransform.color = 0x00FF00;
        }
        else if (i%4==3) {
            myColorTransform.color = 0xFFFF00;
        }
        box9.transform.colorTransform = myColorTransform;
        i++;
    }
}

function func10(i:int):Function{
    return function paint(e:MouseEvent):void{
        var myColorTransform:ColorTransform = new ColorTransform();
        if (i%4==0) {
            myColorTransform.color = 0xFF0000;
        }
        else if (i%4==1) {
            myColorTransform.color = 0x0000FF;
        }
        else if (i%4==2) {
            myColorTransform.color = 0x00FF00;
        }
        else if (i%4==3) {
            myColorTransform.color = 0xFFFF00;
        }
        box10.transform.colorTransform = myColorTransform;
        i++;
    }
}

function func11(i:int):Function{
    return function paint(e:MouseEvent):void{
        var myColorTransform:ColorTransform = new ColorTransform();
        if (i%4==0) {
            myColorTransform.color = 0xFF0000;
        }
        else if (i%4==1) {
            myColorTransform.color = 0x0000FF;
        }
        else if (i%4==2) {
            myColorTransform.color = 0x00FF00;
        }
        else if (i%4==3) {
            myColorTransform.color = 0xFFFF00;
        }
        box11.transform.colorTransform = myColorTransform;
        i++;
    }
}

function func12(i:int):Function{
    return function paint(e:MouseEvent):void{
        var myColorTransform:ColorTransform = new ColorTransform();
        if (i%4==0) {
            myColorTransform.color = 0xFF0000;
        }
        else if (i%4==1) {
            myColorTransform.color = 0x0000FF;
        }
        else if (i%4==2) {
            myColorTransform.color = 0x00FF00;
        }
        else if (i%4==3) {
            myColorTransform.color = 0xFFFF00;
        }
        box12.transform.colorTransform = myColorTransform;
        i++;
    }
}

function func13(i:int):Function{
    return function paint(e:MouseEvent):void{
        var myColorTransform:ColorTransform = new ColorTransform();
        if (i%4==0) {
            myColorTransform.color = 0xFF0000;
        }
        else if (i%4==1) {
            myColorTransform.color = 0x0000FF;
        }
        else if (i%4==2) {
            myColorTransform.color = 0x00FF00;
        }
        else if (i%4==3) {
            myColorTransform.color = 0xFFFF00;
        }
        box13.transform.colorTransform = myColorTransform;
        i++;
    }
}

function func14(i:int):Function{
    return function paint(e:MouseEvent):void{
        var myColorTransform:ColorTransform = new ColorTransform();
        if (i%4==0) {
            myColorTransform.color = 0xFF0000;
        }
        else if (i%4==1) {
            myColorTransform.color = 0x0000FF;
        }
        else if (i%4==2) {
            myColorTransform.color = 0x00FF00;
        }
        else if (i%4==3) {
            myColorTransform.color = 0xFFFF00;
        }
        box14.transform.colorTransform = myColorTransform;
        i++;
    }
}

function func15(i:int):Function{
    return function paint(e:MouseEvent):void{
        var myColorTransform:ColorTransform = new ColorTransform();
        if (i%4==0) {
            myColorTransform.color = 0xFF0000;
        }
        else if (i%4==1) {
            myColorTransform.color = 0x0000FF;
        }
        else if (i%4==2) {
            myColorTransform.color = 0x00FF00;
        }
        else if (i%4==3) {
            myColorTransform.color = 0xFFFF00;
        }
        box15.transform.colorTransform = myColorTransform;
        i++;
    }
}

function func16(i:int):Function{
    return function paint(e:MouseEvent):void{
        var myColorTransform:ColorTransform = new ColorTransform();
        if (i%4==0) {
            myColorTransform.color = 0xFF0000;
        }
        else if (i%4==1) {
            myColorTransform.color = 0x0000FF;
        }
        else if (i%4==2) {
            myColorTransform.color = 0x00FF00;
        }
        else if (i%4==3) {
            myColorTransform.color = 0xFFFF00;
        }
        box16.transform.colorTransform = myColorTransform;
        i++;
    }
}

person Anubhav Baweja    schedule 11.11.2014    source источник


Ответы (1)


Чтобы сделать это, вы должны объявить i для всего объекта, а также не использовать 16 функций, просто создайте одну функцию и используйте свойство Event.target, чтобы узнать, какое поле было нажато, а затем измените его colorTransform. Кроме того, будет лучше, если вы будете использовать 4 статических объекта преобразования цвета вместо создания одного при каждом щелчке, но это может подождать.

static var cts:Vector.<ColorTransform>=Vector.<ColorTransform>([]);
cts.push(new ColorTransform(0,0,0,1,0xFF,0,0,0));
cts.push(new ColorTransform(0,0,0,1,0,0,0xFF,0));
cts.push(new ColorTransform(0,0,0,1,0,0xFF,0,0));
cts.push(new ColorTransform(0,0,0,1,0xFF,0xFF,0,0));
// these are short forms of color transform initialization, 
// instead of making one and assigning "color", you pass required parameters
// at its creation time.
// add more in case you need
static var nextTransform:int=0;
function paint(e:Event):void {
    var dest:DisplayObject = e.target as DisplayObject;
    if (!dest) return; // should never trigger, but a good precaution anyway
    dest.transform.colorTransform = cts[nextTransform]; 
    nextTransform++;
    if (nextTransform>=cts.length) nextTransform=0;
}

В случае, если вам нужно, чтобы эта функция вела себя так, как она была изначально, вы должны привести dest к MovieClip или к классу ваших ящиков вместо DisplayObject и использовать dest.nextTransform вместо nextTransform везде в этой функции.

Кроме того, для вашего собственного образования вы должны попытаться выяснить, как ведет себя этот код, если вы решите добавить больше цветов, и почему вам нужно так много изменить в исходном коде, если это так.

person Vesper    schedule 11.11.2014
comment
Большое спасибо. Это сработало, хотя я до сих пор не понимаю, как. Думаю, мне придется еще немного потренироваться. - person Anubhav Baweja; 11.11.2014