0

我正在使用 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 格式。

4

1 回答 1

1

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

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

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

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

于 2014-07-28T17:50:31.437 回答