【问题标题】:ActionScript 3: How to move a TextField smoothly?ActionScript 3:如何平滑移动 TextField?
【发布时间】:2014-04-17 11:13:32
【问题描述】:

在我的程序中,我有一个在屏幕上滚动文本的功能。这工作正常,除了令人难以置信的滞后运动。我只是将速度添加到文本字段的 x 位置,并且移动动画适用于所有其他对象(电影剪辑、位图等)。

编辑:

我现在尝试将文本转换为位图,然后移动它。不幸的是,这导致了同样的“滞后”运动,伴随着许多突然的“跳跃”。

bmd = new BitmapData (event_field.width, event_field.height, true, 0);
bmd.draw (event_field);

bm = new Bitmap (bmd);
bm.x = event_field.x;
bm.y = event_field.y;
bm.cacheAsBitmap = true;
bm.smoothing = true;
this.addChild(bm);

在我的输入框功能中:

bm.x-=3

有人对此有解决方案吗?

【问题讨论】:

  • 你能不能也展示一下你是怎么做动画的?因为也许你的动画滞后是由于你尝试动画的方式

标签: actionscript-3 optimization textfield smooth-scrolling


【解决方案1】:

不平滑文本字段可能会提高性能,但根据我的经验,使用本机 TextField 类具有无法真正克服的性能限制。文本的实时渲染是昂贵的。将该文本实时渲染到 bitmapData 也可能很昂贵,并且只有在文本没有太大变化时才真正有益。无论如何,cacheAsBitmap 应该已经自动执行了。

要克服这两个问题,您应该考虑使用位图字体。这些是预渲染的,解决了上述两个问题。但是,原生 API 不支持。

我知道的两个选项:

  1. BMFontRenderer。一些应该提供支持的类 用于位图字体渲染。我没有尝试过,所以我不能保证 它。
  2. 为您的整个项目使用Starling,其中包括 对位图字体和距离场字体的出色支持 (可缩放位图字体)。它是一个 2D 硬件加速框架, 所以这只是冰山一角 提供。我现在将它用于所有事情,但对于您的项目来说,从原生框架切换到另一个框架可能为时已晚。

要生成位图字体,这些是Starling Manual 推荐的一些工具。我个人使用 Littera 和 BMFont:

【讨论】:

    【解决方案2】:

    您可以尝试嵌入字体或动画位图而不是文本字段

    • 在动画开始之前创建文本字段的快照,
    • 隐藏文本字段
    • 动画快照
    • 在动画结束时将不可见的文本字段移动到目标位置,销毁快照并显示文本字段

    【讨论】:

    • 感谢您的回复。然而,这是行不通的,因为这个概念需要文本动态变化..
    • 除非你尝试,否则它不会起作用:) Animated 是包含 BitmaData 的 Bitmap 对象,你可以在制作动画时对其进行修改。
    • 好吧。但是,例如,我如何为我的文本字段创建“快照”?
    • 使用 BitmapData 的draw 函数。
    • 为了使其不可见,您不必使用可见或 alpha 属性,只需将其从舞台上移除即可:) 它简化了绘图,因为您不必使其可见以进行绘图
    猜你喜欢
    • 2023-01-30
    • 1970-01-01
    • 2016-05-13
    • 2015-07-01
    • 1970-01-01
    • 2017-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多