在Actionscript 3中,在不移动对象的情况下推送对象的宽度



我正试图为MovieClip对象的width属性应用tween,但每次它都会更改宽度和位置,我不希望这样。我想在不改变对象的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);

我认为它是根据电影剪辑的中心应用变换。但我不知道怎样才能改变。

有什么帮助吗?

您的问题是您没有正确绘制电影剪辑,并且它的边界框没有从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是电影剪辑中图像的一部分。

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

是的,事实上,当推特它的宽度时,该对象会改变位置,这表明它的注册点相对于该对象不在坐标0上。解决方案是:

  1. 如果有可能,请更改对象的注册点。可能通过Flash IDE或程序设置组件,例如相对于对象,reg点将位于0。

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

这个小片段解释说,把它翻译成粗花呢应该很容易:

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轴上)时,这种方法才能很好地工作。

最新更新