Autor Tema: Problema con colisiones de sprites  (Leído 5792 veces)

Dr.Fred

  • Commodoremaníaco
  • ****
  • Mensajes: 144
    • Ver Perfil
Problema con colisiones de sprites
« en: Marzo 26, 2010, 19:42:10 »
Bueno, pues me ha picado la cosa y siguiendo con ejemplo del avioncillo, he decidido poner en práctica la colisión de sprites.

Todo bastante sencillo... si he entendido bien, solo es que cuando un sprite colisiona, su bit de la dirección 53278 (o 53279 para colisión con caracteres) se pone a 1.

En el programa hago que cuando colisione con un carácter, se finalice.

Ahora bien... muchas veces nada más ejecutar el programa, detecta una colisión y se termina inmediatamente. Creo que he probado todo, hasta poner todos los bits del 53279 a 0 nada más empezar por si queda algún bit residual a 1, pero nada.

No se por qué puede ser y la cosa es que no siempre pasa. He notado que cuando hago un "hard reset" no pasa, así que intuyo que es algún bit puñetero que queda a 1 y se detecta una colisión nada más empezar el programa...

¿Alguien puede saber por qué pasa?

Muchas gracias.

josepzin

  • Administrador
  • Commodore Master
  • *****
  • Mensajes: 13630
  • Commodoreador web
    • Ver Perfil
    • Mi blog
Re: Problema con colisiones de sprites
« Respuesta #1 en: Marzo 27, 2010, 19:37:51 »
Cita de: "Dr.Fred"
¿Alguien puede saber por qué pasa?

Ese "alguien" seguramente es Carlos :P
www.retroinvaders.com | www.commodoreplus.org  | josepzin.blogspot.com

Dr.Fred

  • Commodoremaníaco
  • ****
  • Mensajes: 144
    • Ver Perfil
Problema con colisiones de sprites
« Respuesta #2 en: Marzo 31, 2010, 12:07:12 »
Bueno, al final la solución ha sido cutre, pero funciona...

Al final leí, que una vez se hacía un PEEK en el registro de colisión, se ponían todos los bits a 0 de nuevo... así que lo único que hice fue hacer un peek fuera del bucle de juego, para que la primera vez que entre ya tenga todo a 0 y no detecte colisión.

Sigo sin entender por qué poniendo el registro a 0 con POKE no funcionaba... pero bueno... misterios de la máquina. :-S

Carlos

  • Desarrolladores
  • Commodore Master
  • ******
  • Mensajes: 652
    • Ver Perfil
Problema con colisiones de sprites
« Respuesta #3 en: Abril 03, 2010, 22:59:57 »
Llego un poco tarde al hilo y ya veo que lo has resuelto. De todas formas comentar que en casi todos los tutoriales que he leído sobre colisiones de sprites, recomiendan no usar las colisiones de sprites por hardware y en su lugar hacerlas por software, un enlace por si sirve de referencia: http://codebase64.org/doku.php?id=base:simple_software_sprite_to_sprite_collision

josepzin

  • Administrador
  • Commodore Master
  • *****
  • Mensajes: 13630
  • Commodoreador web
    • Ver Perfil
    • Mi blog
Problema con colisiones de sprites
« Respuesta #4 en: Abril 04, 2010, 21:00:38 »
Carlos: No entiendo porqué es mejor usar una colision por software? En muchos casos seguro que sí, pero para una colision normal entre 2 sprites (por ejemplo misil -> avion) no creo que haya nada mejor. ¿?
www.retroinvaders.com | www.commodoreplus.org  | josepzin.blogspot.com

Carlos

  • Desarrolladores
  • Commodore Master
  • ******
  • Mensajes: 652
    • Ver Perfil
Problema con colisiones de sprites
« Respuesta #5 en: Abril 05, 2010, 09:35:32 »
Las colisiones de sprites por hardware se controlan mediante uno de los registros del VIC, cada uno de los bits de este registro nos dice si uno de los 8 sprites existentes está en colisión o no.

Si sólo estamos manejando 2 sprites como tú dices no hay ningún problema y de hecho ésta sería la mejor forma de hacerlo, pero si tenemos varios sprites no sabemos cuáles están colisionando con cuáles (sólo sabemos si están colisionando o no). Además si el juego usa multiplexación de sprites, éste método se vuelve inviable.

josepzin

  • Administrador
  • Commodore Master
  • *****
  • Mensajes: 13630
  • Commodoreador web
    • Ver Perfil
    • Mi blog
Problema con colisiones de sprites
« Respuesta #6 en: Abril 06, 2010, 01:36:45 »
Entiendo, cuando hay 8 sprites es posible usarlas, pero cuando se usan mas de 8 por pantalla ya se complica.

No tengo claro eso de "si tenemos varios sprites no sabemos cuáles están colisionando con cuále"... No me acuerdo como era esto de las colisiones, pero ¿no hay manera de saber que sprite colisiona con cual???
www.retroinvaders.com | www.commodoreplus.org  | josepzin.blogspot.com

Carlos

  • Desarrolladores
  • Commodore Master
  • ******
  • Mensajes: 652
    • Ver Perfil
Problema con colisiones de sprites
« Respuesta #7 en: Abril 06, 2010, 11:25:21 »
Supongamos que estamos usando los 8 sprites disponibles.

Si nuestro registro de colisión de sprites tiene el valor 9 (decimal) significa que los bits 0 y 3 están activados y por lo tanto el sprite 0 está en colisión con el sprite 3 (y el 3 con el 0 evidentemente).

Si el registro de colisión de sprites tiene el valor 11 significa que están activados los bits 0, 1 y 3 pero ahora ya no sabemos que sprites colisionan con cuáles, es decir, sabemos que los sprites 0, 1 y 3 están en colisión pero podría estar el 0 con el 1 y el 1 con el 3 o cualquier otra combinación.

No se si me he explicado...  :roll:

josepzin

  • Administrador
  • Commodore Master
  • *****
  • Mensajes: 13630
  • Commodoreador web
    • Ver Perfil
    • Mi blog
Problema con colisiones de sprites
« Respuesta #8 en: Abril 06, 2010, 12:12:42 »
Entiendo perfectamente. Eso para los juegos de naves y mata-mata (con 8 sprites) está perfecto . Todo lo que me toca me mata y todo lo que tocan mis disparos muere :D :D
www.retroinvaders.com | www.commodoreplus.org  | josepzin.blogspot.com