需要一些小问题的帮助。我在AS3的数学上并不太热。我有一个Sprite作为另外两个精灵的容器。一个人有一张照片另一个人有一系列热点。
如果我改变图片的scaleX和scaleY,热点就不再排队了。您是否知道正确的等式,以便我设置的任何比例都能使热点出现在正确的位置?
我正在尝试这样的事情:
hotspot.x *= scaleFactor;
hotspot.y *= scaleFactor;
但我无法对它进行排序。
答案 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;
}
}