¿Colisión con durezas?

Started by zfour, December 23, 2011, 04:14:05 AM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

zfour

Estoy intentando hacer que el prota de un juego ya no avance altocar algun objeto duro. Me miré varios ejemplos del bennupack, pero realmente no los comprendo. Leí el tuto de Windgate pero no logro hacerlo con map_get_pixel(); ya que comparo algo así para avanzar a la izquierda...
Quoteif(key(_left) && map_get_pixel(fondo,1,x+=15,y) != map_get_pixel(fondo,2,0,0))
...Tengo un fpg con el grafico 1 con las durezas del mapa (de rojo las paredes) y en ese mismo fpg una imagen (identificada con el 2) con el primer pixel de rojo. Lo que hago aca es comprobar que x+=15 no sea el color rojo de las durezas antes de moverme, pero no funciona, el personaje camina raro.

Espero me puedan explicar esto porfavor o aconsejarme algún otro método para los durezas, saluuu y graciaaa!

Futu-block

ok chavalin, asi por lo pron te falta el resto de la comparacion, pero lo que tienes que tener claro es que si vá a la izquierda o left la x se reduce, osea hay que poner x-15 y si vá a la derecha o rigth tienes que poner x+15

;)

zfour

Eso mismo tengo Futu! Esta es sólo la comparación de la izquierda, la de la derecha cambia el kewy(_right) además de x+=15, como bien indicas. Pero no colisiona con la pared no sé por qué

Saluu!

Futu-block


vale, de acuerdo, es que usas dos durezas en la misma comparacion y puede que sea eso,


primero pon una comparacion de dureza y la asignas a una variable, ejemplo:
Quotevar_pantalla = map_get_pixel(fondo,2,0,0)
pruebala dentro y fuera del loop


y despues ya podras usar en el movimiento lo de:
Quoteif( (map_get_pixel(fondo,1,x-=15,y)!= var_pantalla and key(_left)) etc...[/size]






zfour

pué nada, que no se detiene al tocar la pared, y lo ciento hasta un poco mas rapido de la velocidad normal al andar Lo hago igual que como me recomendaste Futu, por separado en variable, pero nada

espero solucionare esto proonto, saluuu!

gecko

si el proceso se va a mover de a 15 pixels, la dureza deberia ser de 15 o mas pixels de ancho, porque posiblemente lo que suceda es que al hacer la comprobacion nunca llega a tocar el color de dureza, si este es muy fino. Proba haciendo las durezas mas anchas.

Otra opcion tambien es comprobar los 15 pixels uno por uno antes de avanzar y luego avanzar, si corresponde.
Torres Baldi Studio
http://torresbaldi.com

zfour

Quote from: gecko on December 24, 2011, 04:22:44 AM
si el proceso se va a mover de a 15 pixels, la dureza deberia ser de 15 o mas pixels de ancho, porque posiblemente lo que suceda es que al hacer la comprobacion nunca llega a tocar el color de dureza, si este es muy fino. Proba haciendo las durezas mas anchas.

Otra opcion tambien es comprobar los 15 pixels uno por uno antes de avanzar y luego avanzar, si corresponde.


Ya bajé de 15 a 5, ya que la dureza es mayor que 5pixeles, pero sigue ignorándola

gecko

estas seguro que los colores son exactamente el mismo? el que tomas como dureza, y el que comprueba?

Tambien vi otra cosa. En el codigo que se comenta ahi arriba... para una dureza usas el grafico 2, y para la otra el 1.
Torres Baldi Studio
http://torresbaldi.com

Futu-block

eso es verdad, no me habia dao cuen, no he trabajao mucho con las durezas ;D

peterpollito

#9
Aveces cada programa de diseño utiliza una paleta con unos colores cuyos numeros son diferentes a los de otros programas.
Si usas Paint.net la paleta coincide sin problemas.
Puede que tu fallo sea que le pides que se cumplan las dos condiciones a la vez.

¿cargas en el map_get_pixel el scroll y la imagen con las durezas?
Te pongo un ejemplo de como lo hice yo y a ver si te falta algo:

Asi invoco el scroll:

fase = 4;
fondo = 2;
start_scroll ( 0 , fpgs [ _ESCENARIO ] , fase , fondo , 0 , 12 );       

Asi defino yo las durezas:

GLOBAL
    tp_durezas durezas;         //Estructura del tipo durezas

FUNCTION inicializar_durezas()
//Función encargada de asociar un color determinado a cada dureza
BEGIN
    durezas.treparLateral=map_get_pixel(fpgs[_ESCENARIO],999,0,4);        //Rojo
    durezas.suelo=map_get_pixel(fpgs[_ESCENARIO],999,0,0);                //Amarillo
    durezas.trepar=map_get_pixel(fpgs[_ESCENARIO],999,0,3);               //Verde
    durezas.pared=map_get_pixel(fpgs[_ESCENARIO],999,0,1);                //Azul
    durezas.daño=map_get_pixel(fpgs[_ESCENARIO],999,0,2);               //Rosa
    say ( durezas.techo + " " + durezas.suelo + " " + durezas.trepar + " " + durezas.pared + " " + durezas.daño + " " + durezas.treparLateral );
END


Ejemplo pretando izquierda:

IF ( key ( _RIGHT ) ) // desplaza el personaje a la derecha con la tecla derecha
            flags = 0;
            IF (estado != _GATEAR)
                x = x + 4;
                pixel_leido = map_get_pixel (fpgs [ _ESCENARIO ],dureza,x + 10,y);
            ELSE
                x = x + 2;
                pixel_leido = map_get_pixel (fpgs [ _ESCENARIO ],dureza,x + 5,y);
            END
END

No es lo mismo pero igual te guía.

Un saludo

zfour

#10
peterpollito, gracias por el código; me fue muy util porque yo ponía if(key(_left) && map_get_pixel(fondo,1,x+=15,y) != map_get_pixel(fondo,2,0,0))

y era

if(key(_left) && map_get_pixel(fondo,1,x+15,y) != map_get_pixel(fondo,2,0,0))

Sin el = ... gracias a todos por ayudarme, saluuu!

P.D. ¿Alguien tiene algún ejemplo de plataformas que me pase? Encontré uno en el bennupack, pero me parece demaciado complicado admeás de que no está comentado el codigo

Futu-block

odere, no habia visto el igual ese...

peterpollito

#12
De nada, pa eso estamos.
Yo codigo que te pueda dar solo tengo un ejemplo que hice de mi segunda prueba, la primera fue un matamarcianos.
Es un beat´m up, bueno, unas pruebas de cuando aprendi a hacerlo pero esta ultima version le quite el
movimiento por toda la fase y lo deje como un plataformas. Malo claro, solo era una prueba y el codigo
probablemente sea sencillo pero al menos esta comentado.

A ver si te sirve de algo.

http://dl.dropbox.com/u/16894167/videojuego%20prueba.rar

Un saludo

zfour

peterpollito, muy util tu ejemplo!!!

ojala pronto pueda hacer saalto en mi juego jeje , saluuu

peterpollito

En ese ejemplo salta y dispara las bolas. No se que teclas
eran tu toca todas a ver que hace pero el salto esta.

Un saludo