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