我有1009错误,但我找不到 null对象。有人能指出我吗?
[Fault] exception,information = TypeError:错误#1009:无法访问a null对象引用的属性或方法。
[Fault] exception,information = TypeError:错误#1009:无法访问a 财产或方法 空对象引用。在 Square / draw()[/ Users / si / Dropbox / ac3 / square / src / Square.as:21] at 开始/ drawSquare()[/ Users / si / Dropbox / ac3 / square / src / Start.as:35] at at starling.events::EventDispatcher/invokeEvent()[/Users/redge/Dropbox/Development/starling/starling/src/starling/events/EventDispatcher.as:146] 在 starling.events::EventDispatcher/dispatchEvent()[/Users/redge/Dropbox/Development/starling/starling/src/starling/events/EventDispatcher.as:117] 在 starling.display ::的DisplayObject / dispatchEvent()[/用户/ REDGE /升降梭箱/开发/八哥/八哥/ SRC /八哥/显示/ DisplayObject.as:398] 在 starling.display ::的DisplayObjectContainer / broadcastEvent()[/用户/ REDGE /升降梭箱/开发/八哥/八哥/ SRC /八哥/显示/ DisplayObjectContainer.as:379] 在 starling.display ::的DisplayObjectContainer / broadcastEventWith()[/用户/ REDGE /升降梭箱/开发/八哥/八哥/ SRC /八哥/显示/ DisplayObjectContainer.as:389] 在 starling.display ::的DisplayObjectContainer / addChildAt()[/用户/ REDGE /升降梭箱/开发/八哥/八哥/ SRC /八哥/显示/ DisplayObjectContainer.as:135] 在 starling.core ::斯塔林/ initializeRoot()[/用户/ REDGE /升降梭箱/开发/八哥/八哥/ SRC /八哥/核心/ Starling.as:439] 在 starling.core ::斯塔林/初始化()[/用户/ REDGE /升降梭箱/开发/八哥/八哥/ SRC /八哥/核心/ Starling.as:410] 在 starling.core ::斯塔林/ onContextCreated()[/用户/ REDGE /升降梭箱/开发/八哥/八哥/ SRC /八哥/核心/ Starling.as:649]
这是明星项目的重要性。
以下是代码:
package {
import starling.display.*;
import com.greensock.TweenLite;
import com.greensock.easing.Linear;
public class Square extends Sprite implements ISquare {
public const square:Quad = new Quad(100, 100);
private var direction:Boolean;
private var stopped:Boolean;
private var speed:int;
public function Square() {
}
public function draw():void{
addChild(square);
square.color = 0x4500FF;
direction = new Boolean(true);
stopped = new Boolean(false);
speed = new int(stage.stageHeight);
trace("vars init complete");
down();
}
...
以下是dropbox上的整个资源:https://www.dropbox.com/sh/9x2q93o2ff1fsna/AADVJgt5nipDE1pdkgozkOc1a
答案 0 :(得分:1)
好的,那么,让我们来看看相关的代码......
开始上课
//stuff omitted like imports
public class Start extends Sprite {
public var viewport:Quad = new Quad(1,1);
private var swipe:SwipeGesture;
private var call:Square = new Square();
public function Start() {
super();
addEventListener(Event.ADDED_TO_STAGE, drawSquare);
}
private function drawSquare(event:Event):void {
removeEventListener(Event.ADDED_TO_STAGE, drawSquare);
viewport.width = stage.stageWidth;
viewport.height = stage.stageHeight;
viewport.color = 0x414141;
addChild(viewport);
swipe = new SwipeGesture(viewport);
swipe.addEventListener(GestureEvent.GESTURE_RECOGNIZED, onSwipe);
trace("gesture listener added");
call.draw();
}
//stuff omitted
}
方形等级
//imports omitted
public class Square extends Sprite implements ISquare {
public const square:Quad = new Quad(100, 100);
private var direction:Boolean;
private var stopped:Boolean;
private var speed:int;
public function Square() {
}
public function draw():void{
addChild(square);
square.color = 0x4500FF;
direction = new Boolean(true);
stopped = new Boolean(false);
speed = new int(stage.stageHeight);
trace("vars init complete");
down();
}
//stuff omitted
}
当我手动阅读你的代码时,我发现这就是:
start.drawSquare
stage.stageHeight
等等,stage
? stage
尚未提及Square
。我认为它是空的。事实上,当你查看错误的堆栈跟踪时,你可以看到这一点。它说at Square/draw() in /Users/si/Dropbox/ac3/square/src/Square.as:21
出错了。 Square.as的第21行是speed = new int(stage.stageHeight);
这表明该行上提到的对象之一为null或未定义。通过消除过程,我们可以看到speed
已经被宣布,并且被分配,因此无关紧要;定义int类或编译会出错;我们剩下的就是stage
为空或stage.stageHeight
未定义。
documentation表示Stage.stageHeight
是一个int。它是stage的属性,因为它是一个原始类型,它永远不会为null或以其他方式未定义(无论如何都不在actionscript中)。因此,我们留下stage
:call
Start的实例从未添加到stage
,因此stage为null,因此它在null上
speed = new int(stage.stageHeight)
要解决此问题,请将Square的绘制功能传递给stage
...或者,这似乎是更好的解决方案,给定您要做的事情,添加调用(这是Square实例)在绘制之前暂存。