das on key down event node bräuchte ein "repeat"
sprich wie wenn man auf der tastatur eine taste länger drückt:
man drückt die taste, das event wir ganz normal gefeuert
man hält länger gedrückt, nach einem bestimmten delay, feuert das event nochmal
hält man weiterhin gedrückt, feuert das event öfter hintereinandert
das ist ein beispiel szenario für tetris links/rechts shape bewegung
ich denk wir brauchen beim "on key down" event zwei properties:
repeat after (seconds)
repeat interval (seconds, nachdem das erstmal repeat after aufgerufen wurde)
ist repeat after auf 0 - kein effekt (alles wie bisher)
ist repeat interval auf 0 - jedes weitere frame aufrufen
Umgesetzt
Genau die beschriebene Form: zwei Zahlen-Properties am On key down-Node.
Repeat after (ms)
Haltedauer bis zur ersten Wiederholung. 0 = kein Effekt, alles wie bisher
Repeat interval (ms)
Abstand der weiteren Wiederholungen. 0 = jedes Frame
Beide Felder sind Millisekunden — damit bleiben die ueblichen Werte ganze Zahlen (300, 50)
statt 0,3 und 0,05. Die Uhr dahinter rechnet weiter in Sekunden; umgerechnet wird beim Auslesen
der Node-Properties.
Beide tragen decimals: 0: das Inspector-Zahlenfeld zeigt sonst immer drei Nachkommastellen
(NUMBER_DECIMALS), also stand dort 300.000. Der Node-Koerper war davon nie betroffen — formatValue gibt ganze Zahlen bar aus.
Der erste Druck feuert immer sofort und unveraendert — die Wiederholung haengt nur hinten dran.
Warum das nicht der Auto-Repeat des Browsers ist
Der Browser feuert bei gehaltener Taste selbst wiederholt keydown. Diese Ereignisse werden
seit jeher verworfen (Input.press: if (!this.down.has(key)) ... // ignore auto-repeat), und
das bleibt so: Verzoegerung und Rate sind eine Betriebssystem-Einstellung des Spielers,
kein Spielparameter. Die Wiederholung wird stattdessen aus der gemessenen Haltedauer gebaut —
damit ist sie auf jeder Maschine gleich und pro Node einstellbar.
Die Regel selbst steht als reine Funktion in src/core/graph/keyRepeat.ts, nicht als Bedingung
im Runtime-Code — deshalb ist sie ohne Browser pruefbar. Die Haltedauer pro Node liegt in nodeState, derselben Ablage, aus der On timer seine Uhr bezieht.
Eine Entscheidung, die ich getroffen habe
Ein sehr kleines, positives Intervall wird auf 10 ms angehoben — dieselbe Untergrenze, die On timer schon hat. Sonst wuerde ein vertipptes 0,0001 bei einem langen Frame tausende
Aufrufe in einem Bild ausloesen. 0 bleibt davon unberuehrt und behaelt seine eigene
Bedeutung ("jedes Frame").
Der Node bleibt schmal
Zwei Zeilen Repeat after (ms): 0 an jedem Tastatur-Node waeren reiner Laerm gewesen — ich habe
mir das Bild angesehen, es war deutlich sichtbar. Beide Zeilen bleiben vom Node-Koerper weg,
solange die Verzoegerung 0 ist; der Inspector zeigt sie immer. Neu dafuer ist NodeDef.hiddenParams.
Sobald eine Verzoegerung gesetzt ist, erscheinen beide — auch ein Intervall von 0, denn das
ist dort eine Einstellung und keine Abwesenheit.
Der Beweis
Zwei On key down auf derselben Taste, einer schlicht, einer wiederholend — ein einziges
Halten misst beide, damit "es hat wiederholt" nicht mit "die Taste kam oefter an" verwechselt
werden kann.
PASS a hold shorter than the delay fires once, repeat or not
– plain 0 → 1, repeating 0 → 1 over 120 ms with a 300 ms delay
PASS holding past the delay keeps the repeating node firing, while the plain one counts one press
– plain +1, repeating +12 over 800 ms (press + ~10 repeats expected)
PASS a node with no repeat set carries no repeat rows, the repeating one carries both
– plain ["Key: Right arrow"], repeating [… "Repeat after (ms): 300", "Repeat interval (ms): 50"]
PASS typing a new delay lands on the node – {"key":"ArrowRight","repeatAfter":750,"repeatInterval":50}
PASS the delay typed into the inspector is the one the run uses
– repeating 0 → 1 over 500 ms with the delay raised to 750 ms
Der letzte ist der wichtigste: derselbe Graph, nur die getippte Zahl geaendert — und der Node
schweigt. Damit haengt die Laufzeit nachweislich am Inspector-Wert und nicht an etwas anderem.
Übernommen aus todo-notes/done/on-key-down-repeat.md beim Umzug auf das Issue-System (2026-09-12).
Angelegt: 2026-09-09 · 3ab8d88 — Let On key down repeat while the key stays held
Abgeschlossen: 2026-09-10 · 6ac6b69 — Run just the e2e steps you name
Commits dazwischen:338ff43 Type a repeat delay as whole milliseconds
Gemeldet von: admin
das on key down event node bräuchte ein "repeat"
sprich wie wenn man auf der tastatur eine taste länger drückt:
- man drückt die taste, das event wir ganz normal gefeuert
- man hält länger gedrückt, nach einem bestimmten delay, feuert das event nochmal
- hält man weiterhin gedrückt, feuert das event öfter hintereinandert
das ist ein beispiel szenario für tetris links/rechts shape bewegung
ich denk wir brauchen beim "on key down" event zwei properties:
- repeat after (seconds)
- repeat interval (seconds, nachdem das erstmal repeat after aufgerufen wurde)
ist repeat after auf 0 - kein effekt (alles wie bisher)
ist repeat interval auf 0 - jedes weitere frame aufrufen
---
## Umgesetzt
Genau die beschriebene Form: zwei Zahlen-Properties am `On key down`-Node.
| | |
|---|---|
| **Repeat after (ms)** | Haltedauer bis zur ersten Wiederholung. **0 = kein Effekt**, alles wie bisher |
| **Repeat interval (ms)** | Abstand der weiteren Wiederholungen. **0 = jedes Frame** |
Beide Felder sind **Millisekunden** — damit bleiben die ueblichen Werte ganze Zahlen (300, 50)
statt 0,3 und 0,05. Die Uhr dahinter rechnet weiter in Sekunden; umgerechnet wird beim Auslesen
der Node-Properties.
Beide tragen `decimals: 0`: das Inspector-Zahlenfeld zeigt sonst immer drei Nachkommastellen
(`NUMBER_DECIMALS`), also stand dort `300.000`. Der Node-Koerper war davon nie betroffen —
`formatValue` gibt ganze Zahlen bar aus.
Der erste Druck feuert immer sofort und unveraendert — die Wiederholung haengt nur hinten dran.
### Warum das nicht der Auto-Repeat des Browsers ist
Der Browser feuert bei gehaltener Taste selbst wiederholt `keydown`. Diese Ereignisse werden
seit jeher verworfen (`Input.press`: `if (!this.down.has(key)) ... // ignore auto-repeat`), und
das bleibt so: Verzoegerung und Rate sind eine **Betriebssystem-Einstellung des Spielers**,
kein Spielparameter. Die Wiederholung wird stattdessen aus der gemessenen Haltedauer gebaut —
damit ist sie auf jeder Maschine gleich und pro Node einstellbar.
Die Regel selbst steht als reine Funktion in `src/core/graph/keyRepeat.ts`, nicht als Bedingung
im Runtime-Code — deshalb ist sie ohne Browser pruefbar. Die Haltedauer pro Node liegt in
`nodeState`, derselben Ablage, aus der `On timer` seine Uhr bezieht.
### Eine Entscheidung, die ich getroffen habe
Ein sehr kleines, positives Intervall wird auf **10 ms** angehoben — dieselbe Untergrenze, die
`On timer` schon hat. Sonst wuerde ein vertipptes `0,0001` bei einem langen Frame tausende
Aufrufe in einem Bild ausloesen. **0 bleibt davon unberuehrt** und behaelt seine eigene
Bedeutung ("jedes Frame").
### Der Node bleibt schmal
Zwei Zeilen `Repeat after (ms): 0` an *jedem* Tastatur-Node waeren reiner Laerm gewesen — ich habe
mir das Bild angesehen, es war deutlich sichtbar. Beide Zeilen bleiben vom Node-Koerper weg,
solange die Verzoegerung 0 ist; der Inspector zeigt sie immer. Neu dafuer ist `NodeDef.hiddenParams`.
Sobald eine Verzoegerung gesetzt ist, erscheinen **beide** — auch ein Intervall von 0, denn das
ist dort eine Einstellung und keine Abwesenheit.
### Der Beweis
Zwei `On key down` auf **derselben** Taste, einer schlicht, einer wiederholend — ein einziges
Halten misst beide, damit "es hat wiederholt" nicht mit "die Taste kam oefter an" verwechselt
werden kann.
```
PASS a hold shorter than the delay fires once, repeat or not
– plain 0 → 1, repeating 0 → 1 over 120 ms with a 300 ms delay
PASS holding past the delay keeps the repeating node firing, while the plain one counts one press
– plain +1, repeating +12 over 800 ms (press + ~10 repeats expected)
PASS a node with no repeat set carries no repeat rows, the repeating one carries both
– plain ["Key: Right arrow"], repeating [… "Repeat after (ms): 300", "Repeat interval (ms): 50"]
PASS typing a new delay lands on the node – {"key":"ArrowRight","repeatAfter":750,"repeatInterval":50}
PASS the delay typed into the inspector is the one the run uses
– repeating 0 → 1 over 500 ms with the delay raised to 750 ms
```
Der letzte ist der wichtigste: derselbe Graph, nur die getippte Zahl geaendert — und der Node
schweigt. Damit haengt die Laufzeit nachweislich am Inspector-Wert und nicht an etwas anderem.
---
*Übernommen aus `todo-notes/done/on-key-down-repeat.md` beim Umzug auf das Issue-System (2026-09-12).*
- **Angelegt:** 2026-09-09 · `3ab8d88` — Let On key down repeat while the key stays held
- **Abgeschlossen:** 2026-09-10 · `6ac6b69` — Run just the e2e steps you name
- **Commits dazwischen:** `338ff43` Type a repeat delay as whole milliseconds
- **Gemeldet von:** admin
admin
added the todo-note label 2026-09-12 15:03:53 +02:00
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
das on key down event node bräuchte ein "repeat"
sprich wie wenn man auf der tastatur eine taste länger drückt:
das ist ein beispiel szenario für tetris links/rechts shape bewegung
ich denk wir brauchen beim "on key down" event zwei properties:
ist repeat after auf 0 - kein effekt (alles wie bisher)
ist repeat interval auf 0 - jedes weitere frame aufrufen
Umgesetzt
Genau die beschriebene Form: zwei Zahlen-Properties am
On key down-Node.Beide Felder sind Millisekunden — damit bleiben die ueblichen Werte ganze Zahlen (300, 50)
statt 0,3 und 0,05. Die Uhr dahinter rechnet weiter in Sekunden; umgerechnet wird beim Auslesen
der Node-Properties.
Beide tragen
decimals: 0: das Inspector-Zahlenfeld zeigt sonst immer drei Nachkommastellen(
NUMBER_DECIMALS), also stand dort300.000. Der Node-Koerper war davon nie betroffen —formatValuegibt ganze Zahlen bar aus.Der erste Druck feuert immer sofort und unveraendert — die Wiederholung haengt nur hinten dran.
Warum das nicht der Auto-Repeat des Browsers ist
Der Browser feuert bei gehaltener Taste selbst wiederholt
keydown. Diese Ereignisse werdenseit jeher verworfen (
Input.press:if (!this.down.has(key)) ... // ignore auto-repeat), unddas bleibt so: Verzoegerung und Rate sind eine Betriebssystem-Einstellung des Spielers,
kein Spielparameter. Die Wiederholung wird stattdessen aus der gemessenen Haltedauer gebaut —
damit ist sie auf jeder Maschine gleich und pro Node einstellbar.
Die Regel selbst steht als reine Funktion in
src/core/graph/keyRepeat.ts, nicht als Bedingungim Runtime-Code — deshalb ist sie ohne Browser pruefbar. Die Haltedauer pro Node liegt in
nodeState, derselben Ablage, aus derOn timerseine Uhr bezieht.Eine Entscheidung, die ich getroffen habe
Ein sehr kleines, positives Intervall wird auf 10 ms angehoben — dieselbe Untergrenze, die
On timerschon hat. Sonst wuerde ein vertipptes0,0001bei einem langen Frame tausendeAufrufe in einem Bild ausloesen. 0 bleibt davon unberuehrt und behaelt seine eigene
Bedeutung ("jedes Frame").
Der Node bleibt schmal
Zwei Zeilen
Repeat after (ms): 0an jedem Tastatur-Node waeren reiner Laerm gewesen — ich habemir das Bild angesehen, es war deutlich sichtbar. Beide Zeilen bleiben vom Node-Koerper weg,
solange die Verzoegerung 0 ist; der Inspector zeigt sie immer. Neu dafuer ist
NodeDef.hiddenParams.Sobald eine Verzoegerung gesetzt ist, erscheinen beide — auch ein Intervall von 0, denn das
ist dort eine Einstellung und keine Abwesenheit.
Der Beweis
Zwei
On key downauf derselben Taste, einer schlicht, einer wiederholend — ein einzigesHalten misst beide, damit "es hat wiederholt" nicht mit "die Taste kam oefter an" verwechselt
werden kann.
Der letzte ist der wichtigste: derselbe Graph, nur die getippte Zahl geaendert — und der Node
schweigt. Damit haengt die Laufzeit nachweislich am Inspector-Wert und nicht an etwas anderem.
Übernommen aus
todo-notes/done/on-key-down-repeat.mdbeim Umzug auf das Issue-System (2026-09-12).3ab8d88— Let On key down repeat while the key stays held6ac6b69— Run just the e2e steps you name338ff43Type a repeat delay as whole milliseconds