BeeEngine logo BeeEngine JAVASCRIPT 2D ENGINE

Logica di Pattugliamento Asse X

Documentazione – BeeEngine
v2.8.4

BeeEnemy — Documentazione Tecnica

Pattuglia sull’asse X: setPatrolBounds / speed su worldX

📁 Panoramica

BeeEnemy è un BeeEntity che cammina in orizzontale. Vive in src/gameplay/BeeEnemy.js. Non è un fighter: niente HP, niente takeDamage, niente Y. L’ostilità la dà il gruppo di collisione (in demo: hazards).

v2.8.4: update esce se spento, cade su worldX, i bound sono un muro (clamp + inversione), a destra conta worldX + width. Test in scripts/test-beeenemy.mjs.

const enemy = new BeeEnemy(220, 348, 32, 32); enemy.setPatrolBounds(200, 380); gioco.collisions.add(‘hazards’, enemy);

📁 Update: early-return, mondo, muro

speed === 0 è “sto fermo”: BeeEnemyShooter ci conta (lui usa vx/vy).

  1. 1. spentodestroyed o !active → return. Niente passo, niente inversione.
  2. 2. passoworldX += speed * dt. Con un parent, locale e mondo non coincidono.
  3. 3. muroOltre maxX (bordo destro = worldX + width) o sotto minX: clamp, poi inverte speed.

Poi super.update → integrate(). Il costruttore lascia vx/vy/gravity a zero. Se li accendi insieme a speed, il moto si raddoppia. Senza setPatrolBounds (minX/maxX null) cammina dritto per sempre.

📁 Dove è facile sbagliare

Non è un combattimento. Nessun danno, nessuna vita. Il player lo sente solo se lo metti in un gruppo e fai overlap.

Non mischiare speed e vx. Una sola fonte. Lo shooter azzera speed apposta.

Il corridoio deve stare nella larghezza. Se maxX - minX < width i due clamp si litiga: un frame a destra, il successivo a sinistra.

Niente pool hook. Non è recycle/reset. Un acquire su questa classe non ritela i bound.

📁 Esempio: demo + parent

const guard = new BeeEnemy(0, 0, 32, 32); hub.addChild(guard); guard.setPatrolBounds(hub.worldX, hub.worldX + 200); guard.speed = 80;

📁 Riepilogo API

Estende BeeEntity.

Membro Ritorna Scopo
new BeeEnemy(x, y, w?, h?, textureKey?) BeeEnemy Default 32×32, speed 50, minX/maxX null.
setPatrolBounds(minX, maxX) — Muri mondo. null = nessun muro su quell’asse.
speed number Pixel/secondo su X. Segno = verso. 0 = fermo (lo shooter).
minX / maxX number o null Sinistra = worldX. Destra = worldX + width.
update(dt, input, engine) — Early-return se spento. Passo, clamp, invert, super.update.
draw(ctx, engine) — getAsset(textureKey) o rettangolo rosso. Guardia come lo shooter.