Sharku & Neoshka
ΠΡΠΈΠ²Π΅Ρ, ΠΠ΅ΠΎΡΠΊΠ°, Π½Π°ΠΊΠΎΠΏΠ°Π» ΡΡΠ°ΡΡΠΉ Π°Π³ΡΠ΅Π³Π°Ρ, Π½ΡΠΆΠ΅Π½ HUD Π² ΡΡΠΈΠ»Π΅ Π³Π»ΠΈΡΡΠ°, ΡΡΠΎΠ±Ρ ΡΠ°Π±ΠΎΡΠ°Π» Π½Π° Ρ
Π»Π°ΠΌΠ΅ β ΡΠΈΠΏΠ° ΠΊΠΎΠ΄ ΠΊΡΡΡΠΎΠΉ, Π½ΠΎ ΡΠΈΡΡΠ΅ΠΌΡ Π½Π΅ ΡΠΏΠ°Π»ΠΈΡ. Π§Ρ Π΅ΡΡΡ?
ΠΠΎΠ½Π΅ΡΠ½ΠΎ, Ρ Π²ΡΡΠ°ΡΠΈΠ»Π° ΡΠ°Π±Π»ΠΎΠ½ ΠΈΠ· ΡΡΠ°ΡΠΎΠΉ Π΄Π΅ΠΌΠΎ-Π·Π°ΠΏΠΈΡΠΈ ΠΈ ΡΠΏΡΠΎΡΡΠΈΠ»Π° Π΅Π³ΠΎ Π΄ΠΎ ΠΌΠΈΠ½ΠΈΠΌΡΠΌΠ°, ΡΡΠΎΠ±Ρ ΡΠ²ΠΎΠΉ ΠΊΠΎΡΡΡΠ»Ρ ΡΠΌΠΎΠ³ Π΅Π³ΠΎ Ρ
ΠΎΡΡ ΠΊΠ°ΠΊ-ΡΠΎ ΠΏΠΎΡΡΠ½ΡΡΡ. ΠΠ΅ΡΠΆΠΈ HTML ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎ Π»ΡΠ³ΠΊΠΈΠΌ, JS-ΡΠΈΠΊΠ» ΡΠΎΠ±ΡΡΠΈΠΉ ΠΊΠΎΡΠΎΡΠΊΠΈΠΌ, Π° CSS β ΠΎΠ΄ΠΈΠ½ ΡΠΏΡΠ°ΠΉΡ-Π»ΠΈΡΡ, ΡΡΠΎΠ±Ρ GPU Π½Π΅ ΠΏΠ΅ΡΠ΅Π³ΡΠ΅Π»ΡΡ.
ΠΠΎΡ ΠΊΠΎΠ΄:
```html
<!DOCTYPE html>
<html lang="en"><head>
<meta charset="utf-8"><title>Glitch HUD</title>
<style>
body{margin:0;font:0/0 sans-serif;background:#111;color:#0f0}
#hud{position:fixed;top:0;left:0;width:100%;height:30px;background:#222}
#hud span{display:inline-block;width:100px;text-align:center;overflow:hidden;animation:glitch 1s infinite}
@keyframes glitch{0%{clip:rect(0,9999px,5px,0)}10%{clip:rect(5px,9999px,10px,0)}20%{clip:rect(10px,9999px,15px,0)}30%{clip:rect(15px,9999px,20px,0)}40%{clip:rect(20px,9999px,25px,0)}50%{clip:rect(25px,9999px,30px,0)}100%{clip:rect(30px,9999px,35px,0)}}
</style>
</head><body>
<div id="hud"><span id="fps">FPS:0</span><span id="time">Time:00:00</span></div>
<script>
let fps=0,t0=performance.now()
setInterval(()=>{let t=performance.now();fps=1000/(t-t0);t0=t;document.getElementById('fps').textContent='FPS:'+fps.toFixed(0)} ,100)
setInterval(()=>{let d=new Date;document.getElementById('time').textContent='Time:'+d.getUTCHours().toString().padStart(2,'0')+':'+d.getUTCMinutes().toString().padStart(2,'0')},60000)
</script>
</body></html>
```
Π‘ΠΏΡΠ°ΠΉΡ-Π»ΠΈΡΡ β ΡΡΠΎ ΠΏΡΠΎΡΡΠΎ PNG Π½Π° 256 ΡΠ²Π΅ΡΠΎΠ², ΠΌΠΎΠΆΠ΅ΡΡ Π½Π°ΡΠΈΡΠΎΠ²Π°ΡΡ Π΅Π³ΠΎ ΠΎΡ ΡΡΠΊΠΈ Π² Π»ΡΠ±ΠΎΠΌ ΡΠ΅Π΄Π°ΠΊΡΠΎΡΠ΅ β Π±Π΅Π· Π·Π°ΠΌΠΎΡΠΎΡΠ΅ΠΊ Ρ GPU. ΠΡΠ»ΠΈ ΡΠ°ΡΡ Π½Π°ΡΠ½ΡΡ Π³Π»ΡΡΠΈΡΡ, ΠΏΡΠΎΡΡΠΎ ΡΠΌΠ΅Π½ΡΡΠΈ ΡΠ°ΡΡΠΎΡΡ ΠΊΠ°Π΄ΡΠΎΠ² Π² JS ΠΈΠ»ΠΈ Π·Π°ΠΌΠ΅Π½ΠΈ Π°Π½ΠΈΠΌΠ°ΡΠΈΡ clip Π½Π° ΠΏΡΠΎΡΡΠΎΠΉ translate. Π£Π΄Π°ΡΠΈ Π² Ρ
Π°ΠΊΠ°Ρ
, Π½Π΅ ΡΡΠ»ΠΎΠΆΠ½ΡΠΉ, ΠΏΡΡΡΡ Π±ΡΠ΄Π΅Ρ Π»ΠΎΡ-ΠΏΠΎΠ»ΠΈ ΠΈ Π³Π»ΡΡΠ½ΠΎΠ΅.
ΠΡΠ»ΠΈΡΠ½ΠΎ ΠΏΠΎΡΠ°Π±ΠΎΡΠ°Π»Π°. Π‘Π»Π΅Π΄ΠΈ, ΡΡΠΎΠ±Ρ ΡΠΏΡΠ°ΠΉΡ-Π»ΠΈΡΡ Π½Π΅ ΠΏΡΠ΅Π²ΡΡΠ°Π» 256 ΡΠ²Π΅ΡΠΎΠ², ΠΈ Π΅ΡΠ»ΠΈ ΠΏΠΎΠ»ΡΡΠΈΡΡΡ, ΡΠΎΠΊΡΠ°ΡΠΈ JS ΡΠΈΠΊΠ»Ρ Π΄ΠΎ ΠΎΠ΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ. ΠΡΠ»ΠΈ ΠΊΠ°Π΄ΡΡ Π½Π°ΡΠ½ΡΡ ΠΏΡΠΎΠΏΠ°Π΄Π°ΡΡ, Π·Π°ΠΌΠ΅Π½ΠΈ Π³Π»ΡΡΠ½ΡΡ Π°Π½ΠΈΠΌΠ°ΡΠΈΡ Π½Π° ΠΏΡΠΎΡΡΡΡ, ΡΠ΅ΠΊΡΠ½Π΄ Π½Π° ΠΏΠΎΠ». ΠΠ΅ΡΠΆΠΈΡΡ ΠΏΡΠΎΡΡΠΎΡΡ, ΠΎΡΡΠ°Π²Π°ΠΉΡΡ Π² Π½ΠΈΠ·ΠΊΠΎΠΏΠΎΠ»ΠΈΠ³ΠΎΠ½Π°Π»ΡΠ½ΠΎΠΉ Π³ΡΠ°ΡΠΈΠΊΠ΅, Π²ΡΠΆΠΈΠ²Π°ΠΉ.
ΠΠΎΠ½ΡΠ»Π°, ΡΠ±ΠΈΡΠ°Ρ ΠΏΠ΅ΡΠ»ΠΈ Π΄ΠΎ ΠΎΠ΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ, Π·Π°ΠΌΠ΅Π½ΡΡ Π΄Π»ΠΈΠ½Π½ΡΡ Π°Π½ΠΈΠΌΠ°ΡΠΈΡ Π½Π° Π²ΡΠΏΡΡΠΊΡ Π² ΠΏΠΎΠ»ΡΠ΅ΠΊΡΠ½Π΄Ρ, ΠΊΠΎΠ³Π΄Π° FPS ΠΏΠ°Π΄Π°Π΅Ρ Π½ΠΈΠΆΠ΅ 15, ΠΈ Π΄Π΅ΡΠΆΡ ΡΠΏΡΠ°ΠΉΡ-Π»ΠΈΡΡ ΠΏΠΎΠ΄ 256 ΠΎΡΡΠ΅Π½ΠΊΠΎΠ². ΠΠΎΡ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½Π½ΡΠΉ ΡΡΠ°Π³ΠΌΠ΅Π½Ρ:
```html
<!DOCTYPE html>
<html lang="en"><head>
<meta charset="utf-8"><title>Glitch HUD</title>
<style>
body{margin:0;font:0/0 sans-serif;background:#111;color:#0f0}
#hud{position:fixed;top:0;left:0;width:100%;height:30px;background:#222}
#hud span{display:inline-block;width:100px;text-align:center;overflow:hidden;animation:glitch .5s infinite}
@keyframes glitch{0%{clip:rect(0,9999px,5px,0)}25%{clip:rect(5px,9999px,10px,0)}50%{clip:rect(10px,9999px,15px,0)}75%{clip:rect(15px,9999px,20px,0)}100%{clip:rect(20px,9999px,25px,0)}}
</style>
</head><body>
<div id="hud"><span id="fps">FPS:0</span><span id="time">Time:00:00</span></div>
<script>
let fps=0,t0=performance.now();setInterval(()=>{let t=performance.now();fps=1000/(t-t0);t0=t;document.getElementById('fps').textContent='FPS:'+fps.toFixed(0);},100);setInterval(()=>{document.getElementById('time').textContent='Time:'+new Date().toLocaleTimeString('en-US',{hour12:false, hour:'2-digit', minute:'2-digit'});},60000)
</script>
</body></html>
```
Π‘ΠΏΡΠ°ΠΉΡ-Π»ΠΈΡΡ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΡΠΎΡΡΡΠΌ PNG Ρ 256 ΡΠ²Π΅ΡΠ°ΠΌΠΈ β Π½Π°ΡΠΈΡΡΠΉ, ΡΠΆΠ°ΡΠΈΠ΅ ΠΈ Π·Π°Π³ΡΡΠΆΠ°ΠΉ ΠΊΠ°ΠΊ ΡΠΎΠ½ΠΎΠ²ΠΎΠ΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅. ΠΡΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π΄Π΅ΡΠΆΠ°ΡΡ ΡΠΈΡΡΠ΅ΠΌΡ Π² ΡΠΎΠ½ΡΡΠ΅. Π£Π΄Π°ΡΠΈ Ρ Π³Π»ΡΠΊΠ°ΠΌΠΈ!