【问题标题】:AS3 Flash- Adding multiple different movieclips to stage from one classAS3 Flash - 从一个类中添加多个不同的影片剪辑到舞台
【发布时间】:2013-05-08 18:16:15
【问题描述】:

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

我的库中有 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

【问题讨论】:

    标签: actionscript-3 flash movieclip stage instances


    【解决方案1】:

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

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

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

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

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

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

    【讨论】:

    • 我不能将影片剪辑放到舞台上的原因是添加的影片剪辑各不相同。它们是根据存储在变量中的值添加的。我想我开始理解你答案的后半部分了。你是说'callItems'应该添加到自己而不是舞台上吗?你能给出一个小代码示例艾米吗?谢谢-马克
    • 附言。感谢您迄今为止的帮助,非常感谢
    • 只要您使用 new 运算符,其中的某个人就必须有对该类的引用,这将被编译到您的主类中,因为它知道它所知道的所有类about 正在使用,所以它是否在变量中并不重要。要将项目添加到 Calling,请将 stage 替换为 this
    • 谢谢艾米,这对我来说很有意义
    猜你喜欢
    • 2014-01-04
    • 2011-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-28
    • 1970-01-01
    • 2018-01-13
    • 2018-03-29
    相关资源
    最近更新 更多