AS3 Flash-从一个类添加多个不同的动画片段

时间:2013-05-08 18:16:16

标签: actionscript-3 flash movieclip stage instances

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

我的图书馆里有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

1 个答案:

答案 0 :(得分:1)

首先,您有一种误解,即当您创建CallItems时(在ActionScript类名称中注释应该在带有初始大写字母的Camel案例中),CallItems使用的类将以某种方式显示不能编译到创建CallItems实例的类中。您的类使用直接引用的每个类的所有内容都将被编译。

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

  1. 将项目放在IDE中的舞台上,并为它们提供实例名称以匹配您使用的变量,并分配实现接口的基类。请注意,Class仍将被编译到swf中,因为它在swf中使用,但是你的actionscript代码不会直接了解它。
  2. 装入外部swf。该实现将编译到另一个swf。
  3. 现在,针对您的实际问题。您的CallItems实例正在添加到舞台,而不是添加到自身。因为它还没有被添加到舞台上(如果你要经历通过代码创建和添加所有内容的繁琐乏味的过程,我建议你的Engine将它添加到自己中而不是加入舞台。

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

    您可能还想考虑为什么要在calling中添加Engine,因为您可能认为calling已经在向舞台添加了它所做的事情(除了它没有没有参考舞台。)