2014-07-03 32 views
0

我是新来的AS3,似乎忽略东西有关的类和/或定位。我在我的图书馆中有一个与名为'云'的类相关联的MovieClip(是的,云只是一片雨云的图片)。我想在舞台上添加云。我知道有两种方法可以做到这一点:添加影片剪辑到阶段

  1. 将它直接从库中拖到舞台上。
  2. 使用AS3将addChild添加到舞台。

当我使用“从库直接拖到舞台上”方法发布我的swf时,该类将工作。但是,当我尝试使用AS3方法时,它不起作用。

类如下:

package { 

    import flash.display.MovieClip; 
    import flash.events.KeyboardEvent; 

    public class cloud extends MovieClip { 

     public function cloud() { 
      stage.addEventListener(KeyboardEvent.KEY_DOWN,keyMapping); 
     } 
     private function keyMapping(event:KeyboardEvent):void { 
      if (event.charCode == 13) { 
       MovieClip(parent).testme.text = "hello world!"; 
      } 
     } 
    } 
} 

我一直在使用我的主时间轴的第1帧AS3:

stop(); 
var cloud_mc:cloud = new cloud(); 
addChild(cloud_mc); 

============ ================================================== ====================

建议的修复

类别:

package { 

    import flash.display.MovieClip; 
    import flash.events.KeyboardEvent; 

    public class cloud extends MovieClip { 

     public function cloud() { 
     } 
     public function tralala() { 
      stage.addEventListener(KeyboardEvent.KEY_DOWN,keyMapping); 
     } 
     private function keyMapping(event:KeyboardEvent):void { 
      if (event.charCode == 13) { 
       MovieClip(parent).testme.text = "hello world!"; 
      } 
     } 
    } 
} 

AS3:

stop(); 
var cloud_mc:cloud = new cloud(); 
addChild(cloud_mc); 
cloud_mc.tralala(); 

回答

1

使用库对象,而不是它扩展的类的链接名称。

您的库对象扩展了扩展影片剪辑的云类。如果你实例化云类,你会错过图书馆对象。

该过程在这里详细地描述:

http://help.adobe.com/en_US/ActionScript/3.0_ProgrammingAS3/WS5b3ccc516d4fbf351e63e3d118a9b8ea63-7fee.html

+0

链路张贴给出了一个详细说明。一个简短的版本是:右键单击库项目,确保勾选了[x]导出动作脚本,然后从“类”字段复制值并使用它代替云类。 –

+0

谢谢!我想我现在明白了,而且我刚刚修改了我原来的帖子并提供了一个建议的修复方法 - 我们正在谈论的是什么?建议的修复方法确实有效,但我只想确保我正确地/正确地执行此操作。 – Actionman

+0

看起来正确。只需要注意一点:您发布的代码对于类和库链接都具有相同的名称。这是允许的,但可能会导致混淆,如果您有多个库项目具有不同的链接ID,它们都会扩展相同的类。例如,你可以将8个不同的小行星图形命名为“asteroid1”到“asteroid8”,它们都扩展了Metroid类。在这种情况下,你需要做“新的metroid1()”而不是“新的Metroid()”。 –