<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Antonio </title>
    <description>The latest articles on DEV Community by Antonio  (@antonioprosperi2svg).</description>
    <link>https://dev.to/antonioprosperi2svg</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4092373%2F0b0c9e85-4b67-40f5-a250-9e94df0a8f93.png</url>
      <title>DEV Community: Antonio </title>
      <link>https://dev.to/antonioprosperi2svg</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/antonioprosperi2svg"/>
    <language>en</language>
    <item>
      <title>BeeLadybug — Debug Visivo e Monitoraggio per BeeEngine</title>
      <dc:creator>Antonio </dc:creator>
      <pubDate>Thu, 10 Sep 2026 20:21:22 +0000</pubDate>
      <link>https://dev.to/antonioprosperi2svg/beeladybug-debug-visivo-e-monitoraggio-per-beeengine-49ll</link>
      <guid>https://dev.to/antonioprosperi2svg/beeladybug-debug-visivo-e-monitoraggio-per-beeengine-49ll</guid>
      <description>&lt;h1&gt;
  
  
  BeeLadybug — Debug Visivo e Monitoraggio di Motore
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;BeeLadybug&lt;/strong&gt; è la classe di debug visivo ufficiale per &lt;strong&gt;BeeEngine&lt;/strong&gt;. Offre un monitoraggio in tempo reale delle prestazioni (FPS, tempo di ciclo, entità attive) e disegna le hitbox AABB e i bounding box direttamente nello spazio mondo del Canvas.&lt;/p&gt;

&lt;p&gt;📦 &lt;strong&gt;NPM:&lt;/strong&gt; &lt;a href="https://www.npmjs.com/package/beeengine" rel="noopener noreferrer"&gt;https://www.npmjs.com/package/beeengine&lt;/a&gt;&lt;br&gt;&lt;br&gt;
🐙 &lt;strong&gt;GitHub:&lt;/strong&gt; &lt;a href="https://github.com/antonioprosperi2-svg/BeeEngine-V2.5.0/blob/main/src/debug/BeeLadybug.js" rel="noopener noreferrer"&gt;antonioprosperi2-svg/BeeEngine-V2.5.0&lt;/a&gt;&lt;/p&gt;


&lt;h2&gt;
  
  
  📁 Caratteristiche Principali
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Scorciatoie di Tastiera Dedicate:&lt;/strong&gt; Usa &lt;code&gt;F2&lt;/code&gt; per attivare/disattivare l'overlay, &lt;code&gt;F3&lt;/code&gt; per applicare lo slow-motion (0.25x) e &lt;code&gt;F4&lt;/code&gt; per congelare la simulazione (freeze frame). Non utilizza &lt;code&gt;F12&lt;/code&gt; né la tilde (~), garantendo piena compatibilità con i layout di tastiera italiani.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Rendering a Due Spazi:&lt;/strong&gt; 

&lt;ol&gt;
&lt;li&gt;
&lt;code&gt;drawWorld(ctx)&lt;/code&gt;: Disegna le hitbox e i Bounding Box nello spazio mondo (prima di cancellare la trasformazione della camera).&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;drawOverlay(ctx)&lt;/code&gt;: Disegna l'HUD e i controlli in spazio schermo (dopo il ripristino della matrice di trasformazione).&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Rilevamento Collisioni integrato:&lt;/strong&gt; Sfrutta &lt;code&gt;BeeSpatialHash&lt;/code&gt; per calcolare ed evidenziare visivamente in rosso le entità in fase di collisione.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pulsanti Interattivi:&lt;/strong&gt; Supporta l'interazione via mouse per attivare le modalità &lt;strong&gt;SLOW&lt;/strong&gt;, &lt;strong&gt;STOP&lt;/strong&gt; e &lt;strong&gt;LIVE&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;


&lt;h2&gt;
  
  
  🚀 Esempio di Integrazione
&lt;/h2&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;BeeEngine&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;BeeLadybug&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;beeengine&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;gioco&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;BeeEngine&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;gameCanvas&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;800&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;600&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// Attivazione rapida integrata nell'engine&lt;/span&gt;
&lt;span class="nx"&gt;gioco&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;enableLadybug&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="c1"&gt;// Oppure istanziazione manuale&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;ladybug&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;BeeLadybug&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;gioco&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;ladybug&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;attach&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;show&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="nx"&gt;gioco&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;start&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;dt&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;input&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;time&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// Intercetta i click sui pulsanti dell'overlay di debug (SLOW, STOP, LIVE)&lt;/span&gt;
    &lt;span class="nx"&gt;ladybug&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;poll&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  🎹 Scorciatoie di Tastiera (Keybindings)
