Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

119
Views
Cómo evitar que collide2D detecte p5.js

Estoy usando la biblioteca collide2D en p5.js para detectar si mi reproductor golpea un obstáculo. Si es así, quiero que el jugador tenga 1 vida menos. El problema con el que me he encontrado es que cuando golpeo un obstáculo, sigue eliminando vidas durante todo el tiempo que paso el mouse sobre él, por lo que termino con -100 vidas cuando paso el mouse sobre todo el obstáculo.

 Code in class Rock(my obstacle): isColliding(obj) { let hit = collideRectCircle(obj.x - 55, obj.y - 60, 105, 109, this.x, this.y, 130); return hit; }
 code in draw: for (let i = 0; i < rocks.length; i++) { if (rocks[i].isColliding(unicorn)) { lives -= 1 // if (lives <= 0) { // gameOver(); // } }
about 4 years ago · Juan Pablo Isaza
1 answers
Answer question

0

Esto suena como un caso en el que, en lugar de detectar que una condición es verdadera, desea detectar cuándo la condición cambia de falsa a verdadera. El truco es que necesitas rastrear el estado de la condición por obstáculo (suponiendo que dos rocas que chocan con un unicornio simultáneamente deberían disminuir las vidas en 2). Hay un par de formas en las que podrías hacerlo:

 // Option 1. Store the rock-unicorn collision state on each rock function draw() { // ... for (let i = 0; i < rocks.length; i++) { if (rocks[i].isColliding(unicorn)) { if (!rocks[i].wasColliding) { lives -= 1; } // Additional collisions with this rock will not decrement another life rocks[i].wasColliding = true; } else { // Once the collision ends, the rock becomes dangerous again rocks[i].wasColliding = false; } } }

o

 // Option 2. keep track of the collision states in a Set on unicorn // This assumes that unicorn.collidingRocks = new Set() has been run when unicorn is created // See: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set function draw() { // ... for (let i = 0; i < rocks.length; i++) { if (rocks[i].isColliding(unicorn)) { if (unicorn.collidingRocks.has(rocks[i])) { lives -= 1; } // Additional collisions with this rock will not decrement another life unicorn.collidingRocks.add(rocks[i]); } else { // Once the collision ends, the rock becomes dangerous again unicorn.collidingRocks.delete(rocks[i]); } } }

La opción dos sería un poco menos eficiente, porque tiene que establecer búsquedas/agregaciones/eliminaciones en lugar de solo 𝚶(1) búsquedas de índice de matriz al verificar o cambiar el estado de colisión. Sin embargo, sería mejor el diseño OOP, ya que es realmente el unicorn el que se preocupa si ya está chocando con las rocas, en lugar de preocuparse por las rocas. Esto también tendría implicaciones prácticas en el caso de que hubiera más de un unicornio, por ejemplo.

about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!