【问题标题】:Using Starling and CitrusEngine classes with AIR将 Starling 和 CitrusEngine 类与 AIR 一起使用
【发布时间】:2014-07-28 16:54:31
【问题描述】:

我正在使用 AS3、Citrus Engine 和 Starling 创建 AIR 应用程序。以下是创建 TextField 的两个不同概念:

/* 
Using native AS3 component.
import flash.text.TextField; 
*/
var meaningTitle = new TextField();
meaningTitle.text = 'Meaning';
addChild(meaningTitle);

/* 
Using Starling framework.
import starling.text.TextField; 
*/
var meaningTitle = new TextField(0, 0, 'Meaning');
addChild(meaningTitle);

通过使用 Starling 框架,我无法实现 AS3 TextField 的文本格式和其他很酷的功能。如果我使用本机 AS3 组件创建 TextField,然后将其添加到场景中,我会收到此错误:

Type Coercion failed: cannot convert flash.text::TextField@37aada9 to starling.display.DisplayObject.

我找到了一个解决方案,它说我必须使用这个:

... as DisplayObject

但是这个解决方案也行不通。请帮我。我想要的只是 TextField 格式。

【问题讨论】:

    标签: actionscript-3 air starling-framework citrus-engine


    【解决方案1】:

    Starling 或任何基于 Stage3D 的框架与经典 Flash DisplayObject 不兼容。这就是为什么 addChild() 失败并且 DisplayObject 也失败了,因为它们不是同一类型的对象。 Starling 通过为相应的对象提供完全相同的类名,使初学者变得更糟。所以首先,不要难过,之前在使用 Starling 的时候,已经有几十个初学者落入了同名陷阱。

    现在解决您的问题,使用经典的 TextField,按照您想要的方式对其进行格式化,然后将其绘制到 BitmapData 并在 Starling Image 中将其传递给 Starling(使用 Texture.fromBitmapData())。 Starling TextField 的存在只是为了方便,因为它仅用于非常基本的用途。

    可以使用 Feather 框架(一种基于 Starling 的组件框架)找到更高级的 TextField。

    最后一点建议,因为您是初学者,请不要使用 Citrus,您可能会这样做,因为您认为这是每个人都在做的事情,但那将是一个错误。 Citrus 是一个非常弱类型的框架,这通常使初学者更难完成任何事情。许多专业人士也无法使用它,因为它到处都是弱类型。这是 imo 一个被高估的框架。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-10-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-14
      • 2023-03-31
      • 1970-01-01
      相关资源
      最近更新 更多