&lt;/h2&gt;

&lt;p&gt;I seguenti tasti sono mappati nativamente per il controllo rapido del loop di gioco e del debug visivo senza interferire con i tool di sviluppo del browser:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tasto&lt;/th&gt;
&lt;th&gt;Azione&lt;/th&gt;
&lt;th&gt;Descrizione&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;&lt;code&gt;F2&lt;/code&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Toggle Overlay&lt;/td&gt;
&lt;td&gt;Mostra o nasconde l'interfaccia di debug in spazio schermo.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;&lt;code&gt;F3&lt;/code&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Slow-Motion&lt;/td&gt;
&lt;td&gt;Attiva la scala temporale a &lt;code&gt;0.25x&lt;/code&gt; (o ripristina &lt;code&gt;1x&lt;/code&gt;) per analizzare i frame al rallentatore.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;&lt;code&gt;F4&lt;/code&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Freeze Frame&lt;/td&gt;
&lt;td&gt;Congela la simulazione chiamando internamente &lt;code&gt;time.togglePause()&lt;/code&gt;.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;


&lt;h2&gt;
  
  
  ⚙️ Configurazione di Default (&lt;code&gt;BEE_LADYBUG_DEFAULTS&lt;/code&gt;)
&lt;/h2&gt;

&lt;p&gt;La classe espone un oggetto immutabile con i valori predefiniti di configurazione estratti dal modulo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;BEE_LADYBUG_DEFAULTS&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;Object&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;freeze&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;toggleKey&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;F2&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;slowKey&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;F3&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;freezeKey&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;F4&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;slowScale&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;0.25&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;colorActive&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;#3dff6a&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;colorColliding&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;#ff3b3b&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;colorInactive&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;#8a8a8a&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;overlayX&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;12&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;overlayY&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;12&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  🛠️ API Reference
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;new BeeLadybug(engine, options)&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Crea un'istanza del modulo di debug legata al motore corrente.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;engine&lt;/code&gt;&lt;/strong&gt; (&lt;code&gt;Object&lt;/code&gt;): L'istanza attiva di &lt;code&gt;BeeEngine&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;options&lt;/code&gt;&lt;/strong&gt; (&lt;code&gt;Partial&amp;lt;typeof BEE_LADYBUG_DEFAULTS&amp;gt;&lt;/code&gt;, opzionale): Opzioni per sovrascrivere la configurazione di default (colori delle hitbox, coordinate dell'overlay, keybindings).&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Metodi di Controllo Stato
&lt;/h3&gt;

&lt;h4&gt;
  
  
  &lt;code&gt;.configure(options)&lt;/code&gt;
&lt;/h4&gt;

&lt;p&gt;Aggiorna al volo le opzioni di configurazione dell'istanza unendo i valori passati con i default del motore. Ritorna &lt;code&gt;this&lt;/code&gt; per il chaining.&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;code&gt;.attach()&lt;/code&gt;
&lt;/h4&gt;

&lt;p&gt;Aggancia il listener globale dell'evento &lt;code&gt;keydown&lt;/code&gt; alla finestra per catturare i comandi rapidi di debug. Ritorna &lt;code&gt;this&lt;/code&gt;.&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;code&gt;.detach()&lt;/code&gt;
&lt;/h4&gt;

&lt;p&gt;Rimuove i listener degli eventi di tastiera precedentemente agganciati con &lt;code&gt;.attach()&lt;/code&gt;. Ritorna &lt;code&gt;this&lt;/code&gt;.&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;code&gt;.destroy()&lt;/code&gt;
&lt;/h4&gt;

&lt;p&gt;Esegue il clean-up completo dell'istanza scollegando i listener di input, disabilitando l'overlay e svuotando la memoria delle entità tracciate e dei pulsanti.&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;code&gt;.show()&lt;/code&gt; / &lt;code&gt;.hide()&lt;/code&gt; / &lt;code&gt;.toggle()&lt;/code&gt;
&lt;/h4&gt;

&lt;p&gt;Metodi di utilità per manipolare lo stato di visibilità dell'interfaccia grafica (&lt;code&gt;enabled&lt;/code&gt;). Ritornano tutti &lt;code&gt;this&lt;/code&gt;.&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;code&gt;.applySlowMo()&lt;/code&gt; / &lt;code&gt;.toggleFreeze()&lt;/code&gt; / &lt;code&gt;.restoreRealtime()&lt;/code&gt;
&lt;/h4&gt;

&lt;p&gt;Metodi interni mappati sulle scorciatoie da tastiera e sui pulsanti interattivi per alterare la scala temporale o lo stato di pausa della simulazione di &lt;code&gt;BeeEngine.time&lt;/code&gt;.&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;code&gt;.poll()&lt;/code&gt;
&lt;/h4&gt;

&lt;p&gt;Invocato all'interno del ciclo di aggiornamento dell'engine (prima di svuotare gli input del frame). Rileva la pressione del mouse e le coordinate del cursore per gestire l'interazione con i pulsanti HUD di runtime.&lt;/p&gt;

&lt;h3&gt;
  
  
  Metodi di Rendering
&lt;/h3&gt;

&lt;h4&gt;
  
  
  &lt;code&gt;.drawWorld(ctx)&lt;/code&gt;
&lt;/h4&gt;

&lt;p&gt;Rendering in spazio mondo. Deve essere invocato &lt;strong&gt;prima&lt;/strong&gt; che la matrice di trasformazione della camera venga ripristinata. Rinfresca il sistema di collisione tramite &lt;code&gt;BeeSpatialHash&lt;/code&gt;, calcola gli AABB aggiornati e disegna i rettangoli di selezione (Verde per le entità attive, Grigio per le inattive, Rosso semitrasparente per le entità in collisione).&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;code&gt;.drawOverlay(ctx)&lt;/code&gt;
&lt;/h4&gt;

&lt;p&gt;Rendering in spazio schermo. Deve essere invocato &lt;strong&gt;dopo&lt;/strong&gt; l'azzeramento della matrice di trasformazione (coordinate HUD assolute). Disegna il pannello informativo semitrasparente nell'angolo dello schermo, i contatori in tempo reale di FPS, entità e cicli in millisecondi, e i tre pulsanti cliccabili (&lt;code&gt;F3 SLOW&lt;/code&gt;, &lt;code&gt;F4 STOP&lt;/code&gt;, &lt;code&gt;1x LIVE&lt;/code&gt;).&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>gamedev</category>
      <category>webdev</category>
      <category>html</category>
    </item>
    <item>
      <title>BeeTime — Documentazione Tecnica (BeeEngine)</title>
      <dc:creator>Antonio </dc:creator>
      <pubDate>Thu, 10 Sep 2026 20:00:38 +0000</pubDate>
      <link>https://dev.to/antonioprosperi2svg/beetime-documentazione-tecnica-beeengine-gp0</link>
      <guid>https://dev.to/antonioprosperi2svg/beetime-documentazione-tecnica-beeengine-gp0</guid>
      <description>&lt;h1&gt;
  
  
  BeeTime — Gestione Avanzata del Tempo e del Core Loop
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;BeeTime&lt;/strong&gt; è il motore temporale centralizzato di &lt;strong&gt;BeeEngine&lt;/strong&gt; (situato in &lt;code&gt;src/core/BeeTime.js&lt;/code&gt;). Gestisce un singolo ciclo di aggiornamento (&lt;code&gt;tick&lt;/code&gt;) per ogni fotogramma applicando il concetto dei &lt;strong&gt;due assi temporali indipendenti&lt;/strong&gt;. Questo approccio permette di congelare o rallentare il gameplay senza mai bloccare le interfacce utente (HUD), gli shader di transizione o i sistemi audio di sottofondo.&lt;/p&gt;

&lt;p&gt;📦 &lt;strong&gt;NPM:&lt;/strong&gt; &lt;a href="https://npmjs.com" rel="noopener noreferrer"&gt;https://npmjs.com&lt;/a&gt;&lt;br&gt;&lt;br&gt;
🐙 &lt;strong&gt;GitHub:&lt;/strong&gt; &lt;a href="https://github.com" rel="noopener noreferrer"&gt;antonioprosperi2-svg/BeeEngine-V2.5.0&lt;/a&gt;&lt;/p&gt;


&lt;h2&gt;
  
  
  📁 Architettura dei Due Assi Temporali
&lt;/h2&gt;

&lt;p&gt;A ogni frame, il ciclo principale invoca &lt;code&gt;time.tick(timestamp)&lt;/code&gt; una sola volta. Da questo singolo impulso scaturiscono due metriche di delta time distinte:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Unscaled Time (Tempo Reale):&lt;/strong&gt; Avanza costantemente basandosi sull'orologio di sistema. Viene utilizzato per l'HUD, i menu di pausa, gli effetti visivi dell'interfaccia e i mixer audio.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scaled Time (Tempo di Simulazione):&lt;/strong&gt; Risente dei modificatori di scala temporale (&lt;code&gt;timeScale&lt;/code&gt;) e dello stato di pausa del gioco. Viene impiegato per la logica dei componenti, le animazioni dei personaggi, le intelligenze artificiali e la simulazione fisica.
&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;BeeEngine&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;beeengine&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;gioco&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;BeeEngine&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;testCanvas&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;800&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;600&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;gioco&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;start&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="c1"&gt;// Esempi di manipolazione temporale:&lt;/span&gt;
&lt;span class="nx"&gt;gioco&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;pause&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;              &lt;span class="c1"&gt;// Blocca l'asse di simulazione (scaled), l'HUD rimane interattivo&lt;/span&gt;
&lt;span class="nx"&gt;gioco&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;resume&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;             &lt;span class="c1"&gt;// Ripristina lo scorrimento normale del tempo di gioco&lt;/span&gt;
&lt;span class="nx"&gt;gioco&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;setTimeScale&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;0.25&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;   &lt;span class="c1"&gt;// Imposta l'effetto slow-motion (simulazione al 25% della velocità)&lt;/span&gt;
&lt;span class="nx"&gt;gioco&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;time&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;togglePause&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;   &lt;span class="c1"&gt;// Inverte lo stato di pausa (ideale per shortcut di sviluppo come F4)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;blockquote&gt;
&lt;p&gt;⚠️ &lt;strong&gt;Nota Architetturale:&lt;/strong&gt; &lt;code&gt;BeeTime&lt;/code&gt; non è uno scheduler di eventi o una libreria di tweening. È un fornitore di dati puramente numerici. Sistemi complessi come &lt;code&gt;BeeSceneManager&lt;/code&gt; o &lt;code&gt;BeePhysicsWorld&lt;/code&gt; interrogano questi numeri per sincronizzare lo scorrimento del mondo di gioco.&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  ⚙️ Configurazione di Default (&lt;code&gt;BEE_TIME_DEFAULTS&lt;/code&gt;)
&lt;/h2&gt;

&lt;p&gt;La configurazione iniziale dell'orologio è regolata da un oggetto congelato e immutabile:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;BEE_TIME_DEFAULTS&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;Object&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;freeze&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;maxDelta&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;0.05&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;          &lt;span class="c1"&gt;// Evita lo "spike del tempo" (es. lag improvvisi o cambi di tab)&lt;/span&gt;
  &lt;span class="na"&gt;timeScale&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;            &lt;span class="c1"&gt;// Scala temporale di base (1x = velocità normale)&lt;/span&gt;
  &lt;span class="na"&gt;minTimeScale&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;         &lt;span class="c1"&gt;// Limite minimo per il rallentatore&lt;/span&gt;
  &lt;span class="na"&gt;maxTimeScale&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;16&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;        &lt;span class="c1"&gt;// Limite massimo per l'accelerazione (fast-forward)&lt;/span&gt;
  &lt;span class="na"&gt;fixedDelta&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mi"&gt;60&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;      &lt;span class="c1"&gt;// Intervallo di tempo fisso per i calcoli della fisica (60Hz)&lt;/span&gt;
  &lt;span class="na"&gt;maxFixedSteps&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;        &lt;span class="c1"&gt;// Numero massimo di sotto-passi fisici per frame (previene la spirale della morte)&lt;/span&gt;
  &lt;span class="na"&gt;fpsSampleWindow&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;0.5&lt;/span&gt;     &lt;span class="c1"&gt;// Finestra di campionamento in secondi per il calcolo del framerate&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  🛠️ API Reference
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Proprietà di Sola Lettura (Getters)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;paused&lt;/code&gt;&lt;/strong&gt; (&lt;code&gt;boolean&lt;/code&gt;): Restituisce &lt;code&gt;true&lt;/code&gt; se la simulazione di gioco è congelata.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;timeScale&lt;/code&gt;&lt;/strong&gt; (&lt;code&gt;number&lt;/code&gt;): Il fattore di moltiplicazione corrente applicato all'asse di simulazione.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;scaledDt&lt;/code&gt;&lt;/strong&gt; / &lt;strong&gt;&lt;code&gt;dt&lt;/code&gt;&lt;/strong&gt; (&lt;code&gt;number&lt;/code&gt;): Delta time modificato, espresso in secondi. Se il gioco è in pausa, il suo valore è &lt;code&gt;0&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;realDt&lt;/code&gt;&lt;/strong&gt; / &lt;strong&gt;&lt;code&gt;unscaledDt&lt;/code&gt;&lt;/strong&gt; (&lt;code&gt;number&lt;/code&gt;): Delta time reale in secondi, limitato dal tetto massimo di &lt;code&gt;maxDelta&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;alpha&lt;/code&gt;&lt;/strong&gt; (&lt;code&gt;number&lt;/code&gt;): Valore percentuale residuo (da &lt;code&gt;0&lt;/code&gt; a &lt;code&gt;1&lt;/code&gt;) dell'accumulatore fisico, utilizzato per interpolare graficamente le posizioni delle entità tra due step fisici.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Metodi di Controllo e Sincronizzazione
&lt;/h3&gt;

&lt;h4&gt;
  
  
  &lt;code&gt;.delta(unscaled = false)&lt;/code&gt;
&lt;/h4&gt;

&lt;p&gt;Restituisce il delta time appropriato per il sistema richiedente. Passando &lt;code&gt;true&lt;/code&gt;, restituisce l'asse del tempo reale (&lt;code&gt;unscaledDt&lt;/code&gt;).&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;code&gt;.setScale(value)&lt;/code&gt;
&lt;/h4&gt;

&lt;p&gt;Imposta una nuova velocità per il tempo di gioco, vincolando il valore numerico all'interno dei limiti &lt;code&gt;minTimeScale&lt;/code&gt; e &lt;code&gt;maxTimeScale&lt;/code&gt;.&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;code&gt;.pause()&lt;/code&gt; / &lt;code&gt;.resume()&lt;/code&gt; / &lt;code&gt;.togglePause()&lt;/code&gt;
&lt;/h4&gt;

&lt;p&gt;Metodi per congelare, riavviare o invertire al volo lo stato di avanzamento dell'asse di simulazione gameplay.&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;code&gt;.begin(timestamp)&lt;/code&gt;
&lt;/h4&gt;

&lt;p&gt;Allinea l'orologio interno al timestamp corrente senza azzerare i contatori di tempo totali accumulati. È essenziale per prevenire sbalzi distruttivi del delta time subito dopo il caricamento, il ripristino dalla pausa o il ritorno da una scheda del browser in background.&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;code&gt;.reset(timestamp)&lt;/code&gt;
&lt;/h4&gt;

&lt;p&gt;Ripristina interamente i contatori dell'istanza (inclusi i frame renderizzati, i tempi trascorsi e i campionamenti degli FPS) mantenendo inalterati i parametri di configurazione strutturali.&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;code&gt;.tick(timestamp)&lt;/code&gt;
&lt;/h4&gt;

&lt;p&gt;Aggiorna lo stato temporale dell'intero motore. Incrementa i tempi totali (&lt;code&gt;elapsed&lt;/code&gt; e &lt;code&gt;unscaledElapsed&lt;/code&gt;), calcola i fotogrammi al secondo (FPS) correnti e gestisce l'accumulo di tempo necessario per i cicli di fisica a intervallo fisso.&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;code&gt;.consumeFixedSteps(callback)&lt;/code&gt;
&lt;/h4&gt;

&lt;p&gt;Metodo fondamentale per i motori di fisica deterministici (come &lt;code&gt;BeePhysicsWorld&lt;/code&gt;). Svuota l'accumulatore temporale eseguendo la callback passata tante volte quanti sono i passi fissi (&lt;code&gt;fixedDelta&lt;/code&gt;) accumulati nell'ultimo frame, garantendo fluidità e precisione anche in caso di fluttuazioni del framerate del browser.&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>gamedev</category>
      <category>webdev</category>
      <category>html</category>
    </item>
  </channel>
</rss>
