【问题标题】:Resizing HTMLLoader size lags behind position调整 HTMLLoader 大小滞后于位置
【发布时间】:2013-04-08 19:03:31
【问题描述】:

我正在尝试将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 内容是一个空的绿色页面,gallery.masker 是一个红色形状,在 HTMLLoader 上方有 50% 的 alpha。补间的扩展大约完成了一半。

(它不允许我发布图片,有人可以编辑吗?http://img571.imageshack.us/img571/3699/resizeq.png

编辑:http://www.mediafire.com/?5c2zkhmb6v9b61u 提供了一个最小示例(包含 CS6 .fla、所有源代码、.swf 和 app.xml)

【问题讨论】:

  • tweenW, tweenH, tweenX... 它们是全局变量还是函数级变量?我问是因为看起来垃圾收集器在完成工作之前正在从内存中删除这些补间对象。确保在这些补间对象完成之前保持对它们的引用。这是来自fl 包的补间引擎的常见问题。
  • 我使用嵌套函数。补间总是在完成,HTMLLoader 似乎跟不上。 private function SetupResize(/*vars*/) {/* ... */ var tweenX:Tween; /* .. */ function DoTween(t:Number) { /* tweens here */ } }

标签: actionscript-3 flash air tween


【解决方案1】:

fl 包中的补间引擎存在已知问题,应保留每个 Tween 对象的引用直到它完成,否则在大多数情况下,垃圾收集器会在这些对象完成继承工作之前将其删除。因此,目标/补间对象上的属性被冻结。

@Malik Drako 在您的情况下,您可以对 Tween 全局对象进行引用以保持它们始终处于活动状态,或者更灵活的方法是采用一个 Vector 并为引用创建一些拉机制,所以在第二种情况下,您无需命名每个 Tween 对象,同时您可以创建任意数量的 Tweens。

【讨论】:

  • 为了更清楚地说明你的函数何时完成执行(我大约是SetupResize()),它的变量符合垃圾收集器的条件。
  • 我已经看到了这个问题,但这不是这里发生的事情。在这里,补间总是完整的。
  • 我也试过在AS中手动更改大小,大小仍然滞后
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-08-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-04
  • 1970-01-01
  • 2011-05-15
相关资源
最近更新 更多