Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/flash/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Actionscript 3 为什么可以';我不能从其他类访问公共变量吗?_Actionscript 3_Flash_Actionscript_Air - Fatal编程技术网

Actionscript 3 为什么可以';我不能从其他类访问公共变量吗?

Actionscript 3 为什么可以';我不能从其他类访问公共变量吗?,actionscript-3,flash,actionscript,air,Actionscript 3,Flash,Actionscript,Air,我想在我的游戏文档类中定义我的变量,然后在我的移动类中使用其中的一些变量。然而,当我在我的movement类中使用这些变量时,我会收到大量的编译错误,它们都是未定义的 因此我的问题是,为什么我的公共变量没有传递给我的另一个类?我通过做导入游戏导入了这个类

我想在我的游戏文档类中定义我的变量,然后在我的移动类中使用其中的一些变量。然而,当我在我的movement类中使用这些变量时,我会收到大量的编译错误,它们都是未定义的

因此我的问题是,为什么我的公共变量没有传递给我的另一个类?我通过做
导入游戏导入了这个类
时间线

addChild((new Movement));
游戏文档类

package 
{
    import flash.display.MovieClip;
    import flash.utils.Timer;
    import flash.events.TimerEvent;

    public class game extends MovieClip
    {
        public var area1:Boolean = true;
        public var area2:Boolean = false;
        public var area3:Boolean = false;

        public var player1:Boolean = true;

        public var playerPosKeeper_mc:MovieClip = new mc_PlayerPosKeeper();

        public var up_dpad:MovieClip = new dpad_Up();
        public var down_dpad:MovieClip = new dpad_Down();
        public var left_dpad:MovieClip = new dpad_Left();
        public var right_dpad:MovieClip = new dpad_Right();
        public var menu_dpad:MovieClip = new dpad_Menu();
        public var run_dpad:MovieClip = new dpad_Menu();

        public var barrierRoof1_game:MovieClip = new game_BarrierRoof();
        public var barrierRoof2_game:MovieClip = new game_BarrierRoof();
        public var barrierSide1_game:MovieClip = new game_BarrierSide();
        public var barrierSide2_game:MovieClip = new game_BarrierSide();

        public function game()
        {
            trace("SUCCESS | Constructed Game Class");

        }
    }
}
package 
{
    import game;
    import flash.display.Stage;
    import flash.display.MovieClip;
    import flash.events.Event;
    import flash.events.TouchEvent;
    import flash.net.dns.AAAARecord;
    import flash.ui.Multitouch;
    import flash.ui.MultitouchInputMode;


    public class Movement extends MovieClip
    {
        var inMotion:Boolean = false;

        public function Movement()
        {
            trace("SUCCESS | Constructed Movement Class");

            addChild(playerPosKeeper_mc);
            playerPosKeeper_mc.x = 384;
            playerPosKeeper_mc.y = 46;

            addChild(up_dpad);
            up_dpad.x = 55;
            up_dpad.y = 336;

            addChild(down_dpad);
            down_dpad.x = 57;
            down_dpad.y = 432;

            addChild(left_dpad);
            left_dpad.x = 19;
            left_dpad.y = 372;

            addChild(right_dpad);
            right_dpad.x = 118;
            right_dpad.y = 372;

            addChild(menu_dpad);
            menu_dpad.x = 61;
            menu_dpad.y = 377;

            addChild(run_dpad);
            run_dpad.x = 684;
            run_dpad.y = 369;

            addChild(barrierRoof1_game);
            barrierRoof1_game.x = 0;
            barrierRoof1_game.y = 0;

            addChild(barrierRoof2_game);
            barrierRoof2_game.x = 0;
            barrierRoof2_game.y = 470;

            addChild(barrierSide1_game);
            barrierSide1_game.x = 0;
            barrierSide1_game.y = 0;

            addChild(barrierSide2_game);
            barrierSide2_game.x = 790;
            barrierSide2_game.y = 0;

            Multitouch.inputMode = MultitouchInputMode.TOUCH_POINT;

            up_dpad.addEventListener(TouchEvent.TOUCH_BEGIN, moveUpTouchBEGIN);
            up_dpad.addEventListener(TouchEvent.TOUCH_END, moveUpTouchEND);

        }
        public function moveUpTouchBEGIN(e:TouchEvent):void
        {
            trace("Touch Began")
        }

        public function moveUpTouchEND(e:TouchEvent):void
        {
            trace("Touch Ended")
        }
    }

}
动作类

