补间对象的宽度而不移动Actionscript 3中的对象

时间:2012-02-23 22:15:51

标签: flash actionscript-3 flash-cs5

我正在尝试对MovieClip对象的width属性应用补间,但每次更改宽度和位置时,我都不希望这样。我想改变宽度,而不改变对象的x和y。

我尝试了两个并且他们给出了相同的结果。

var c:Tween = new Tween(left, "scaleX", Strong.easeOut, 1, 1.5,20,true);
var c:Tween = new Tween(left, "width", Strong.easeOut, 20, 200,20,true);

我认为它是根据影片剪辑的中心应用转换。但我不知道如何改变它。

任何帮助?

2 个答案:

答案 0 :(得分:2)

你的问题是你没有正确地绘制你的影片剪辑而且它的边界框不能从x,y,0开始;
你可以做什么
1.修复影片剪辑以使图形处于0,0位置。
要么
2.将“左”对象放在位置0,0和比例位置的另一个对象内。
要么
3.在重新调整大小动画时,您也可以按比例移动x坐标

var c:Tween = new Tween(left, "width", Strong.easeOut, 20, 200,20,true);
var c1:Tween = new Tween(left, "x", Strong.easeOut, left.x, left.x+delta*200/(2*20),20,true);


其中delta是影片剪辑中的图像。

答案 1 :(得分:0)

首先,回避默认的Tween引擎。有更好的替代方案(这是主要原因,默认的Tween引擎在很长一段时间内没有得到平台开发人员的任何关注)。有些可能性可能是found here,也可能是网络上的。

是的,事实上,该对象在补间时改变位置,显示它的注册点不在相对于该对象的坐标0上。解决方案是:

  1. 如果有可能,请更改对象的注册点。也许通过Flash IDE或以编程方式放置组件,例如reg point将相对于对象为0。

  2. 每次迭代都将它向右移动一半的扩展值。

  3. 这个小片段解释说,将其翻译成补间应该很容易:

    this.addEventListener(Event.ENTER_FRAME, _loop);
    function _loop(event:Event):void
    {
        derp.width += 10; // every iteration makes width 10 px bigger
        derp.x += 5; // 10 / 2 = 5; might want to calculate this dynamically.
    }
    

    请记住,如果注册点位于对象的死点(x轴上),这只能很好地工作。