Actionscript 3在舞台调整大小时居中移动对象

时间:2010-11-19 03:50:04

标签: flash actionscript-3 centering stage

我想在舞台大小调整中将一个大的电影剪辑(1400像素宽)放在我的舞台上。这个大影片剪辑在某些事件中向右移动,所以我不能使用这样的代码:

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

有没有办法可以使用从0开始的偏移(舞台'视口'的左侧)并使用偏移量来居中?

动画片段仅在x中发生变化。

2 个答案:

答案 0 :(得分:0)

调整对象大小时,我们可以说它的比例已经改变。秤很好,因为它们允许我们以百分比工作。给定任何百分比变化,我们可以将相同的变化应用于任何其他对象以获得相对位置。看这里:

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;
}

希望这对你有用。

答案 1 :(得分:0)

我更喜欢为所有内容制作容器精灵。在容器内部,一切都被测量为好像场景总是400x300(或任何其他固定大小,无论你需要什么样的宽高比)。当场景调整大小时,我正在调整大小并仅使容器居中以适应内部:

//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;

这样您就可以处理容器中的任意数量的剪辑,而不仅仅是一个。容器不使用所有屏幕空间,但保留纵横比。如果你想使用所有的屏幕空间,你必须考虑舞台的动态布局 - 只有你可以正常做的事情。