0

好的,所以这显然是我在代码中愚蠢地忽略了的东西,但是我在 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 而没有其他对附加变量的引用。任何帮助,将不胜感激!

4

1 回答 1

0

寻路

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

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

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

但是,如果该类不是 DisplayObject(例如,它不是extendSpriteShapeMovieClip,则必须手动提供对时间线的访问,方法是设置类的属性,或者将参数传递给班级。

更复杂的是,如果 Boolean 存在于另一个类对象(实例化或静态)中,那么您需要一种在它们之间获取的方法。A 看到 B,C 看到 B,但 A 和 C 都没有看到对方。


价值观

一个布尔值总是假的,即使分配的值是null,所以如果你的类试图引用一个它看不到的变量,那个值总是假的。例如...

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

没有 property 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;
}

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

干杯!

于 2013-08-01T13:18:23.073 回答