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!
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
;)
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!
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]
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!
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.
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
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.
eso es verdad, no me habia dao cuen, no he trabajao mucho con las durezas ;D
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
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
odere, no habia visto el igual ese...
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 (http://dl.dropbox.com/u/16894167/videojuego%20prueba.rar)
Un saludo
peterpollito, muy util tu ejemplo!!!
ojala pronto pueda hacer saalto en mi juego jeje , saluuu
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