1

次のコードは、ロード時に親クリップ「mapcontainer.themap」をジョージア州の中央に配置します。ただし、mapcontainer.themap をスケーリングしようとすると、ジョージアの中心部ではスケーリングされません。スケーリング時にジョージアを中心に保つにはどうすればよいですか?

//This sets the parent clip so it's centered on the child "georgia" clip on load
var yValue:Number = mapcontainer.themap.georgia.y;
var xValue:Number = mapcontainer.themap.georgia.x;
var xDiff:Number = mapcontainer.themap.width/2;
var yDiff:Number = mapcontainer.themap.height/2;
if (xDiff > stage.stageWidth/2 || yDiff > stage.stageHeight/2) {
    xValue = -xValue;
    yValue = -yValue;
}
mapcontainer.themap.x = xValue;
mapcontainer.themap.y = yValue;

//This line?
mapcontainer.themap.scaleX = mapcontainer.themap.scaleY = 2;
4

1 に答える 1

1

ここから派生した関数はここにあります

protected function scaleAround(objectToScale:DisplayObject, scalePoint:Point, scaleAmount:Number ):void {
    // scaling will be done relatively
    var relScaleX:Number = scaleAmount / objectToScale.scaleX;
    var relScaleY:Number = scaleAmount / objectToScale.scaleY;
    // map vector to centre point within parent scope

    scalePoint = objectToScale.localToGlobal( scalePoint );
    scalePoint = objectToScale.parent.globalToLocal( scalePoint );
    // current registered postion AB
    var AB:Point = new Point( objectToScale.x, objectToScale.y );
    // CB = AB - scalePoint, objectToScale vector that will scale as it runs from the centre
    var CB:Point = AB.subtract( scalePoint );
    CB.x *= relScaleX;
    CB.y *= relScaleY;
    // recaulate AB, objectToScale will be the adjusted position for the clip
    AB = scalePoint.add( CB );
    // set actual properties
    objectToScale.scaleX *= relScaleX;
    objectToScale.scaleY *= relScaleY;
    objectToScale.x = AB.x;
    objectToScale.y = AB.y;
}

あなたのシナリオでは、これを行うことができます:

scaleAround(mapcontainer.themap,new Point(mapcontainer.themap.georgia.x,mapcontainer.themap.georgia.y),2)
于 2012-09-24T20:08:37.570 に答える