使用组件
在插件中启用组件系统分两个阶段:
- 启用组件 UI
- 从用户选择的组件获取颜色值
启用组件 UI 的第一步是为 SignalRGB 定义设备通道。我们将以 Corsair Node Pro 为例。首先创建一个数组来概述通道的外观,然后在初始化函数中将它们发送到 SignalRGB 的后端,以便在开始渲染之前创建它们。
const DeviceMaxLedLimit = 204;//Channel Name, Led Limitvar ChannelArray = [ ["Channel 1", 204], ["Channel 2", 204],]
function SetupChannels(){ device.SetLedLimit(DeviceMaxLedLimit); for(let i = 0; i < ChannelArray.length; i++){ device.addChannel(ChannelArray[i][0],ChannelArray[i][1]); }}在上述代码中,您会看到我们为通道布局了一个 2D 数组,每个条目是通道名称和 LED 限制。在 SetupChannels() 中,我们将设置总 LED 限制,然后迭代调用 device.addChannel 处理数组中的每个条目。
如果您想硬编码,也可以直接执行此循环而不使用数组。
function SetupChannels(){ device.SetLedLimit(204); device.addChannel("Channel 1",204); device.addChannel("Channel 2",204);}在 Initialize 内调用 SetupChannels 函数以完成设备初始化。
export function Initialize(){ SetupChannels()}保存文件更改后,您的通道将出现在设备页面上。接下来,我们将深入探讨从选定组件获取颜色值的方法。

获取完整通道颜色
Section titled “获取完整通道颜色”设置通道后,我们需要从中获取颜色——这就是将通道名称保存到数组中的好处所在。
总体思路是:
对于每个通道 -> 对于通道上的每个组件 -> getColors()
这一切都封装在 device.channel().getColors() 函数中。Corsair Node Pro 一次发送一个通道的颜色数据,因此我们需要将数据保持”分离”以便于使用。
不过,这里还有一个额外的部分:我们正在检查通道的 LedCount(),如果它返回 0,我们将为用户脉冲该通道。这是一个很好的指示器,让他们知道需要设置通道。
以下是普通用例、硬编码版本和不带通道脉冲检查版本的代码示例。
function SendChannel(Channel){ let ChannelLedCount = device.channel(ChannelArray[Channel][0]).LedCount(); let ColorData = []
if(device.getLedCount() == 0){ ChannelLedCount = 80; let pulseColor = device.getChannelPulseColor(ChannelArray[Channel][0], ChannelLedCount); ColorData = device.createColorArray(pulseColor, ChannelLedCount, "Seperate"); }else{ ColorData = device.channel(ChannelArray[Channel][0]).getColors("Seperate"); }
let RedChannelData = ColorData[0] let GreenChannelData = ColorData[1] let BlueChannelData = ColorData[2] //...}function SendChannel1(){ let ChannelLedCount = device.channel("Channel 1").LedCount(); let ColorData = []
if(device.getLedCount() == 0){ ChannelLedCount = 80; let pulseColor = device.getChannelPulseColor("Channel 1", ChannelLedCount); ColorData = device.createColorArray(pulseColor, ChannelLedCount, "Seperate"); }else{ ColorData = device.channel("Channel 1").getColors("Seperate"); }
let RedChannelData = ColorData[0] let GreenChannelData = ColorData[1] let BlueChannelData = ColorData[2] //...}SendChannel(Channel){ let ColorData = [] ColorData = device.channel(ChannelArray[Channel][0]).getColors("Seperate");
let RedChannelData = ColorData[0] let GreenChannelData = ColorData[1] let BlueChannelData = ColorData[2] //...}最后,我们只需在渲染循环中调用此函数即可。SendChannel 函数底部包含将颜色数组转换为数据包并将其发送到设备的代码。这部分特定于设备,需要您自己进行逆向工程!
export function Render(){ SendChannel(0); device.pause(1);
SendChannel(1); device.pause(1);
SubmitLightingColors();}与单个组件交互
Section titled “与单个组件交互”某些设备比较特殊,超出了常规模式,或者您可能正在尝试在插件中做一些新颖的事情,需要与单个组件交互。在这些情况下,我们不能使用 device.channel().getColors(),而是需要自己循环遍历单个组件。
为此,我们将使用 device.channel().getComponentNames() 获取所有组件 ID,然后使用 device.channel().getComponentColors() 迭代获取单个颜色数组。
以下示例只是将各个数组连接在一起,但您可以在两者之间对它们做任何需要的事情。
let components = device.channel("Channel 1").getComponentNames(); for(let i = 0; i < components.length;i++){ let ComponentColors = device.channel("Channel 1").getComponentColors(components[i]); RGBData = RGBData.concat(ComponentColors) }如果您需要在插件中深入了解细节,可以使用 device.channel.getComponent()