将对象的新实例添加到数组中的每个对象

时间:2012-11-09 05:59:25

标签: actionscript-3 flash

我有一组电影剪辑highlights[i],我想为每个对象添加一个矩形命中区域精灵。如何在不引起命名冲突的情况下执行此操作?

for (var i:int = 0; i < highLights.length; i++)
                {
                    this[i + 'Zone'] = new HitZone(highLights[i].x, highLights[i].y, highLights[i].width, highLights[i].height));
                    highLights[i].addChild(this[i + 'Zone']);
                    addChild(highLights[i]);
                }

3 个答案:

答案 0 :(得分:0)

要设置Sprites或MovieClip hitArea,您需要将指定的精灵分配给它的hitArea属性,如answered here

例如。 hilights[i].hitArea = this[i +"Zone"];

您不应该以数字i开头命名变量。 Name guidelines here

你还在其他地方使用这个动态属性吗?如果不是这样使用局部变量:

var _oHitZone:HitZone;
var _oHilight:MovieClip;//assume that it is MovieClip
for (var i:int = 0; i < highLights.length; i++)
{
    _oHilight = hilights[i];
    _oHitZone = new HitZone(_oHilight.x, _oHilight.y, _oHilight.width, _oHilight.height));
    _oHilight.addChild(_oHitZone);
    _oHilight.hitArea = _oHitZone;
    addChild(_oHilight);
}

这应该有帮助

答案 1 :(得分:-1)

使用数组存储HitZones。

var zones:Array = [];
var zone:HitZone;
for (var i:int = 0; i < highLights.length; i++)
            {
                zone = new HitZone(highLights[i].x, highLights[i].y, highLights[i].width, highLights[i].height));
                zones.push(zone); 
                highLights[i].addChild(zone);
                addChild(highLights[i]);
            }

如果您不需要存储区域而不是不创建数组。

答案 2 :(得分:-1)

var hitZone:HitZone;
for (var i:int = 0; i < highLights.length; i++)
{
  hitZone = new HitZone(highLights[i].x, highLights[i].y, highLights[i].width, highLights[i].height));
  highLightsthis[i + 'Zone'] = hitZone;
  addChild(hitZone );
}