A rendszer a node-ok és a kód mögött
Input, event, data, rule, state, render és output: ugyanaz a rendszer többféle technológiában.
Becsült olvasási idő: 8–10 perc
Kulcsfogalmak: input · event · data · rule · state · render · output
Az órán cables.gl-lel indultunk, majd ugyanazt a működést JavaScriptben írtuk le. A fontos felismerés:
A node nem maga a rendszer. A node csak egy módja annak, hogy leírjuk a rendszert.
A Signal Lab működése:
INPUT
↓
EVENT + DATA
↓
RULE / PROCESS
↓
STATE
↓
RENDER
↓
OUTPUTInput
Az input a forrás vagy csatorna, ahonnan a rendszer információt kaphat. Lehet pointer, billentyűzet, mikrofon, kamera, szenzor, hálózati adat vagy egy másik program.
A Signal Lab egyik inputja a pointer.
Event
Az event egy történés. Például:
pointermove
click
keydown
resizeA pointer önmagában inputforrás. A pointermove azt jelenti, hogy történt valami ezzel az inputtal.
Data
Az eseményhez adat tartozhat. Egy pointermove eseményobjektum például tartalmazhatja ezeket:
event.clientX
event.clientY
event.target
event.timeStampEzért ne mossuk össze a három fogalmat:
INPUT = pointer
EVENT = pointermove
DATA = clientX, clientY, ...Az input a forrás, az event a történés, a data pedig az információ, amit a történésről megkapunk.
Rule / Process
A beérkező adatot valamilyen szabály alakítja át. Például:
mappedSize = mapRange(pointerX, 0, bounds.width, MIN_SIZE, MAX_SIZE);Itt a pointer X-koordinátájából vizuális méret lesz. A szabály lehet egyetlen szorzás, egy mapRange(), vagy akár egy összetett képfeldolgozó pipeline.
State
A state a rendszer aktuális állapota: olyan értékek, amelyeket megtartunk, és később más működések használnak.
let pointerX = 0;
let pointerY = 0;
let mappedSize = 120;
let mappedRoundness = 50;Nem attól lesz valami state, hogy
letváltozóban van. Aletszintaxis; a state rendszerszerep.
Render
A render az aktuális state-et megjeleníthető változássá alakítja.
function render() {
signal.style.left = `${pointerX}px`;
signal.style.top = `${pointerY}px`;
signal.style.width = `${mappedSize}px`;
signal.style.height = `${mappedSize}px`;
}A JavaScript itt DOM/CSS értékeket módosít. Ezután a böngésző saját rendering rendszere állítja elő a látható pixeleket.
STATE → render() → DOM / CSS → browser rendering → visible outputCables.gl → JavaScript
cables.gl JavaScript
Mouse → pointer event
X / Y → event.clientX / clientY
Variable → const / let
MapRange → mapRange()
Transform → style.left / style.top
Circle radius → style.width / style.height
Button → click event
Trigger → esemény / végrehajtási kapcsolatA konkrét node vagy függvény neve változhat. A rendszerlogika újra és újra visszatér.
Ellenőrző kérdések
- Mi a különbség input, event és data között?
- Miért nem ugyanaz a
letés a state fogalma? - Mit módosít közvetlenül a
render()a Signal Labban? - Egy mikrofonos installációban mi lehet input, data, rule és output?