2010-11-19 26 views
0

Je veux centrer un grand MovieClip (1400 px de large) sur ma scène lors du redimensionnement de la scène. Ce grand se déplace MovieClip à droite sur certains événements je ne peux pas utiliser le code comme ceci:Actionscript 3 Centrer un objet en mouvement sur la scène redimensionner

currentPage.x = ((stage.stageWidth/2) - (currentPage.width/2)) 

Y at-il un moyen d'utiliser peut-être son décalage de 0 (le côté gauche de la scène « fenêtre ») et utiliser ce décalage dans le centrage?

Le movieclip change seulement en x.

Répondre

0

Lorsqu'un objet est redimensionné, nous pouvons dire que son échelle a changé. Les échelles sont agréables car elles nous permettent de travailler en pourcentages. Compte tenu de tout changement de pourcentage, nous pouvons appliquer le même changement à tout autre objet pour obtenir une position relative. Regardez ici:

var previousStageWidth:Number; 

public function handleResize():void { 
    //calculate the difference in stage with as a percentage 
    var widthScale:Number = previousStageWidth/stage.stageWidth; 

    //scale the x value by the same amount 
    myDisplayObject.x *= widthScale; 

    //update the previous value for the next resize 
    previousStageWidth = stage.stageWidth; 
} 

Espérons que cela fonctionne pour vous.

+0

de cette façon vous accumulerez des erreurs sur chaque redimensionnement ... – alxx

+0

De quel type d'erreurs parlez-vous? S'il vous plaît expliquer pour la question asker. –

+0

non, ce n'est pas pertinent pour les objets en mouvement. Oublie :) – alxx

0

Je préfère faire un sprite de conteneur pour tout le contenu. À l'intérieur du conteneur, tout est mesuré comme si la scène était toujours de 400x300 (ou toute autre taille fixe, quel que soit le format dont vous avez besoin). Lorsque la scène est redimensionnée, je le redimensionnement et le centrage que le récipient pour adapter à l'intérieur:

//not really tested because my real code is more complex, so watch out... 
var bounds:Rectangle = container.getRect(null); 
//scale factor to fit inside 
var scaleFactor:Number = Math.min(stage.stageWidth/bounds.width, stage.stageHeight/bound.height); 
container.scaleX = container.scaleY = scaleFactor; //scaling 
//centering 
container.x = (stage.stageWidth - container.width) * 0.5; 
container.y = (stage.stageHeight - container.height) * 0.5; 

De cette façon, vous pouvez gérer un certain nombre de clips dans le conteneur, pas seulement un. Le conteneur n'utilise pas tout l'espace d'écran, mais préserve les proportions. Si vous voulez utiliser tout l'espace de l'écran, vous devez penser à la disposition dynamique de votre scène - quelque chose que vous seul pouvez faire correctement.