Игра за промяна на цвета на кутията

Това, което искам да постигна чрез този код, е, че всеки път, когато щракна върху някое от 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