2013-05-08 47 views
0

我到处搜索,找不到这个问题的答案,我会尽我所能解释它。AS3 Flash-在一个类中添加多个不同的影片剪辑到舞台

我在我的图书馆里有两个动画片段,'Bluknife'和'cat'(这是一款RPG游戏)。这两个movieclip都链接到相同名称的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); 

     } 

我得到了以下错误: 类型错误:错误#1009:无法访问空对象引用的属性或方法。 在callitems() 在引擎()

我的文档类的名称是Engine

回答

1

首先,你有一个误解,当你创建在ActionScript类名称的CallItems(注意应在驼峰与初始资本leter),不知何故CallItems使用的类将不编译到创建CallItems实例的类。所有由您的类直接引用的每个类都使用编译。

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

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

现在,你的实际问题。您的CallItems实例正在添加到舞台上,而不是自身。由于它尚未添加到舞台上(如果您要通过代码创建和添加所有内容来完成繁琐乏味的过程,我建议您将其添加到自身中),而不是添加到舞台上。

显示对象直到它们被添加到显示列表中的某个东西后才会对该阶段有所参考。

您可能还想考虑为什么要在Engine中添加calling,因为您大概认为calling已将其在舞台上添加的东西(除非它没有对舞台的引用)。

+0

我不能将电影剪辑放在舞台上的原因是添加的电影剪辑各不相同。它们根据存储在变量中的值添加。 我想我开始明白你的答案的后半部分。你是说'callItems'应该加入自己而不是阶段?你能给出一个小代码例子艾米? 谢谢 -Mark – 2013-05-09 03:25:17

+0

PS。感谢您的帮助到目前为止,非常感谢 – 2013-05-09 03:39:26

+1

只要您使用新的操作符,那里的某个人就必须具有对该类的引用,并且它将被编译到您的主类中,因为它知道所有它知道正在使用的类,因此它是否在变量中并不重要。要添加项目到'Calling',用'this'替换'stage'。 – 2013-05-10 02:57:27