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 TypeError:错误#1009:无法访问空对象引用的属性或方法_Actionscript 3_Flash_Typeerror - Fatal编程技术网

Actionscript 3 TypeError:错误#1009:无法访问空对象引用的属性或方法

Actionscript 3 TypeError:错误#1009:无法访问空对象引用的属性或方法,actionscript-3,flash,typeerror,Actionscript 3,Flash,Typeerror,从昨天深夜开始,我一直在尝试修复上述错误。 今天我又试了好几个小时。我学到了很多,也了解了很多。我在路上发现了一些问题并加以解决,不幸的是错误依然存在 例如,我现在知道了 上述错误表明我的代码所针对的一个对象超出范围。 可能是由于: 它正在声明但未实例化 它没有实例名称(或实例名称拼写错误) 它不存在于代码试图与其对话的帧中 它已设置动画,但未在每个关键帧中为其指定实例名称 它是相同对象的两个或多个连续关键帧之一,在前一帧中没有指定名称(或不同名称) 这是出错的错误行: 所以它必须是有背景或讨论

从昨天深夜开始,我一直在尝试修复上述错误。 今天我又试了好几个小时。我学到了很多,也了解了很多。我在路上发现了一些问题并加以解决,不幸的是错误依然存在

例如,我现在知道了 上述错误表明我的代码所针对的一个对象超出范围。 可能是由于:

  • 它正在声明但未实例化

  • 它没有实例名称(或实例名称拼写错误)

  • 它不存在于代码试图与其对话的帧中

  • 它已设置动画,但未在每个关键帧中为其指定实例名称

  • 它是相同对象的两个或多个连续关键帧之一,在前一帧中没有指定名称(或不同名称)

  • 这是出错的错误行:

    所以它必须是有背景或讨论的东西…

  • 我查过了,这不是一个拼错的例子 BTW back是带有back实例的背景movieclip,它包含带有实例冲突的冲突图像

  • 正在声明(但可能不正确)

  • 可能是原因。帧1是预加载程序。第2帧是带有启动代码cat.as按钮的菜单。第3帧包含游戏

  • 它只存在于一个关键帧上,所以它不是第4个错误

  • 它只存在于一个关键帧上,所以它不是第5个错误

  • 所以很可能是第三个

    我想发生的是,我点击按钮,它立即想要运行cat.as,就像进入第3帧之前一样。我应该如何解决这个问题。我正在考虑把游戏放在第二帧,但不放在屏幕上。 我非常希望得到这方面的反馈。谢谢

    我的代码:编辑:我给了var public


    问题是,在检查其x值之前,您从未向舞台添加播放器。

    在if语句之前添加此项,以查看缺少的项目:

    trace("back "+back);
    trace("back.collisions "+back.collisions);
    trace("player.x "+player.x);
    trace("leftBumpPoint.x "+leftBumpPoint.x);
    trace("player.y "+player.y);
    trace("leftBumpPoint.y "+leftBumpPoint.y);
    

    分别声明back和collisions,但访问它们时,碰撞是back的一个属性。back是否具有碰撞属性?如果是,它是如何初始化的?

    根据您的语句

    back是带有back实例的背景电影剪辑

    我可以假设您将“Back”设置为movieClip“Back”的实例名


    将“back”更改为“back”应该可以做到这一点

    您的addEnemy()和addBumber()方法在哪里?你的感谢会很快得到的。这可能是正确的,但这并不可怕(但我可能错了),它似乎仍然在代码中得到了x和y值。在运行跟踪之后。x=0 y=0这可能是因为玩家被放置在时间线上的一个框架中。我修改了我的回答。你必须先将玩家添加到舞台上,然后才能得到它的x值。你的意思是我应该一起声明他们吗?看起来会是什么样子:返回一个碰撞属性这似乎是个问题。我正在研究如何归还财产。如果有人有一个主题的链接,或者想把awnser放在这里,非常欣赏Back和Collision是独立的类,你想用它们做什么?如果你想让碰撞成为Back的一部分,那么你需要在Back类中创建一个碰撞变量。谢谢你的帮助!很遗憾,我不能选择2个awnser作为正确的awnser。?我想你误解了,因为我不清楚。当链接/实例名称返回时,movieclip称为“后台”。它是公共var back:back;为了省事,我现在也把电影唇叫了回来。但是它仍然会返回errorback[object Back]Back.collisions null player.x 0 leftBumpPoint.x-30 player.y 0 leftBumpPoint.y-55so Back.collisions=null hmmm您已经创建了一个名为collisions的变量,因此应该可以直接访问它。e、 g.collisions.hitTestPoint,不是back.collisions.hitTestPoint非常感谢!!!非常感谢!我认为这解决了问题。当我按照你的建议拆下背部时,它起作用了。它确实在代码的后面给出了一个新的错误。但多亏了你和其他人,我可以继续努力解决这个问题。我将尝试解决下一个错误(顺便说一句,TypeError:error#2007:此行的参数hitTestObject:if(player.hitTestObject(other.doorKey)),我自己修复了这个错误,但现在播放器被困在舞台上,并很快地完成了它的动画…嗯
    package 
    {
    import flash.display.MovieClip;
    import flash.events.*;
    import flash.events.KeyboardEvent;
    import flash.ui.Keyboard;
    import flash.geom.Point;
    
    public class Cat extends MovieClip
    {
    
        public var leftPressedfBoolean = false;
        public var rightPressed:Boolean = false;
        public var upPressed:Boolean = false;
        public var downPressed:Boolean = false;
    
        public var leftBumping:Boolean = false;
        public var rightBumping:Boolean = false;
        public var upBumping:Boolean = false;
        public var downBumping:Boolean = false;
    
        public var leftBumpPoint:Point = new Point(-30,-55);
        public var rightBumpPoint:Point = new Point(30,-55);
        public var upBumpPoint:Point = new Point(0,-120);
        public var downBumpPoint:Point = new Point(0,0);
    
        public var scrollX:Number = 0;
        public var scrollY:Number = 500;
    
        public var xSpeed:Number = 0;
        public var ySpeed:Number = 0;
    
        public var speedConstant:Number = 4;
        public var frictionConstant:Number = 0.9;
        public var gravityConstant:Number = 1.8;
        public var jumpConstant:Number = -35;
        public var maxSpeedConstant:Number = 18;
    
        public var doubleJumpReady:Boolean = false;
        public var upReleasedInAir:Boolean = false;
    
        public var keyCollected:Boolean = false;
        public var doorOpen:Boolean = false;
    
        public var currentLevel:int = 1;
    
        public var animationState:String = "idle";
    
        public var bulletList:Array = new Array();
        public var enemyList:Array = new Array();
        public var bumperList:Array = new Array();
    
        public var player:Player;
        public var back:Back;
        public var sky:Sky;
        public var collisions:Collisions;
        public var visuals:Visuals;
        public var other:Other;
        public var doorKey:DoorKey;
    
        public function Cat()
        {
            addEventListener(Event.ADDED_TO_STAGE, init);
        }
    
        public function init(e:Event):void
    
    {
            player = new Player();
            back = new Back();
            sky = new Sky();
            visuals = new Visuals();
            other = new Other();            
            collisions = new Collisions();
            doorKey = new DoorKey();
    
            stage.addEventListener(KeyboardEvent.KEY_DOWN, keyDownHandler);
            stage.addEventListener(KeyboardEvent.KEY_UP, keyUpHandler);
            stage.addEventListener(Event.ENTER_FRAME, loop);
            addEnemiesToLevel1();
            addBumpersToLevel1();
        }
    
        public function addEnemiesToLevel1():void
        {
            addEnemy(620, -115);
            addEnemy(900, -490);
            addEnemy(2005, -115);
            addEnemy(1225, -875);
        }
    
        public function addBumpersToLevel1():void
        {
            addBumper(500, -115);
            addBumper(740, -115);
        }
    
    
        public function loop(e:Event):void
        {
            if (back.collisions.hitTestPoint(player.x + leftBumpPoint.x,player.y + leftBumpPoint.y,true))
            {
                //trace("leftBumping");
                leftBumping = true;
            }
            else
            {
                leftBumping = false;
            }
    
    trace("back "+back);
    trace("back.collisions "+back.collisions);
    trace("player.x "+player.x);
    trace("leftBumpPoint.x "+leftBumpPoint.x);
    trace("player.y "+player.y);
    trace("leftBumpPoint.y "+leftBumpPoint.y);