[英]AS3: Can't create Movieclip class instance?
我只是在学习如何使用一些非常基本的代码在 AS3 中使用类,我正在努力弄清楚如何做最简单的事情。
我已将文档类设为“Test”类(本质上是我的主类),我试图用它做的就是将“WhiteBall”类(影片剪辑)的一个实例添加到舞台上。
'WhiteBall' 类应该允许我用键盘控制影片剪辑。 我不知道这部分是否有效,因为我不断收到此错误:
类型错误:错误 #1009:无法访问空对象引用的属性或方法。 在 WhiteBall$iinit()[/Users/Owner/Desktop/Animation/Coding/WhiteBall.as:13] 在 Test$iinit()[/Users/Owner/Desktop/Animation/Coding/Test.as:11]
这是“测试”类的代码:
package {
import flash.display.MovieClip;
import flash.events.Event;
import flash.events.KeyboardEvent;
import flash.ui.Keyboard;
public class Test extends MovieClip
{
var whiteBall:WhiteBall = new WhiteBall ();
public function Test() {
addEventListener(Event.ENTER_FRAME, whiteBallSpawn);
}
public function whiteBallSpawn(evt:Event) {
stage.addChild(whiteBall);
whiteBall.x = 200;
whiteBall.y = 250;
}
}
}
这是“WhiteBall”类的代码:
package {
import flash.display.MovieClip;
import flash.events.Event;
import flash.events.KeyboardEvent;
import flash.ui.Keyboard;
public class WhiteBall extends MovieClip
{
public function WhiteBall() {
stage.addEventListener(KeyboardEvent.KEY_DOWN, keysdown);
}
public function keysdown(mykey:KeyboardEvent) {
if(mykey.keyCode==Keyboard.UP) {
this.y--;
}
if(mykey.keyCode==Keyboard.DOWN) {
this.y++;
}
if(mykey.keyCode==Keyboard.RIGHT) {
this.x++;
}
if(mykey.keyCode==Keyboard.LEFT) {
this.x--;
}
}
}
}
'Test' 类中的第 11 行错误是指这一行:
var whiteBall:WhiteBall = new WhiteBall ();
我不知道这里有什么问题。 您能给我的任何帮助将不胜感激。
Organis 所说的是这样的:当您创建一个 DisplayObject,例如一个 MovieClip,它是您的 WhiteBall 扩展的类,那么该对象的 stage 属性为空。 这意味着当您尝试在其构造函数上访问白球的 stage 属性时
public function WhiteBall()
{
stage.addEventListener(KeyboardEvent.KEY_DOWN, keysdown);
}
因为 stage 为空,所以抛出了一个错误。 所以要解决这个问题,最安全和最常见的方法是等到球被添加到舞台上,然后监听任何舞台键盘事件。 像这样:
public function WhiteBall()
{
if(stage != null)
{
stage.addEventListener(KeyboardEvent.KEY_DOWN, keysdown);
}
else
{
this.addEventListener(Event.ADDED_TO_STAGE, addedToStage);
}
}
private function addedToStage(e:Event):void
{
this.removeEventListener(Event.ADDED_TO_STAGE, addedToStage);
stage.addEventListener(KeyboardEvent.KEY_DOWN, keysdown);
}
因此,当您的 Test 类实例将球添加到舞台时,您的 WhiteBall 实例的 stage 属性将具有一个值,因此可以安全地侦听任何键盘事件。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.