0

所以我正在制作一个音乐可视化器,我正在尝试将我的图形的线条样式设置为预定义的颜色!但是尝试时出现错误

var lineColor:Color = new Color(120,120,12);
graphics.lineStyle(lineThickness, lineColor);

1067:将 fl.motion:Color 类型的值隐式强制转换为不相关的类型 uint。

所以我尝试了

var lineColor:Color = new Color(120,120,12);
graphics.lineStyle(lineThickness, lineColor.color);

lineColor.color总是返回 0!我该怎么办?我不敢相信没有内置 API 来获取颜色对象并使其成为兼容的图形十六进制 uint!

任何帮助将不胜感激!

4

1 回答 1

2

只需使用一种方法返回十六进制值。

function get_uint_from_colour(red:int, green:int, blue:int) {

    return red << 16 | green << 8 | blue;

}

所以在你的例子中:

graphics.lineStyle(lineThickness, get_uint_from_colour(120, 120, 12));

为了回应您关于需要使用一组预定义Color对象的评论,您仍然需要(在某些时候)将它们转换为类型uint,因为这是该lineStyle方法可接受的数据类型。

我的建议是调整get_uint_from_colour接受Color对象的方法。像这样:

function get_uint_from_colour(colour:Color) {

    return int(colour.redMultiplier) << 16 | int(colour.greenMultiplier) << 8 | int(colour.blueMultiplier);

}

所以在你的代码中:

graphics.lineStyle(lineThickness, get_uint_from_colour(lineColor));

请注意,我更改了原始方法的名称,因为我觉得它更好地描述了功能

另外,请记住,一个Color对象可以包含比标准十六进制颜色更多的关于自身的信息——这些多余的信息将在转换它的过程中丢失。

于 2013-08-02T15:10:23.087 回答