PDA

Ver la versión completa : Duda mapa de durezas [SDL]



Whitesnake
20/08/2005, 00:17
Weeeeeeeeenas!

Saludos a todos de nuevo, si, os necesito de nuevo pero esta ya es la ultima duda que tengo dentro de na ya habre acabado.

Os explico, he creado un mapa de durezas para acotar el movimiento de mi personaje por la pantalla, era la primera vez que lo usaba y pense que actuaba de manera diferente, pensaba que servia para ajustar mas a la hora de crear colisiones y asi mi personaje se pararia delante de la pared cuando empezase su cuerpo y no el recuadro que engloba su imagen.

Es esto normal?
He hecho algo mal?

En el sistema de durezas para seleccionar el pixel marcas la x y la y de la imagen, por eso se para ahi, pero como hago para que se pare cuando empiece el cuerpo?

A ver si podei echarme una mano, gracias!

Segata Sanshiro
20/08/2005, 00:23
Quizás debas comprobar si el color del pixel del personaje con el que compruebas, es transparente o no.

Whitesnake
20/08/2005, 00:35
Si es transparente.

Estoy usando una función a la que le paso la superficie de las durezas y las coordenadas (x,y) de un pixel y me dice de que color es, pero claro como hago para que solo me tenga en cuenta la silueta? como lo haceis vosotros?

Gocho
20/08/2005, 00:53
Pues asi a grosso modo:

if (collision(player,mapa)) {
if (color(player.puntodecolision)<>transparente)
mueves();
}

Se entiende, ¿no?

Pero vamos, que tal vez podrías achicar el rectangulo del personaje ;)

Whitesnake
20/08/2005, 01:23
Pues asi a grosso modo:

if (collision(player,mapa)) {
if (color(player.puntodecolision)<>transparente)
mueves();
}

Se entiende, ¿no?

Pero vamos, que tal vez podrías achicar el rectangulo del personaje ;)


No se si entiendo bien lo que quieers decir, pero el sprite y el fondo esta colisionando todo el rato, lo que quiero averiguar es por ejemplo cuando el sprite invade una zona por la que no puede apsar, esta seria de color rojo en el mapa de durezas, lo que quiero saber es como hacer para pasarle a la funcion que mira de que color es el pixel solo la silueta y no el rectangulo que lo contiene.


Igual lo estoy planteando mal y deberia superpones las dos imagenes sumar sus colores y ver el resultante.....

Eskema
20/08/2005, 01:34
Normalmente en SDL usas rectangulos como bien dices con lo cual no podras hacer la colision solo de la silueta, una opcion como bien te han dicho es acotar el rectangulo un 20% menos (es lo q hago yo) o bien modificar todo el sistema que tengas para q solo detecte las colisiones a nivel de pixel. Yo tengo unas librerias en c++ que detectan la colision por rectangulo o por pixel como prefieras, pero como uso c pues de poco me sirven ;)

Whitesnake
20/08/2005, 01:37
Ya lo tengo!

Imaginad que tenemos 2 superficies (personaje y bala) y queremos ver si colisionan los dibujos en si, no los cuadrados que los contienen, creariamos 2 imagenes del personaje y la bala a dos colores, por ejemplo blanco y rojo o como querais, estas imagenes irian debajo de los dibujos de la bala y el personaje, en cada ciclo del juego coguemos todos los pixeles de estas dos imagenes suplementarias y si sumando sus dos colores nos da la suma en hexadecimal de rojo mas rojo es que estan chocando.

Lo malo que si hay muchos objetos en pantalla puede ser muy lento de hacer....

Mañana lo probaré a ver si sale, adios!

Pd:Mañana edito el post y lo explico algo mejor, me voy a dormir adios!