2013-04-08 84 views
0

我正在尝试调整大小并将HTMLLoader重新定位相同数量,但HTMLLoader的大小始终落后于位置至少一帧。位置和大小都变化相同的数量。在手动更改大小和使用补间时都会发生这种情况。我试图拖延控制位置的补间,这有时会有所帮助,但其他时间会使情况变得更糟。调整HTMLLoader大小的大小滞后于位置

吐温代码:

// t is the time, 0.5 in this case 
// ease is the easing function, I tried linear and Regular.easeInOut 
tweenW = new Tween(gallery.masker, "width", ease, gallery.masker.width, (full ? largeX : smallX), t, true); 
tweenH = new Tween(gallery.masker, "height", ease, gallery.masker.height, (full ? largeY : smallY), t, true); 
tweenX = new Tween(gallery.masker, "x", ease, gallery.masker.x, (full ? -posX : 0), t, true); 
tweenY = new Tween(gallery.masker, "y", ease, gallery.masker.y, (full ? -posY : 0), t, true); 
tweenBX = new Tween(border, "x", ease, border.x, (full ? 0 : posX), t, true); 
tweenBY = new Tween(border, "y", ease, border.y, (full ? 0 : posY), t, true); 
tweenBW = new Tween(border, "width", ease, border.width, (full ? largeX * borderMultX : smallX * borderMultX), t, true); 
tweenBH = new Tween(border, "height", ease, border.height, (full ? largeY * borderMultY : smallY * borderMultY), t, true); 

HTMLLoader调整大小代码(Event.EXIT_FRAME):

loader.width = gallery.masker.width; 
loader.height = gallery.masker.height; 
loader.x = gallery.masker.x; 
loader.y = gallery.masker.y; 

显示时,的gallery.masker大小是正确的,但HTMLLoader仍落后

例如:

HTML c意图是一个空的绿色页面,gallery.masker是一个红色的形状与HTMLLoader上面的50%阿尔法。补间大约完成了一半。

(它不是让我发表图片,可能有人请编辑此http://img571.imageshack.us/img571/3699/resizeq.png?)

编辑:小例子可在http://www.mediafire.com/?5c2zkhmb6v9b61u(含有CS6的.fla,所有源,.swf和app.xml中)从fl

+0

'tweenW,tweenH,tweenX ...'它们是全局变量或函数级变量吗?我问,因为看起来像垃圾收集器正在从内存中删除这些补间对象,在他们完成工作之前。确保您在这些补间对象上保留参考,直到它们完成。这是来自'fl'包的补间引擎的常见问题。 – ggat 2013-04-08 20:35:37

+0

我使用嵌套函数。补间总是完成,'HTMLLoader'似乎不能正常保持。 'private function SetupResize(/ * vars * /){/ * ... */var tweenX:Tween;/* * */function doTween(t:Number){/ * tweens here * /}}' – 2013-04-08 20:39:12

回答

0

补间引擎已经知道的问题,各Tween对象引用应保持,直到它完成,否则在大多数情况下,垃圾收集器删除这些对象才可以完成继承人的工作。因此目标/补间物体的属性被冻结。

@Malik Drako在你的情况,你可以在Tween使引用的对象全球,让他们永远活着,或更灵活的方式将是采取一个Vector,并为引用一些拉机制,所以在第二种情况下,你不需要命名每个Tween对象,同时您可以根据需要创建任意数量的Tween

+0

为了让你的函数完成执行更清晰(我是'SetupResize()')垃圾收集器。 – ggat 2013-04-08 20:59:16

+0

我已经看到这个问题,但这不是在这里发生的事情。在这里,补间总是完成。 – 2013-04-08 21:24:52

+0

我也尝试手动更改AS中的大小,并且大小仍然滞后 – 2013-04-17 01:57:58