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