BeeEngine logo BeeEngine JAVASCRIPT 2D ENGINE

 Player Controller 2D in JavaScript: salto, attacco e stati

Documentazione – BeeEngine
v2.8.4

BeePlayer — Documentazione Tecnica

Personaggio giocabile: setMode / jump / consumeAttack

📁 Panoramica

BeePlayer è un BeeEntity con input, vite e score. Vive in src/gameplay/BeePlayer.js. Due modi: setMode('platformer') (gravità 500, salto su grounded) e setMode('free') (gravità 0, WASD su vx/vy). Non assegnare this.mode a mano: la gravità segue setMode.

La demo lo mette in platformer, gruppo player, solid contro solids. Il salto vede isGrounded solo se collisions.run() gira prima dell’update del player (in demo: scene.update).

const hero = new BeePlayer(100, 300, 40, 40); hero.setMode(‘platformer’); gioco.collisions.setGroup(‘player’, [hero]); gioco.collisions.solid(‘player’, ‘solids’);

📁 Update

Senza input non esce: integrate e i figli girano lo stesso. Senza tasti, in platformer vx = 0 solo se input c’è.

  1. 1. spentodestroyed / !active → return.
  2. 2. boost_boost.update(time) (o dt).
  3. 3. inputSe c’è: vx, X/J → wantsAttack, salto o volo.
  4. 4. entitysuper.update → integrate (poi isGrounded = false).

Tasti event.code: frecce / WASD, Spazio salta in platformer. In free, W/S tengono vy a ±speed; senza tasti verticali vy = 0 (niente caduta: gravità è 0).

📁 Attacco, boost, vite

wantsAttack è un impulso: X o J lo accendono. consumeAttack() legge e spegne. Se nessuno lo chiama, resta true finché qualcuno non lo consuma.

boostJump(amount) è permanente (_permanentBoostAmount, jumpForce = baseJumpForce - amount: più amount, più in alto). boostJumpTemporary sovrascrive la forza per N ms (tempo di simulazione); allo scadere torna al permanente, non al base nudo. Alias: potenziaSalto / potenziaSaltoTemporaneo.

takeDamage scala le vite, clamp a 0, ritorna true se morte. Niente invuln, niente knockback, niente destroy. addScore somma e basta.

📁 Dove è facile sbagliare

Usa setMode. player.mode = 'free' non tocca gravity: continui a cadere.

Il salto ha bisogno dei solidi prima. integrate azzera isGrounded a fine frame. Se collisions.run() sta dopo l’update del player, non salti mai.

Il temporaneo non si somma al permanente. Mentre il timer gira, jumpForce = base - amount del temp. Poi riparte il permanente.

consumeAttack è tuo. Il player non lo chiama. Animator o scena, ogni frame in cui vuoi l’impulso.

📁 Esempio: free + attacco

hero.setMode(‘free’); hero.boostJump(80); gioco.start((dt, input, time) => { if (hero.consumeAttack()) slash(hero); });

📁 Riepilogo API

Estende BeeEntity. Input opzionale: senza tasti, la fisica gira lo stesso.

Membro Ritorna Scopo
new BeePlayer(x?, y?, w?, h?, textureKey?) BeePlayer Default 100,100 40×40, speed 220, vite 3. Parte in platformer.
setMode('platformer'|'free') this Mode + gravity 500 o 0.
jump() — vy = jumpForce se grounded o free. Poi isGrounded = false.
boostJump(amount) / boostJumpTemporary(amount, ms) — Permanente vs finestra. Temp allo scadere → permanente.
consumeAttack() boolean Legge e azzera wantsAttack. X/J lo accendono.
addScore(points) / takeDamage(n?) — / boolean Score += . Vite clamp 0; true se morte. Niente i-frames.
update(dt, input, engine) — Early-return se spento. Input se c’è. Sempre super.update.
draw(ctx, engine) — sprite (flipX da vx) o getAsset o cubo blu. save/restore.
destroy() — Cancel del boost + super.destroy.