Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/flash/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flash 如何与独立类中的所有类实例进行交互?_Flash_Actionscript 3_Actionscript - Fatal编程技术网

Flash 如何与独立类中的所有类实例进行交互?

Flash 如何与独立类中的所有类实例进行交互?,flash,actionscript-3,actionscript,Flash,Actionscript 3,Actionscript,我最近在编程时遇到了死胡同,我终于意识到我所有的代码都被破坏了,因为我不知道如何从一个类与另一个类的实例交互。以下是我尝试做的要点: if(this.hitTestObject(targetClip)){ trace("hit!"); } 问题是,如果我处理画布上的单个实例,我将获得“对未定义属性targetClip的访问权”,即使document类可以很好地与其交互。如果我将targetClip的类文件作为目标,我会得到“将clas

我最近在编程时遇到了死胡同,我终于意识到我所有的代码都被破坏了,因为我不知道如何从一个类与另一个类的实例交互。以下是我尝试做的要点:

        if(this.hitTestObject(targetClip)){
           trace("hit!");
           }

问题是,如果我处理画布上的单个实例,我将获得“对未定义属性targetClip的访问权”,即使document类可以很好地与其交互。如果我将targetClip的类文件作为目标,我会得到“将class类型的值隐式强制为不相关的flash.display:DisplayObject类型”。这也不仅仅是hitTest的问题,我在其他操作中也遇到了这个问题,所以我无法理解一些基本语法。请告诉我我遗漏了什么。

您需要记住,单独的类彼此之间不了解任何信息。要从不同的类(类B)访问变量(例如,在类a中),您需要在类B中创建一个“getter”方法:

getVariable(){return variable;}

并从类A中静态(B.getVariable())或动态(B bbb=new B();bbb.getVariable();)调用该方法


接近显式方向的类为了访问其他类中保存的信息,您需要记住,单独的类彼此不了解任何信息。要从不同的类(类B)访问变量(例如,在类a中),您需要在类B中创建一个“getter”方法:

getVariable(){return variable;}

并从类A中静态(B.getVariable())或动态(B bbb=new B();bbb.getVariable();)调用该方法


接近显式方向的类,以便访问其他类中保存的信息

我不是100%同意您的问题,但我假设您要求的是一种从“ClassA”的任何一个实例调用“ClassB”的所有实例上的hitTestObject的方法,对吗?比如让子弹物体检查它是否击中任何玩家物体

如果这确实是个问题,那么就没有一个类的所有实例的“全局列表”(据我所知)。然而,这并不能阻止您自己使用类实例的静态向量来完成这项工作。但请注意,这需要对代码进行比正常情况更多的清理。下面是一个使用子弹和播放器的快速示例

class Bullet extends Sprite //or w/e it is your objects extend
{
    public Bullet()
    {
    }

    public function checkCollisionsWithPlayers() : void
    {
        for(var i : int = 0; i < Player.AllPlayers.length; ++i)
        {
            var player : Player = Player.AllPlayers[i];
            if(this.hitTestObject(player))
            {
                trace("hit!");
            }
        }
    }
}

class Player extends Sprite
{
    static public const AllPlayers : Vector.<Player> = new Vector.<Player>();

    public Player()
    {
        AllPlayers.push(this);
    }

    //remove unused Players from the AllPlayers list
    public function free() : void
    {
        var index : int = AllPlayers.indexOf(this);
        if(index >= 0)
        {
            AllPlayers.splice(index, 1);
        }
    }
}
class-Bullet扩展Sprite//或w/e它是您的对象扩展
{
公众子弹()
{
}
公共函数checkCollisionsWithPlayers():void
{
for(变量i:int=0;i=0)
{
所有参与者。拼接(索引,1);
}
}
}
这允许您拥有一个创建的所有玩家的列表。在子弹的任何实例上调用checkCollisionsWithPlayers函数将检查所有当前实例化的玩家对象是否命中


但是,如果您不在未使用的播放器不再使用时调用free()函数来清理它们,这将导致内存泄漏(因为向量在实例上保留一个引用,该引用不允许垃圾收集器清理内存,更不用说它可能会返回对死亡播放器的错误命中)。如果您使用这样的模式来正确清理列表,请务必小心,因为它很容易出现错误。

我不是100%同意您的问题,但我假设您要求的是一种从“ClassA”的任何一个实例调用“ClassB”的所有实例上的hitTestObject的方法,对吗?比如让子弹物体检查它是否击中任何玩家物体

如果这确实是个问题,那么就没有一个类的所有实例的“全局列表”(据我所知)。然而,这并不能阻止您自己使用类实例的静态向量来完成这项工作。但请注意,这需要对代码进行比正常情况更多的清理。下面是一个使用子弹和播放器的快速示例

class Bullet extends Sprite //or w/e it is your objects extend
{
    public Bullet()
    {
    }

    public function checkCollisionsWithPlayers() : void
    {
        for(var i : int = 0; i < Player.AllPlayers.length; ++i)
        {
            var player : Player = Player.AllPlayers[i];
            if(this.hitTestObject(player))
            {
                trace("hit!");
            }
        }
    }
}

class Player extends Sprite
{
    static public const AllPlayers : Vector.<Player> = new Vector.<Player>();

    public Player()
    {
        AllPlayers.push(this);
    }

    //remove unused Players from the AllPlayers list
    public function free() : void
    {
        var index : int = AllPlayers.indexOf(this);
        if(index >= 0)
        {
            AllPlayers.splice(index, 1);
        }
    }
}
class-Bullet扩展Sprite//或w/e它是您的对象扩展
{
公众子弹()
{
}
公共函数checkCollisionsWithPlayers():void
{
for(变量i:int=0;i=0)
{
所有参与者。拼接(索引,1);
}
}
}
这允许您拥有一个创建的所有玩家的列表。在子弹的任何实例上调用checkCollisionsWithPlayers函数将检查所有当前实例化的玩家对象是否命中

但是,如果您不在未使用的播放器不再使用时调用free()函数来清理它们,这将导致内存泄漏(因为向量在实例上保留一个引用,该引用不允许垃圾收集器清理内存,更不用说它可能会返回对死亡播放器的错误命中)。如果您使用像这样的模式来正确清理列表,那么一定要小心,因为它非常简单