【问题标题】:Defining Variables in Class File Causing Crashes在类文件中定义变量导致崩溃
【发布时间】:2017-07-05 00:03:51
【问题描述】:

目前,我对 Flash 课程还是很陌生。我一直在观看有关它们的大量视频,并且正在尝试了解有关面向对象编程的更多信息。

话虽如此,我开始在我的类文件中定义变量并将它们分配给我的库中的符号。当我在我的代码中使用这些变量时,我收到一条错误消息弹出窗口,其中显示以下内容

错误信息:

TypeError:错误 #1009:无法访问空对象引用的属性或方法。 在 Movement()[C:\Users\Kevin\Main Directory\Flash\Clients\org\tcdsb\ZenithsReach\Movement.as:12] 在游戏/frame1()[游戏::frame1:4] 在运行时::ContentPlayer/loadInitialContent() 在运行时::ContentPlayer/playRawContent() 在运行时::ContentPlayer/playContent() 在运行时::AppRunner/run() 在 ADLAppEntry/run() 在全局/运行时::ADLEntry()

My Movement.as 类文件:

package 
{
    import flash.display.MovieClip;
    import flash.events.TouchEvent;

    public class Movement extends MovieClip
    {
        function Movement()
        {
            trace("SUCCESS | Constructed Movement Class");
            down_dpad.addEventListener(TouchEvent.TOUCH_BEGIN, moveDownTouchBEGIN);
            down_dpad.addEventListener(TouchEvent.TOUCH_END, moveDownTouchEND);
            var inMotion:Boolean = false;

            var area1:Boolean = true;
            var area2:Boolean = false;
            var area3:Boolean = false;

            var player1:Boolean = true;
            var playerPosKeeper_mc:MovieClip = new mc_PlayerPosKeeper  ;
            addChild(playerPosKeeper_mc);
            playerPosKeeper_mc.x = 384;
            playerPosKeeper_mc.y = 46;

            var up_dpad:MovieClip = new dpad_Up  ;
            addChild(up_dpad);
            up_dpad.x = 55;
            up_dpad.y = 346;

            var down_dpad:MovieClip = new dpad_Down  ;
            addChild(down_dpad);
            down_dpad.x = 57;
            down_dpad.y = 442;

            var left_dpad:MovieClip = new dpad_Left  ;
            addChild(left_dpad);
            left_dpad.x = 19;
            left_dpad.y = 382;

            var right_dpad:MovieClip = new dpad_Right  ;
            addChild(right_dpad);
            right_dpad.x = 118;
            right_dpad.y = 382;

            var menu_dpad:MovieClip = new dpad_Menu  ;
            addChild(menu_dpad);
            menu_dpad.x = 61;
            menu_dpad.y = 386;

            var run_dpad:MovieClip = new dpad_Menu  ;
            addChild(run_dpad);
            run_dpad.x = 684;
            run_dpad.y = 386;

            var barrierRoof1_game:MovieClip = new game_BarrierRoof  ;
            addChild(barrierRoof1_game);
            barrierRoof1_game.x = 0;
            barrierRoof1_game.y = 0;

            var barrierRoof2_game:MovieClip = new game_BarrierRoof  ;
            addChild(barrierRoof2_game);
            barrierRoof2_game.x = 0;
            barrierRoof2_game.y = 470;

            var barrierSide1_game:MovieClip = new game_BarrierSide  ;
            addChild(barrierSide1_game);
            barrierSide1_game.x = 790;
            barrierSide1_game.y = 0;
            function moveDownTouchBEGIN(e:TouchEvent):void
            {
                if (player1 == true)
                {
                    if (area1 == true)
                    {
                        if (playerPosKeeper_mc.hitTestObject(barrierRoof1_game))
                        {

                        }
                    }
                    else
                    {
                        // add other areas in the future
                    }
                }
                else
                {
                    // if your not player1, then we need to find out what you are,
                    // and give you the proper walking animations
                }
            }

            function moveDownTouchEND(e:TouchEvent):void
            {

            }

        }

    }

}

【问题讨论】:

  • 你有一个正确的答案。使用 标记为已解决,以便其他人知道有一个有效的答案。

标签: actionscript-3 flash actionscript


【解决方案1】:

你已经完成了......

    down_dpad.addEventListener(TouchEvent.TOUCH_BEGIN, moveDownTouchBEGIN);

在 down_dpad 对象被创建之前

    var down_dpad:MovieClip = new dpad_Down  ;

所以把它向上移动

你也忘记了你的类的括号:
必须是new dpad_Down(); 才能工作...不是当前使用的new dpad_Down ;

【讨论】:

  • 嗨。我已经解决了这个问题,但是我遇到了我的对象没有被添加到舞台的问题。
  • 我无法发布我的代码,因为它太长了。所有这些都可以在pastebin.com/hN8w0Rvk查看
  • 我不擅长使用movieclips,但认为这是因为您没有为对象设置宽度和高度(不确定它们是否可以自动从源获取)
  • “我的对象没有被添加到舞台...” 答案是让 AS3 知道您的意思是类的新实例,所以使用new someClass();。函数也以这种方式运行,即:someFunction();.
猜你喜欢
  • 2017-01-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-19
  • 1970-01-01
  • 2015-10-09
  • 1970-01-01
相关资源
最近更新 更多