package 
{
    import flash.display.MovieClip;
    import flash.utils.Timer;
    import flash.events.TimerEvent;

    public class game extends MovieClip
    {
        public var area1:Boolean = true;
        public var area2:Boolean = false;
        public var area3:Boolean = false;

        public var player1:Boolean = true;

        public var playerPosKeeper_mc:MovieClip = new mc_PlayerPosKeeper();

        public var up_dpad:MovieClip = new dpad_Up();
        public var down_dpad:MovieClip = new dpad_Down();
        public var left_dpad:MovieClip = new dpad_Left();
        public var right_dpad:MovieClip = new dpad_Right();
        public var menu_dpad:MovieClip = new dpad_Menu();
        public var run_dpad:MovieClip = new dpad_Menu();

        public var barrierRoof1_game:MovieClip = new game_BarrierRoof();
        public var barrierRoof2_game:MovieClip = new game_BarrierRoof();
        public var barrierSide1_game:MovieClip = new game_BarrierSide();
        public var barrierSide2_game:MovieClip = new game_BarrierSide();

        public function game()
        {
            trace("SUCCESS | Constructed Game Class");

        }
    }
}
package 
{
    import game;
    import flash.display.Stage;
    import flash.display.MovieClip;
    import flash.events.Event;
    import flash.events.TouchEvent;
    import flash.net.dns.AAAARecord;
    import flash.ui.Multitouch;
    import flash.ui.MultitouchInputMode;


    public class Movement extends MovieClip
    {
        var inMotion:Boolean = false;

        public function Movement()
        {
            trace("SUCCESS | Constructed Movement Class");

            addChild(playerPosKeeper_mc);
            playerPosKeeper_mc.x = 384;
            playerPosKeeper_mc.y = 46;

            addChild(up_dpad);
            up_dpad.x = 55;
            up_dpad.y = 336;

            addChild(down_dpad);
            down_dpad.x = 57;
            down_dpad.y = 432;

            addChild(left_dpad);
            left_dpad.x = 19;
            left_dpad.y = 372;

            addChild(right_dpad);
            right_dpad.x = 118;
            right_dpad.y = 372;

            addChild(menu_dpad);
            menu_dpad.x = 61;
            menu_dpad.y = 377;

            addChild(run_dpad);
            run_dpad.x = 684;
            run_dpad.y = 369;

            addChild(barrierRoof1_game);
            barrierRoof1_game.x = 0;
            barrierRoof1_game.y = 0;

            addChild(barrierRoof2_game);
            barrierRoof2_game.x = 0;
            barrierRoof2_game.y = 470;

            addChild(barrierSide1_game);
            barrierSide1_game.x = 0;
            barrierSide1_game.y = 0;

            addChild(barrierSide2_game);
            barrierSide2_game.x = 790;
            barrierSide2_game.y = 0;

            Multitouch.inputMode = MultitouchInputMode.TOUCH_POINT;

            up_dpad.addEventListener(TouchEvent.TOUCH_BEGIN, moveUpTouchBEGIN);
            up_dpad.addEventListener(TouchEvent.TOUCH_END, moveUpTouchEND);

        }
        public function moveUpTouchBEGIN(e:TouchEvent):void
        {
            trace("Touch Began")
        }

        public function moveUpTouchEND(e:TouchEvent):void
        {
            trace("Touch Ended")
        }
    }

}
您感到困惑,因为“公共”并不意味着“全球”。将变量声明为public意味着您希望向任何实体授予对该变量的访问权,前提是该实体知道该变量的位置

让我们看看你有什么

  • 顶部显示对象:舞台
  • 主要时间线:游戏是一个孩子的阶段
  • MovieClips up_dpad、down_dpad等等,都是游戏实例的字段
  • 运动:实例是游戏的子对象
在移动中,您试图访问up_dpad和其他,但它们作为游戏实例的字段保留,与移动实例无关。这就是为什么它们不在运动的寻址上下文中

因此,如果您想将这些变量声明为游戏字段,您需要以正确的方式从运动中解决它们

忘记时间线吧。在游戏中(看在上帝的份上,永远不要用小写字母调用类,除非在枪口下),我相信这是一个根文档类:

    public function Game()
    {
        trace("SUCCESS | Constructed Game Class");

        // Pass reference to this instance to the constructor.
        var aMove:Movement = new Movement(this);

        // Add it as a child.
        addChild(aMove);
    }
运动中:

    public function Movement(main:Game)
    {
        trace("SUCCESS | Constructed Movement Class");

        // Access variables inside Game instance via given reference.
        addChild(main.playerPosKeeper_mc);
        main.playerPosKeeper_mc.x = 384;
        main.playerPosKeeper_mc.y = 46;

        // ...and so on
    }

这些是面向对象编程的基础。如果要访问对象内部的任何内容,需要先访问对象。

感谢您的逐步解释。非常感谢。@user2712413它让我想起了2001年,当时我的时间线A上的代码无法看到时间线B上声明的变量的原因基本相同,那就是Flash 5和奇怪的ActionScript,甚至还不是AS1。在我最终获得MovieClip层次结构和直接寻址之后,它变得相当容易。