Skip to content

Color

概览

字段
KindData · 数据 Data
Realmcommon

Color 是 RGBA 颜色类型,用于表示带透明度的颜色值。它提供红、绿、蓝、不透明度四个分量,并支持颜色插值、分量极值比较等运算。

适用场景

常用于设置 UI 元素的颜色属性(如文本颜色、描边颜色、阴影颜色)或光照服务的环境色,通过 Color.New 构造颜色实例后赋值给对应属性。

使用要点

通过 Color.New(r, g, b, a) 或简写 Color(r, g, b, a) 创建颜色实例,四个参数均为 0~255 的整数。然后可将实例赋值给 UI 组件的颜色属性,或调用 Intrp、Min、Max 等方法进行颜色运算。

注意事项

Color 是 RGBA 颜色类型,四个分量统一取 0~255 整数(与 SDK ColorUtils.IsValidRGB 一致):红色=Color.New(255,0,0,255),半透明绿=Color.New(0,255,0,128)。类型名是 Color 不是 ColorType。Color.New 必须传 4 个参数 Color.New(r, g, b, a),缺省 alpha 会报错或被识别为无效构造。与 Color3(RGB 三分量)区分:LightingService 的 AmbientColor/Color 等属性接收 Color,UI 的部分颜色属性可能接收 Color3,使用前看清属性类型。

代码示例

构造 Color 并读写 RGBA 分量

lua
-- @runtime client
-- 使用 Color.New 构造一个不透明的红色
local red = Color.New(255, 0, 0, 255)
-- 读取各分量并打印
print(string.format("红色: r=%d, g=%d, b=%d, a=%d", red.r, red.g, red.b, red.a))
-- 修改 alpha 分量实现半透明效果
red.a = 128
print(string.format("半透明红色: r=%d, g=%d, b=%d, a=%d", red.r, red.g, red.b, red.a))
-- 使用简写构造一个半透明绿色
local green = Color(0, 255, 0, 128)
print(string.format("半透明绿色: r=%d, g=%d, b=%d, a=%d", green.r, green.g, green.b, green.a))

属性 (4)

Name类型默认值说明
rFloat-颜色的红色分量,取值范围为 0 到 255。
gFloat-颜色的绿色分量,取值范围为 0 到 255。
bFloat-颜色的蓝色分量,取值范围为 0 到 255。
aFloat-颜色的不透明度分量,取值范围为 0 到 255。

函数 (5)

New

签名:New(r: Float, g: Float, b: Float, a: Float) -> Color

创建一个新的 Color 实例,指定红、绿、蓝和透明度分量。

参数类型说明
rFloat-
gFloat-
bFloat-
aFloat-

返回值 Color

示例代码

用 RGBA 构造 Color(必须 4 参数,0-255)

lua
-- @runtime client
local c = Color.New(255, 0, 0, 255)  -- 不透明红色(必须 4 参数,0-255)
print(string.format('r=%d g=%d b=%d a=%d', c.r, c.g, c.b, c.a))
-- 插值两个颜色
local green = Color.New(0, 255, 0, 255)
local mid = Color.Intrp(c, green, 0.5)
print('中间色:', tostring(mid))

Intrp

签名:Intrp(lhs: Color, rhs: Color, u: Float) -> Color

在两个颜色之间进行线性插值,返回插值后的新颜色。

参数类型说明
lhsColor-
rhsColor-
uFloat插值因子 [0, 1]

返回值 Color

示例代码

线性插值两个颜色

lua
-- @runtime client
-- 构造两个颜色
local red = Color(255, 0, 0, 255)   -- 不透明红色
local blue = Color(0, 0, 255, 255)  -- 不透明蓝色
-- 在红色和蓝色之间进行 50% 插值,得到紫色
local purple = Color.Intrp(red, blue, 0.5)
print("插值结果 R:", purple.r, "G:", purple.g, "B:", purple.b, "A:", purple.a)

Step

签名:Step(lhs: Color, rhs: Color) -> Color

逐分量进行阶跃比较,若 lhs 分量大于等于 rhs 分量则返回 1,否则返回 0,结果仍为 Color 类型。

参数类型说明
lhsColor-
rhsColor-

返回值 Color

示例代码

逐分量阶跃比较

lua
-- @runtime client
-- 构造两个颜色
local color1 = Color(100, 200, 50, 255)
local color2 = Color(150, 100, 200, 128)
local stepColor = Color.Step(color1, color2)
print("阶跃结果 R:", stepColor.r, "G:", stepColor.g, "B:", stepColor.b, "A:", stepColor.a)

Min

签名:Min(lhs: Color, rhs: Color) -> Color

逐分量比较两个颜色,返回每个分量取最小值的新颜色。

参数类型说明
lhsColor-
rhsColor-

返回值 Color

示例代码

逐分量取最小值

lua
-- @runtime client
-- 构造两个颜色
local color1 = Color(100, 200, 50, 255)
local color2 = Color(150, 100, 200, 128)
-- 逐分量取最小值
local minColor = Color.Min(color1, color2)
print("最小值颜色 R:", minColor.r, "G:", minColor.g, "B:", minColor.b, "A:", minColor.a)

Max

签名:Max(lhs: Color, rhs: Color) -> Color

逐分量比较两个颜色,返回每个分量取最大值的新颜色。

参数类型说明
lhsColor-
rhsColor-

返回值 Color

示例代码

逐分量取最大值

lua
-- @runtime client
-- 构造两个颜色
local color1 = Color(100, 200, 50, 255)
local color2 = Color(150, 100, 200, 128)
-- 逐分量取最大值
local maxColor = Color.Max(color1, color2)
print("最大值颜色 R:", maxColor.r, "G:", maxColor.g, "B:", maxColor.b, "A:", maxColor.a)