从单独的 class 访问变量

Accessing Variables from separate class

大家好,我正在尝试使用我的主 class SmashyFoodEngine 从名为 mcPressMachine 的单独 class 访问布尔变量。我想做的是当分数 >= 6 时,然后在我的主引擎中像这样更改布尔值 Class Enter Frame Event:

if (nScore >= 6)
        {
            for each(var AllPresses:mcPressMachine in aPressMachineArray)
            {
                AllPresses.level_1 = false;
                AllPresses.level_2 = true;
            }
        }

在我的 mcPressMachine class 中,我设置了布尔值来控制接下来将播放时间轴上该影片剪辑 class 的哪些帧。所以基本上,如果 level_1 为真,则从 (1,8) 开始播放随机帧,如果 level_2 为真,则播放帧 (9,13) 等......在 pressMachine [=32] 中的设置就像这样=]:

public var level_1:Boolean = true;
public var level_2:Boolean = false;

private function init():void 
    {

        if (level_1)
        {
            var randomFrameLevel_1:Number = randomNumber(1, 8);
            this.gotoAndStop(randomFrameLevel_1);

        }

        if (level_2)
        {
            var randomFrameLevel_2:Number = randomNumber(9, 13);
            this.gotoAndStop(randomFrameLevel_2);

        }
    }

所以当我跟踪它并且分数 >= 6 时,布尔值完美地改变但屏幕上没有任何反应。影片剪辑完全相同,不会更改为 level_2 帧 (9-13);

这也是我的主 Class 中添加到舞台上的电影剪辑,我正在尝试更改:

private function addNewPressMachines():void 
    {
        //have array of press machines come out 5 at a time. 
        for (var i:int = 0; i < 2; i++)
        {
            //trace(aPressMachineArray.length + "PRESS MACHINES");
            pressMachine = new mcPressMachine();
            pressMachine.x = startPoint.x + (xSpacing * i);
            pressMachine.y = (stage.stageHeight / 2);

            stage.addChildAt(pressMachine, 1);
            aPressMachineArray.push(pressMachine);

            pressMachine.inner.top.visible = false;
            pressMachine.inner.top.topText.text =  " " + sharedObjectHighScore.data.highScore;


        }
    }

谁能看看我做错了什么?我没有收到任何错误,只是无法正常工作。任何建议都会很棒。谢谢!

这是我目前能做的最好的。

var _var1:Boolean;
var _var2:Boolean;

public function MyClass(first:Boolean,second:Boolean):void{
    this._var1 = first;
    this._var2 = second;
    if (_var1 == true) {
    // stuff
    }
    if (_var2 == true){
    // etc.
    }

这会将您的参数从中传递到构造函数代码中并且将值保存在该class实例的属性中。

或者更简单

var _level:int;
public function MyClass(lev:int=1):void{
     this._level = lev;
     if (lev == 1){
     // do stuff
     } else if (lev==2){
     // etc
     }

您会在这里注意到我将 _level 值设置为等于 lev 参数。只有当你需要这个 class 的实例有一个 _level 属性 用于其他事情时,这才是真正必要的。你看我也可以这样做:

public function MyClass(lev:int=1):void{
     if (lev == 1){
     // do stuff
     } else if (lev==2){
     // etc
     }

其中我在 class 定义和构造函数代码中都省略了 _level 属性 的声明。这意味着您可以将变量传递给构造函数,而无需将该信息永久存储在 class 的特定实例中,但这些参数仍然会永久影响结果。

然后当您实例化该 class 的新实例时,只需执行

var myInstance = new MyClass(true, false); // using the first example

或者我更好、更简单的版本

var myInstance:MyClass = new MyClass(2); // for the second example