установить свойство корыта видимости не работает - PullRequest
0 голосов
/ 27 апреля 2018

Это мой первый пост.

if (condition) {
    trace("called");
    p[1].visible = false;
    j[1].visible = false;
}

С указанным выше кодом "named" был напечатан в консоли, но оба объекта (кнопки) все еще видны. Затем, когда я пытаюсь вывести заданную видимость (p[1].visible = false; и j[1].visible = false;) из условия, это работает хорошо.

Интересно, в чем здесь проблема и как я могу установить видимость с некоторым условием?

[EDIT]

Это мой настоящий исходный код. Приведенный выше фрагмент кода просто для упрощения моего вопроса.

import flash.events.MouseEvent;
import flash.ui.Mouse;
import flash.events.Event;

stop();

var isInit:Boolean;
var val:Array;
var p:Array;

if (!isInit)
{
    isInit = initial();
}

function initial():Boolean
{
    trace("init");
    val = new Array();
    val[1] = 0;
    val[2] = 0;
    val[3] = 0;
    val[4] = 0;
    val[5] = 0;
    val[6] = 0;
    pinit();
    jinit();
    ainit();
    binit();
    cinit();
    dinit();
    einit();
    return true;
}

function pinit():void
{
    p = new Array();
    p[1] = p1;
    p[2] = p2;
    p[3] = p3;
}

// event listener works
p[1].addEventListener(MouseEvent.CLICK, function (event:MouseEvent):void {
    p[1].visible = false;
});
p[2].addEventListener(MouseEvent.CLICK, function (event:MouseEvent):void {
    p[2].visible = false;
});

if (isInit)
{
    trace("set visibility"); // this is printed as well
    var i:int;
    for (i = 1; i <= 3; i++)
    {
        setVisibility(i, val[i]);
    }
}

function setVisibility(num:int, val:int):void
{
    if (val==0)
    {
        p[num].visible = true;
        j[num].visible = true;
    }
    else if (val==1)
    {
        trace("one");
        p[num].visible = false;
        j[num].visible = false;
    }
    else if (val==2)
    {
        trace("two");
        p[num].visible = false;
        j[num].visible = false;
        a[num].visible = false;
    }
    else if (val==3)
    {
        trace("three");
        p[num].visible = false;
        j[num].visible = false;
        a[num].visible = false;
        b[num].visible = false;
    }
    else if (val==4)
    {
        trace("four");
        p[num].visible = false;
        j[num].visible = false;
        a[num].visible = false;
        b[num].visible = false;
        c[num].visible = false;
    }
    else if (val==5)
    {
        trace("five");
        p[num].visible = false;
        j[num].visible = false;
        a[num].visible = false;
        b[num].visible = false;
        c[num].visible = false;
        d[num].visible = false;
    }
}

Функции ainit, binit, cinit, etc находятся в другом слое (в том же кадре), потому что объекты находятся там. «Один», «два», «три», «четыре» или «пять» напечатаны, но видимость установлена ​​неправильно.

1 Ответ

0 голосов
/ 02 мая 2018

Просто, чтобы сделать ваш код проще и легче для чтения.

С помощью массива val вы можете заполнить его следующим образом

val = new Array (0,0,0,0,0,0,0);

Да, у этого есть семь чисел, так как массив начинается с 0. Вам не нужно ссылаться на него, но я бы заполнил его, чтобы он выглядел лучше.

Я также изменил бит if else в конце на это:

switch (val){
case 0:
        p[num].visible = true;
        j[num].visible = true;
        break;
case 1:
        trace("one");
        p[num].visible = false;
        j[num].visible = false;
        break;
case 2:
        trace("two");
        p[num].visible = false;
        j[num].visible = false;
        a[num].visible = false;
        break;
case 3:
        trace("three");
        p[num].visible = false;
        j[num].visible = false;
        a[num].visible = false;
        b[num].visible = false;
        break;
case 4:
        trace("four");
        p[num].visible = false;
        j[num].visible = false;
        a[num].visible = false;
        b[num].visible = false;
        c[num].visible = false;
        break;
case 5:
        trace("five");
        p[num].visible = false;
        j[num].visible = false;
        a[num].visible = false;
        b[num].visible = false;
        c[num].visible = false;
        d[num].visible = false;
        break;
}

Что касается вашей реальной проблемы, я не думаю, что вы можете изменить кнопку из массива, поскольку она станет копией кнопки, а не самой кнопки (надеюсь, что это имеет смысл). У меня все еще были бы массивы, но вместо видимости кнопки я бы использовал Booleans. Чтобы в конце вы могли поставить:

btnButton.visible = p1;

Надеюсь, что все в порядке и пригодится.

...