Flash AS3 - Comment faire pour centrer un objet autour d'un point d'après l'échelle

J'ai créé un mc qui fonctionne comme ma carte et des contrôles pour aller avec ce qui permettra la carte pour être déplacés et les principaux points de naviguer et de zoomer sur à différents niveaux de zoom.

Je suis en utilisant les propriétés scaleX et scaleY à l'échelle de la carte mc et une liste de positions x et y pour positionner correctement la carte pour chaque point clé.

Quand je veux aller à un certain domaine, j'ai effectuer ce calcul (offsetX et offsetY sont au centre de l'écran):

newX = posX * scale + offsetX;
newY = posY * scale + offsetY;

Puis je interpolation de la position et l'échelle de la carte de la douceur, de l'échelle et déplacer la carte à la position correcte:

var tween = new TweenLite(_background, EASING_SPEED, {x:newX, y:newY,scaleX:scale.getScale(),scaleY:scale,ease:EASING_TYPE,onComplete:moveToComplete,onCompleteParams:[room]});

J'ai maintenant besoin de mettre en œuvre un zoom in /out de fonction et c'est ce que je suis aux prises avec. Le zoom doit utiliser le centre de l'écran, comme le reg point pour l'échelle, alors j'ai essayé quelque chose le long des lignes de ce qui suit pour obtenir le positionnement correct:

var newX = offsetX - (offsetX - _background.x) * scale;
var newY = offsetY - (offsetY - _background.y) * scale;

Donc, dans mon esprit, c'obtient la distance à partir de la position actuelle de la carte par rapport au point central de l'écran (offsetX, offsetY) puis des échelles de distance par la nouvelle échelle.

Cependant, ce qui est manifestement faux, car il ne fonctionne pas et le positionnement de la carte est fausse.

J'ai aussi essayé d'utiliser une matrice de transformation pour obtenir les bonnes valeurs, mais je sais encore moins sur eux et de ne pas obtenu les résultats escomptés.

function scale(target:MovieClip, center:Point, scale:Number):Point {
    var m:Matrix = new Matrix();
    m.translate(-center.x, -center.y);//move the center into (0,0)
    m.scale(scale, scale);//scale relatively to (0,0) (which is where our center is now)
    m.translate(center.x, center.y);//move the center back to its original position
    return m.transformPoint(new Point());//transform (0,0) using the whole transformation matrix to calculate the destination of the upper left corner
}

Si quelqu'un pourrait jeter quelque lumière sur l'endroit où je vais mal, je lui en serais vraiment reconnaissante!

InformationsquelleAutor eb_Dev | 2011-10-27