Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
colision y destrucion de objetos
#11
Hola,

El sistema de colisiones es algo que depende mucho del tipo de juego que estés haciendo, por eso no se puede crear algo genérico. Cuántos puntos de testeo tiene tu objeto con el fondo y qué distribción tienen? Con qué tipo de tiles y en qué capa te interesa colisionar? Eso depende totalmente de cada juego en concreto.

Tilengine te ofrece unas funciones para que puedas implementarte tu sistema de colisiones:

  • La función TLN_GetLayerTile() te devuelve información detallada acerca del tile que se encuentra en una posición determinada del mapa, en la estructura TLN_TileInfo. Esta función es la que usan los ejemplos SuperMarioClone y TilenginePythonPlatformer en sus respectivos bindings para interactuar col en escenario.
  • La función TLN_EnableSpriteCollision() habilita la detección de colisiones por píxel en un determinado sprite, y la función TLN_GetSpriteCollision() te devuelve si un sprite con detección de colisiones habilitado ha chocado con otro sprite, a nivel de píxel.
Reply
#12
Gracias por la informacion,pero creo que no me has entendido.
Yo solo queria saber como detectar una colision entre dos sprites,no queria saber como detectar colisiones para un juego de plataformas.

Vere estas funciones que me has enseñado y intentare ver como hago lo de la colision entre dos sprites. Cry
Reply
#13
Hola Megamarc,despues de 2 horas intentando hacer funcionar las colisiones,por fin lo he hecho.

Pero claro...el nombre y la forma de funcionar de la version de python es distinto que la de c,y he tenido que hacer cientos de pruebas hasta conseguir que funcione,sobre todo el colisionar con dos objetos que... vaya tela.

Esto si funciona.
Code:
if engine.sprites[1].check_collision() or engine.sprites[2].check_collision():
           engine.sprites[0].set_scaling(1,1)
       else:
           engine.sprites[0].set_scaling(2,2)

Este tambien.
Code:
if engine.sprites[1].check_collision():
           engine.sprites[0].set_scaling(1,1)
       elif engine.sprites[2].check_collision():
           engine.sprites[0].set_scaling(1,1)
       else:
           engine.sprites[0].set_scaling(2,2)

Pero este no y no se porque.
Code:
if engine.sprites[1].check_collision():
           engine.sprites[0].set_scaling(1,1)
       else:
           engine.sprites[0].set_scaling(2,2)
       #colision enemigo2------
       if engine.sprites[2].check_collision():
           engine.sprites[0].set_scaling(1,1)
       else:
           engine.sprites[0].set_scaling(2,2)

Ahora hablando en serio,tienes que hacer ejemplos de cada funcion de la version de python,por que si no....puedo estar haciendo cientos de pruebas hasta conseguir saber como funciona cada funcion o no conseguirlo nunca y seguir dandome cabezazos contra la pared y no llegar a ninguna parte.

Yo ya no se como seguir,no haces ejemplos de cada funcion y tampoco das una respuesta clara cuando te pregunto....¿que hago?,estoy por rendirme. Cry
Reply
#14
Hola!

Como me falta el contexto de lo que rodea a los ejemplos no sé por qué no tienes el comportamiento esperado, a simple vista parece estar bien. Lo que sí es importante es que para que check_collision() sobre un Sprite te funcione, primero debes haberla habilitado con enable_collision(). Y sólo te funcionará entre los sprites que tengan habilitadas las colisiones. Es decir que si el sprite[1] tiene las colisiones habilitadas pero el sprite[2] no, no se detectará una colisión entre ellos.

En cualquier caso, este mecanismo te permite saber con alta precisión si un sprite está involucrado en una colisión a nivel de píxel con otro, pero no te dice cual (o cuales) son los otros sprites implicados. Este método debe complementarse con el tradicional de detectar solapamiento de rectángulos envolventes. En la práctica se suele utilizar sólo el método de la caja envolvente con una área algo menor que el gráfico del spite para permitir cierta holgura.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)