我到处搜索,找不到这个问题的答案,我会尽力解释。
我的图书馆里有2个动画片段,'Bluknife'和'cat'(这是一个RPG游戏。)。这两个动画片段都链接到同名的as3类。
我知道我可以通过在文档类中包含以下代码将这两个项目添加到舞台中:
var knife:BluKnife = new BluKnife();
stage.addChild(knife);
knife.x = stage.stageWidth / 2;
knife.y = stage.stageHeight / 2;
var ct:cat = new cat();
stage.addChild(ct);
ct.x = stage.stageWidth / 2;
ct.y = stage.stageHeight / 2;
但是我不希望所有这些东西都在文档类中,所以我创建了另一个类,我想用它来调用所有这些东西到舞台并命名为callitems
:
package
{
import flash.display.MovieClip;
import flash.display.MovieClip;
import flash.display.Stage;
public class callitems extends MovieClip
{
public function callitems()
{
var knife:BluKnife = new BluKnife();
stage.addChild(knife);
knife.x = stage.stageWidth / 2;
knife.y = stage.stageHeight / 2;
var ct:cat = new cat();
stage.addChild(ct);
ct.x = stage.stageWidth / 2;
ct.y = stage.stageHeight / 2;
}
}
}
我只是想知道如何从我的文档类中调用callitems
类?我尝试过一些事情,比如创建一个callitems
的实例并将其添加到文档类的舞台上(我并不感到惊讶,因为它不起作用)。这是功能:
public function Engine()
{
var calling:callitems = new callitems();
stage.addChild(calling);
}
我收到以下错误: TypeError:错误#1009:无法访问空对象引用的属性或方法。 在callitems() 在Engine()
我的文档类名称为Engine
答案 0 :(得分:1)
首先,您有一种误解,即当您创建CallItems
时(在ActionScript类名称中注释应该在带有初始大写字母的Camel案例中),CallItems
使用的类将以某种方式显示不能编译到创建CallItems
实例的类中。您的类使用直接引用的每个类的所有内容都将被编译。
要解决这个问题,您需要编程到Interfaces,并让您的Document Class只知道Interface。我知道有两种方法可以填充接口类型的变量,而文档类没有对实现的引用。
现在,针对您的实际问题。您的CallItems
实例正在添加到舞台,而不是添加到自身。因为它还没有被添加到舞台上(如果你要经历通过代码创建和添加所有内容的繁琐乏味的过程,我建议你的Engine
将它添加到自己中而不是加入舞台。
显示对象在添加到显示列表中的内容之前没有对舞台的引用。
您可能还想考虑为什么要在calling
中添加Engine
,因为您可能认为calling
已经在向舞台添加了它所做的事情(除了它没有没有参考舞台。)