我无法从 AS3 类文件控制舞台中的 MovieClip

Posted

技术标签:

【中文标题】我无法从 AS3 类文件控制舞台中的 MovieClip【英文标题】:I can't control MovieClip in the stage from AS3 class file 【发布时间】:2018-04-24 13:49:24 【问题描述】:

我在我的 fla 文件中创建了一个符号 (MovieClip) 并将其添加到框架中。然后我在属性面板上给它实例名称:“myMC”

然后尝试从我的目录中的类文件控制它:root\Test\MyClass.as

package Test 
    import flash.display.MovieClip;

    public class MyClass extends MovieClip
        public function MyClass() 
            var myMC:MovieClip = getChildByName("myMC") as MovieClip;
            myMC.gotoAndStop(2);
        
    

之后,将类导入fla并尝试运行:

import Test.MyClass;
var LaunchMyClass:MyClass = new MyClass();

并得到这个错误,

TypeError: Error #1009: Cannot access a property or method of a null object reference.

at Test::MyClass()
at Test_fla::MainTimeline/frame1()

请注意,我正在尝试控制舞台中的 MovieClip,而不是从库中调用它。

【问题讨论】:

【参考方案1】:

首先,请务必发布您在问题中收到的错误消息。让事情变得更容易。

但是现在让我们看看你的脚本:

我在我的 fla 文件中创建了一个符号 (MovieClip) 并将其添加到 框架。然后我将它添加为一个孩子使用 addChild(myMC);

如果您将它放在舞台上并给 MovieClip 一个 Instancename,则无需调用 addChild。

在 as3 中,以大写字母开头的类名很方便,因此不要将 myClass 称为 MyClass。

您的包缺少构造函数,函数的名称必须与类名和 .as 文件名相同。

getChildByName() 方法需要一个字符串,因此您必须将 myMc 括在引号中

package  
    import flash.display.MovieClip;


    public class MyClass extends MovieClip 

        // Constructor
        public function MyClass() 
            // constructor code
            var myMC:MovieClip = getChildByName("myMC") as MovieClip;
            myMC.gotoAndStop(2);
        
        // End Constructor
    


【讨论】:

我试过你说的,但又出现了另一个问题。编辑帖子以获取详细信息。 好吧,我以为你使用 MyClass.as 作为你的 fla 的文档类。您到底想实现什么,MyClass 的目的是什么? @theRaggedyMan 我正在尝试使用 MyClass 控制场景中的影片剪辑。我有一个包含许多电影剪辑的复杂游戏。我曾经通过 fla 文件控制它们,但代码及时变得混乱,所以我想使用类来分离我的代码。

以上是关于我无法从 AS3 类文件控制舞台中的 MovieClip的主要内容,如果未能解决你的问题,请参考以下文章

当添加到另一个 AS 类文件的舞台时,AS3 访问 MovieClip

从 AS3 文件动态添加 Flash 组件到舞台

如何阻止扩展舞台的动画剪辑的边缘进入 AS3 中的舞台边界?

Flash as3 将一个类中的方法调用到另一个放在舞台上的类。

ActionScript 3 AS3:安全地从舞台上删除内容

flash AS3 如何删除舞台事件侦听器