Pular para o conteúdo

Efeitos São Páginas Web

Os efeitos no SignalRGB, conhecidos como Lightscripts, são essencialmente páginas web que interagem com a API do SignalRGB, e devem seguir algumas regras simples para funcionar corretamente. Todo Lightscript requer três tags HTML essenciais: <head>, <body> e <script>.

Esta seção deve conter quaisquer tags <meta> necessárias. Como detalhado na seção “Referência da API”, essas tags podem criar campos de entrada do usuário (como sliders de matiz, seletores numéricos, etc.) ou acessar a API do SignalRGB para obter entrada visual do seu aplicativo principal. Além disso, uma tag <title> nesta seção atribuirá um rótulo ao seu efeito dentro do aplicativo Signal.

Vamos revisitar o exemplo anterior para um entendimento mais claro:

<head>
<title>Hue Cycle</title>
<meta description="Stock hue cycle."/>
<meta publisher="WhirlwindFX" />
<meta property="speed" label="Cycle Speed" type="number" min="1" max="10" default="2">
</head>

Este cabeçalho inclui quatro tags: uma tag <title> e três tags <meta>, que cobrem a descrição, o publicador e um slider numérico básico. Enquanto os cabeçalhos de efeitos estáticos costumam ser pequenos, efeitos que respondem a ações na tela podem envolver dezenas de medidores, cada um com múltiplas configurações de resolução. É importante manter a organização e seguir boas convenções de nomenclatura.

<head>

O body contém apenas um elemento — a tag <canvas>. Os atributos essenciais dessa tag são id, usado para buscar o canvas no script, e width e height. As dimensões padrão para o SignalRGB são 320px de largura e 200px de altura.

<body style="margin: 0; padding: 0;">
<canvas id="exCanvas" width="320" height="200"></canvas>
</body>

<body>

É aqui que a mágica acontece. Existem três seções básicas neste script, além de duas funções que devem ser consideradas PADRÃO para desenvolvedores de Lightscript: update e window.requestAnimationFrame.

Todas as variáveis de escopo do script devem ser declaradas juntas para simplificar o processo de desenvolvimento. No futuro, isso também incluirá declarações de medidores, mas por enquanto temos uma seleção simples.

  • var c: Usado para buscar a tag canvas declarada anteriormente.
  • var ctx: O contexto 2D do elemento canvas, que é a área editável do seu efeito.
  • height, width e hue: São declarados aqui para simplificar o processo.

Na parte inferior do bloco de código, há a referência a window.requestAnimationFrame(update). “Update” é o nome da função que lida com os detalhes da animação. O estado atualizado em cada frame cria a ilusão de movimento para os espectadores.

O método usado aqui é fundamental: como cada operação na sua função update leva um pequeno tempo para executar, chamar update() diretamente pode causar atrasos nas animações. Por exemplo, o primeiro callback pode pensar que 100ms passaram, o próximo 110ms, e assim por diante.

Ao usar window.requestAnimationFrame, o timestamp atual é passado para a função de callback e seus callbacks aninhados, preservando o estado da animação apesar das pequenas lacunas de execução.

Resumindo, use o método window.requestAnimationFrame(callback) para atualizar sua animação!

Esta função é central para um Lightscript funcional e precisa ser o mais simples e enxuta possível, pois é executada a cada frame. Após o carregamento inicial do script e a chamada da função, update continuará em execução por meio de sua chamada interna a window.requestAnimationFrame.

Neste exemplo, cada frame realiza quatro operações principais:

  1. Define o estilo de preenchimento do canvas com ctx.fillStyle. Pode ser uma cor, padrão ou gradiente, e persistirá até ser substituído pela próxima chamada de ctx.fillStyle.
  2. Cria um retângulo (com o estilo de preenchimento previamente definido) com ctx.fillRect(x, y, width, height). Neste caso, o retângulo representa todo o canvas.
  3. Incrementa o hue por speed, a variável de entrada do usuário localizada no cabeçalho.
  4. Limita o hue ao intervalo 0-360 para se encaixar no padrão HSL (matiz, saturação, luminosidade).
<script>
// Variable Declarations -------------------------
// Get the canvas element from the DOM
var c = document.getElementById("exCanvas");
var ctx = c.getContext("2d");
var width = 320;
var height = 200;
var hue = 0;
// Update function --------------------------------
function update()
{
// 1
ctx.fillStyle = 'hsl('+ hue + ', 100%, 50%)';
// 2
ctx.fillRect(0, 0, width , height);
// 3
hue+=(speed / 4);
// 4
if (hue > 360) { hue = hue % 360; }
// Re-call the function
window.requestAnimationFrame(update);
}
// Initial update call ----------------------------
window.requestAnimationFrame(update);
</script>

Este padrão geral (definir preenchimento, desenhar forma, editar variáveis) é o padrão para animações em canvas.

  • Se a cor estiver errada, você esqueceu um preenchimento de estilo.
  • Se a forma estiver errada, você esqueceu um preenchimento de forma.
  • Se nada mudar ao longo do tempo, você não editou suas variáveis.

Para mais detalhes e dicas de solução de problemas, confira nossa próxima página sobre HTML5 + JS.

<script>