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

Arrays 设置可见性槽属性不工作actionscript 3.0,arrays,actionscript-3,if-statement,flash,visibility,Arrays,Actionscript 3,If Statement,Flash,Visibility,这是我的第一篇文章 if (condition) { trace("called"); p[1].visible = false; j[1].visible = false; } 使用上面的代码,“called”被打印在控制台中,但这两个对象(按钮)仍然可见。然后,当我尝试将设置的可见性(p[1].visible=false;和j[1].visible=false;)从条件中取出时,它工作得很好 我想知道这里的问题是什么,如何在某些条件下设置可见性 [编辑] 这是我实际

这是我的第一篇文章

if (condition) {
    trace("called");
    p[1].visible = false;
    j[1].visible = false;
}
使用上面的代码,“called”被打印在控制台中,但这两个对象(按钮)仍然可见。然后,当我尝试将设置的可见性(
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;
    }
}
导入flash.events.MouseEvent;
导入flash.ui.Mouse;
导入flash.events.Event;
停止();
var-isInit:布尔型;
var-val:数组;
var-p:数组;
如果(!isInit)
{
isInit=初始值();
}
函数initial():布尔值
{
跟踪(“初始”);
val=新数组();
val[1]=0;
val[2]=0;
val[3]=0;
val[4]=0;
val[5]=0;
val[6]=0;
pinit();
jinit();
ainit();
binit();
cinit();
迪尼特();
einit();
返回true;
}
函数pinit():void
{
p=新数组();
p[1]=p1;
p[2]=p2;
p[3]=p3;
}
//事件侦听器工作
p[1]。addEventListener(MouseEvent.CLICK,函数(事件:MouseEvent):void{
p[1].visible=false;
});
p[2]。addEventListener(MouseEvent.CLICK,函数(事件:MouseEvent):void{
p[2].visible=false;
});
如果(isInit)
{
跟踪(“设置可见性”);//这也是打印的
变量i:int;

for(i=1;i只是为了使代码更简单、更易于阅读

使用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;

希望这些都没问题,并且有一定的用处。

欢迎来到stackoverflow。对于任何回答您问题的人,您都需要编辑它并包含代码,或者解释
p
j
是如何填充的。就目前而言,这个问题的回答必须是一个猜测。@Naqries看起来一切都应该是这样的这可能是另一个原因,我们无法使用此信息进行查看。请提供更多代码。@Badfeelingabout感谢您的回复。
p
j
是指SimpleButton对象的数组。我在上面添加了更多代码。@AlexUsachov感谢您的回复。我在上面添加了更多代码。这样更好,谢谢。Lo查看您的代码,我仍然看不到
j
是在哪里定义的?您的时间轴上有
p1
p2
p3
实例吗?除了包含此代码的帧外,这些对象是否存在于其他帧上?您是否收到任何错误消息(确保您正在进行调试电影,只需播放电影即可获得错误消息)