AS3布尔似乎不起作用

时间:2013-08-01 08:41:44

标签: actionscript-3

好的,所以这显然是我在代码中愚蠢地忽略的东西,但我遇到了布尔检查as3的问题。在下面的if语句中我设置了一个布尔值,我可以确认在这个if开关中设​​置了布尔值,因为我已经运行了一个跟踪来检查:

if(switchA && switchB){
                if(Side == "LEFT"){
                    localAttachCoords.x = (-Parent.collision.SideLength - entity.collision.SideLength)/2
                    localAttachCoords.y = Parent.collision.SideLength/2 - (((TargNode-1)*8) + entity.collision.SideLength/2)
                }
                if(Side == "RIGHT"){
                    localAttachCoords.x = (Parent.collision.SideLength + entity.collision.SideLength)/2
                    localAttachCoords.y = -(Parent.collision.SideLength/2 - (((TargNode-1)*8) + entity.collision.SideLength/2))
                }
                if(Side == "UP"){
                    localAttachCoords.y = (Parent.collision.SideLength + entity.collision.SideLength)/2
                    localAttachCoords.x = -(Parent.collision.SideLength/2 - (((TargNode-1)*8) + entity.collision.SideLength/2))
                }
                if(Side == "DOWN"){
                    localAttachCoords.y = (-Parent.collision.SideLength - entity.collision.SideLength)/2
                    localAttachCoords.x = Parent.collision.SideLength/2 - (((TargNode-1)*8) + entity.collision.SideLength/2)
                }
                entity.attached = true
                entity.Parent = Parent
            }

这一切都很好,但事实上,在另一个类的函数中,执行每一帧,声称布尔值设置为false,我用另一个跟踪函数确认了这一点。 这是一个函数,取自上面开关中实例被称为entity的类:

  public function update(){
        if (physics) physics.update()
        if (node && physics){
            trace(attached)
            if(attached){
                physics.nodeUpdate()
            }
        }
    }

此函数在附加== false的跟踪中声明,尽管它先前设置为true而没有对附加变量的其他引用。任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:0)

径处理

您的问题中有一些未解决的变量,最重要的是您正在检查变量的路径。这是相关的,因为命名空间/范围会影响每段代码可以访问的内容。

如果你的函数和变量共享相同的空间(即全局/文档/时间轴),那么同一个命名变量的任何引用将始终返回相同的值,除非(如LoremIpsum所述)它被遮蔽通过同名的局部变量。

显然,情况并非如此,因为您使用的是public function,这是一个仅限类的声明。如果您要查找的布尔值在时间轴上,并且该类想要读取该变量,则需要有一个有效的路径。作为DisplayObjects并已添加到DisplayList的实例化类具有parentstage属性,您可以使用这些属性访问时间轴全局命名空间(从而提供对布尔值的访问)。

但是,如果该类不是DisplayObject(例如,它不是extendSpriteShapeMovieClip),那么访问时间轴已经通过在类上设置属性或将参数传递给类上的方法来手动提供。

更复杂的是,如果布尔存在于另一个类对象(实例化或静态)中,那么您需要一种方法来获取它们。 A的情况看到B,C看到B,但A或C都看不到彼此。


布尔值总是为假,即使指定的值为null,因此如果您的类试图引用它看不到的变量,那么该值将始终为false。例如......

var foo:Boolean = this["fiddlesticks"];
trace("foo = " + foo); // traces: "foo = false"

没有属性this.fiddlesticks,因此当解析的值为null时,foo变为false。考虑使用hasOwnProperty(),它指示对象是否已定义指定的属性,并且是可用于所有对象的方法。


开关

您不必使用if then else if手动创建自己的开关,AS3有自己的switch声明。

switch (Side) {
    case "LEFT":
        // Do stuff for left
        break;
    case "RIGHT":
        // Do stuff for right
        break;
    case "UP":
        // Throw your hands up
        break;
    case "DOWN":
        // Get down and boogie!
        break;
}

我希望一切都有所帮助。我想准确说出访问布尔值的确切情况,但根本没有足够的信息可以说明。

干杯!