设置可见性槽属性不工作actionscript 3.0

时间:2018-04-27 13:23:19

标签: arrays actionscript-3 if-statement flash visibility

这是我的第一篇文章。

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

使用上面的代码"调用"在控制台中打印,但两个对象(按钮)仍然可见。然后,当我尝试将设置可见性(p[1].visible = false;j[1].visible = false;)排除在条件之外时,它可以很好地工作。

我想知道这里的问题是什么,如何在某些条件下设置可见性?

[编辑]

这是我的实际源代码。上面的代码片段只是为了简化我的问题。

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函数在另一层(在同一帧上),因为对象在那里。 &#34; one&#34;,&#34; two&#34;,&#34; three&#34;,&#34; four&#34;或&#34; five&#34;已打印,但未正确设置可见性。

1 个答案:

答案 0 :(得分:0)

只是为了让您的代码更简单易读。

使用你的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;
}

至于你的实际问题我不认为你可以从数组中更改一个按钮,因为它会变成按钮的副本而不是按钮本身(希望这是有意义的)。我仍然会有数组,但我没有按钮可见性,而是使用布尔值。所以最后你可以把:

btnButton.visible = p1;

希望一切都好,有些用。