Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
como se puede crear un disparo
#9
Thumbs Up 
No es terreno pantanoso, es algo que todo juego 2D debe implementar, pero a la vez es sencillo y lo puedes reutilizar en cualquier juego tal cual.

Por cada actor, tienes que mantener como propiedad interna su rectángulo envolvente o "hitbox" como se la conoce también. El rectángulo se obtiene sumando el ancho y el alto (que debería ser constante durante toda la vida del actor) a la posición x,y que va cambiando.

Luego necesitas una función que te devuelve si dos rectángulos intersectan. Eso está más que inventado, sólo tienes que copiarlo del enlace que te he puesto antes.

Finalmente, en el método update() de cada objeto, tienes que recorrer la lista de actores[] y mirar si para el objeto que estás ejecutando, su "hitbox" intersecta con el "hitbox" de otro actor del tipo que te interese. Por ejemplo en tu objeto DisparoJugador sólo te interesa mirar si intersecta con objetos de tipo Enemigo, pero no con Jugador ni con DisparoJugador, ya que no hay interacción entre ellos.

Normalmente en la práctica el hitbox se reduce un poco respecto al tamaño real del sprite para dar un poco de margen. Si no, puedes encontrarte que aunque visualmente veas que dos objetos no han colisionado, porque sus píxeles no se tocan, el juego detecta una colisión y tu personaje muere porque una bala le ha pasado cerca pero sin tocarlo. Injusto! Al encoger el hitbox este efecto se minimiza. Pero si te pasas, puede pasarte lo contrario: que visualmente veas que dos objetos chocan, pero no llegue a detectarlo. Al final es un equilibrio entre falsos positivos y falsos negativos: cuanto más intentes minimizar uno, más se te disparará el otro.

La función de colisión de tilengine puede servirte para darte ese extra de precisión a nivel de píxel: una vez detectas una colisión de rectángulos, entonces miras si en ambos sprites (tiene que ser en los dos) devuelven check_collision() a True. Si no, puedes descartar la colisión aunque sus hitbox intersecten.

De todas formas la mayoría de engines 2D no tienen este nivel de precisión de píxel, y aproximan con rectángulos o círculos como en el enlace que te he pasado. Realmente muy pocos modelos de gameplay justifican esa precisión de pixel. Si no lo activas puedes ganar algo de rendimiento, ya que de promedio un sprite con colisión de píxel activada puede requerir el doble de tiempo de CPU en dibujarse que uno sin activar.

Ánimo!
Reply


Messages In This Thread
como se puede crear un disparo - by Hokuto40 - 03-24-2020, 02:22 AM
RE: como se puede crear un disparo - by megamarc - 03-26-2020, 03:10 AM
RE: como se puede crear un disparo - by Hokuto40 - 03-26-2020, 06:18 AM
RE: como se puede crear un disparo - by megamarc - 03-26-2020, 07:12 PM
RE: como se puede crear un disparo - by Hokuto40 - 03-26-2020, 07:31 PM
RE: como se puede crear un disparo - by Hokuto40 - 03-26-2020, 11:16 PM
RE: como se puede crear un disparo - by megamarc - 03-27-2020, 01:42 AM
RE: como se puede crear un disparo - by Hokuto40 - 03-27-2020, 05:39 AM
RE: como se puede crear un disparo - by megamarc - 03-27-2020, 06:07 AM
RE: como se puede crear un disparo - by Hokuto40 - 03-27-2020, 08:34 PM
RE: como se puede crear un disparo - by megamarc - 03-28-2020, 01:36 AM
RE: como se puede crear un disparo - by Hokuto40 - 03-28-2020, 04:43 AM

Forum Jump:


Users browsing this thread: 1 Guest(s)