相对于已更改scaleX和scaleY的MovieClip定位对象

时间:2010-09-23 17:17:33

标签: flash actionscript-3

需要一些小问题的帮助。我在AS3的数学上并不太热。我有一个Sprite作为另外两个精灵的容器。一个人有一张照片另一个人有一系列热点。

如果我改变图片的scaleX和scaleY,热点就不再排队了。您是否知道正确的等式,以便我设置的任何比例都能使热点出现在正确的位置?

我正在尝试这样的事情:

hotspot.x *= scaleFactor;
hotspot.y *= scaleFactor;

但我无法对它进行排序。

1 个答案:

答案 0 :(得分:0)

您可以缩放容器而不是图片...假设热点与图片有关,将它们放在一个容器中是有意义的。如果您当前的容器包含任何其他元素,您应该仅为pic和spot创建一个新元素。

修改

pseudo code
hotspot1.x = pic.width * hx1;
hotspot1.y = pic.height * hy1;

你需要有一个在图片缩放后调用的函数

function onImageScaleComplete(event:Event):void
{
    updatePositions();
}

但是,在尚未缩放图片之前,您必须创建比例因子。

  //an array to contain the new scale factors 
  var factors:Array = [];

  //an array containing the hotspots
  var hotspots:Array = [hotspot1 , hotspot2 /*etc... */];

  function setPoints():void
  {
    for( var i:int ; i < hotspots.length ; ++i )
         factors[i] = { xfactor: hotspots[i].x/pic.width , 
                        yfactor: hotspots[i].y/pic.height };    

  }

然后你可以像这样更新,假设新的宽度&amp;高度 图片

  function updatePositions():void
  {
     for( var i:int ; i< hotspots.length ; ++i )
     {
       hotspots[i].x = factors[i].xfactor * pic.width;
       hotspots[i].y = factors[i].yfactor * pic.height;   
     }
  }