0

我到处搜索,找不到这个问题的答案,我会尽力解释。

我的库中有 2 个电影剪辑,“Bluknife”和“猫”(这是一个 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

4

1 回答 1

1

首先,您有一个误解,即当您创建一个CallItems(注意在 ActionScript 中的类名称应为驼峰式,首字母大写)时,CallItems使用的类不会以某种方式编译到创建CallItems实例的类中。您的 Class 直接引用的每个 Class 使用的所有内容都会被编译进去。

要解决这个问题,您需要对接口进行编程,并让您的文档类只知道接口。我知道有两种方法可以填充接口类型的变量,而不需要 Document Class 对实现的引用。

  1. 将项目放在 IDE 中的舞台上,并为它们指定实例名称以匹配您使用的变量,并分配一个实现接口的基类。请注意,Class 仍将编译到 swf 中,因为它在 swf 中使用,但您的 actionscript 代码不会直接了解它。
  2. 加载外部 swf。该实现将被编译到其他 swf 中。

现在,到你的实际问题。您的CallItems实例正在添加到舞台,而不是添加到自身。因为它还没有被添加到舞台(Engine如果你要经历通过代码创建和添加所有内容的繁琐而乏味的过程,我建议你将它添加到自己)而不是添加到舞台。

显示对象在添加到显示列表中的某些内容之前没有对舞台的引用。

您可能还想考虑为什么要添加callingin Engine,因为您可能认为这calling已经将它制作的东西添加到舞台(除了它没有对舞台的引用)。

于 2013-05-08T19:01:33.307 回答