我正在学习如何制作MovieClip课程。我所要做的就是让MovieClip能够使用左右箭头键移动,但它不起作用。
这是我的Document Class Main的代码:
package {
import flash.display.MovieClip;
public class Main extends MovieClip{
var blueBall:Ball = new Ball; //This is line 7
public function Main()
{
addChild(blueBall)
}
}
}
我的Ball类的代码是:
package
{
import flash.display.MovieClip;
import flash.events.KeyboardEvent;
import flash.ui.Keyboard;
public class Ball extends MovieClip
{
public function Ball()
{
stage.addEventListener(KeyboardEvent.KEY_DOWN, keyPressed); //This is Line 11
}
function keyPressed(evt:KeyboardEvent):void
{
switch (evt.keyCode)
{
case Keyboard.RIGHT :
this.x += 10;
break;
case Keyboard.LEFT :
this.x -= 10;
break;
}
}
}
}
当我在调试中运行它时,我收到此错误:
TypeError:错误#1009:无法访问空对象引用的属性或方法。 在Ball()[C:\ Users \ Joel \ Desktop \ Flash \ Projects \ DropClassTest \ Ball.as:11] 在Main()[C:\ Users \ Joel \ Desktop \ Flash \ Projects \ DropClassTest \ Main.as:7]
现在,如果我将我的Main文档类留空,只需将blueBall Movieclip拖放到库中,它就会按照我想要的方式工作,但是一旦我尝试使用文档类来执行它,它不起作用。
毋庸置疑,我很失落,甚至认为调试器告诉我哪些行是错误的。
有什么想法吗?
答案 0 :(得分:0)
问题是,在球被添加到舞台之前,您正试图从Ball类内部访问舞台。在将对象添加到舞台之前,它无法直接访问舞台。
选项1:您可以将舞台从主类传递给Ball构造函数。
将此添加到您的Ball类'导入:
import flash.display.Stage;
将舞台参数添加到Ball类的构造函数:
public function Ball(stage:Stage):void {
stage.addEventListener(KeyboardEvent.KEY_DOWN, keyPressed);
}
将舞台传递给Ball实例(在Main中)
var blueBall:Ball = new Ball(stage);
选项2:您可以在Ball类中侦听ADDED_TO_STAGE事件,并在ADDED_TO_STAGE发生后添加KEY_DOWN侦听器:
在Ball类中导入Event类:
import flash.events.Event;
用这个替换你的构造函数:
public function Ball():void {
addEventListener(Event.ADDED_TO_STAGE, addedToStage);
}
然后在ADDED_TO_STAGE侦听器中添加KEY_DOWN侦听器:
function addedToStage(evt:Event):void {
stage.addEventListener(KeyboardEvent.KEY_DOWN, keyPressed);
}