0

假设我们有 4 个 SimpleButton 类的实例。SimpleButton 类具有变量 b:Boolean。当您单击按钮实例时,其变量 b:Boolean 变为 true,所有其余按钮的 b:Boolean 变量均变为 false。如何做到这一点?任何建议表示赞赏。

4

1 回答 1

0

每次创建实例时,它的构造函数都会将自己“注册”到类静态数组中。通过将实例推入这个静态数组变量,该变量会跟踪所有创建的实例。这些实例将具有变量 b 的公共 setter 函数。如果传入的布尔值为真,它会将其私有 b 属性设置为真,然后遍历静态数组中注册的所有其他实例,并将它们的 b 设置器函数设置为假。如果传入的 b 布尔值为 false,那么它只是将其 b 设置为 false,并且可能会更改其显示(无论您想要什么)。这将实现您想要的,因此每当您将实例的 b setter 函数设置为 true 时,它​​会自动将所有其他函数更改为 false。你可以调整它来做不同的事情。例如:最多有 2 个实例的 ab 值为真。在您的情况下,只需让侦听器函数调用 b setter 函数或其他任何方法。

下面是我写的代码来说明我的解释,按照评论理解:

package{
public class SimpleButton extends Sprite { // your class

    private static var instances:Array = new Array(); // your static class-wide instance tracker
    private var x_b:Boolean; // your private var of b (I am using OOP techniques here

    public function SimpleButton() {
        instances.push(this); // "register" this instance into the array
    }
    // ... (rest of class)
    public function set b(newB:Boolean):void { // setter function for b
        this.x_b = newB; //set its value
        if (this.x_b) { // if its true
            for (var i in instances) { //loop through all the other "registerd" instances
                if(instances[i]!=this){ //if its not this instance
                    SimpleButton(instances[i]).b = false; // then set its b value to false
                }
            }
        }else { // if its being set to false (either manualy from outside, or from the loop of another instance
            // If you want to do something when it is false
        }
    }
    public function get b():Boolean { //just a getter to match our setter
        return this.x_b;
    }
}
}

如果我已经回答了你的问题,那就太好了!但如果不是,请回复并让我知道。谢谢。

编辑

SimpleButton 的所有实例只有一个数组。对于类来说它是静态的。它不是对占用内存的实例的引用,而是实例本身。我的意思是,如果您创建了 50 个 SimpleButtons 实例,那么对于计算机来说,它们就是要跟踪的 50 个不同对象。即使您创建了 1000 个变量都指向同一个实例,但对于计算机来说,这些变量只是对实例的引用,而不是实例本身,因此您在内存中仍然只有 50 个对象。这里也是如此。该数组只是一个数组,其中包含对各种 SimpleButtons 的大量引用。如果您删除对类实例的所有引用,该实例仍然在计算机中 - 您无法再访问它,只有在“垃圾收集”时才会删除它 的 Flash 播放器运行,并删除所有没有引用它们的对象。这个“集合”是在 Flash Player 中删除东西的唯一方法,使一个等于 null 的变量不会删除它,它只会删除对它的引用。当从类外处理 SimpleButtons 时,这种方式非常优雅和容易。您所做的就是创建一个,它会自动记录自己 - 准备好在另一个更改时更改其 b var。

如果您仍然无法理解对对象的引用以及内存中的对象本身的区别,请再次回复,我会找到一个很好的链接向您发送有关它的信息。

于 2013-10-19T03:23:48.593 回答