Autor Tema: ayuda con durezas  (Leído 2955 veces)

chuflun

  • Newbie
  • *
  • Mensajes: 31
  • Karma: 0
ayuda con durezas
« en: Julio 26, 2010, 09:01:27 pm »
hola a todos
no se que hago mal pero las durezas no me funcionan,
cuando hago esto...
Código: [Seleccionar]
IF ( map_get_pixel ( fpg_fondo , 7 , x , y ) != colores [_AZUL] )
advance(-10);
END
siempre esta avanzando -10, mi personaje es un tanque y avanza 8 cuando pulso (up)
en global tengo esto...
Código: [Seleccionar]
int colores[6];
y en constante esto...
Código: [Seleccionar]
_ROJO = 1;
_VERDE = 2;
_AZUL = 3;
_AMARILLO = 4;
_ROSA = 5;
_CELESTE = 6;
y cuando ejecuto el juego llamo a un proceso que recoge los colores que hay en una imagen que tengo con 6 colores, que son con los que pinto las durezas
Código: [Seleccionar]
PROCESS inicia_durezas()

BEGIN

colores[_ROJO] = map_get_pixel (fpg_fondo,999,1,1);
colores[_VERDE] = map_get_pixel (fpg_fondo,999,2,1);
colores[_AZUL] = map_get_pixel (fpg_fondo,999,3,1);
colores[_AMARILLO] = map_get_pixel (fpg_fondo,999,4,1);
colores[_ROSA] = map_get_pixel (fpg_fondo,999,5,1);
colores[_CELESTE] = map_get_pixel (fpg_fondo,999,6,1);
END
bueno a ver si me podeis ayudar porque se que estoy haciendo algo mal (de echo no hace lo que quiero) pero no se el que
lo que quiero es que no atraviese las zonas que he pintado de color x, sobraba decirlo pero ahi queda
gracias a todos

FreeYourMind

  • Hero Member
  • *****
  • Mensajes: 5681
  • Karma: 128
    • GECA soft
Re: ayuda con durezas
« Respuesta #1 en: Julio 26, 2010, 09:13:44 pm »
utiliza say para ver que color estas obteniendo para comprobar que la igualdad del if se cumple

color = map_get_pixel ( fpg_fondo , 7 , x , y );
say(color);
say(colores [_AZUL]);

DjSonyk

  • Sr. Member
  • ****
  • Mensajes: 492
  • Karma: 24
Re: ayuda con durezas
« Respuesta #2 en: Julio 26, 2010, 09:42:23 pm »
utiliza say para ver que color estas obteniendo para comprobar que la igualdad del if se cumple

color = map_get_pixel ( fpg_fondo , 7 , x , y );
say(color);
say(colores [_AZUL]);
Vaya veo que le vas hacer caso a Splynter ,lo digo por los Say ,Free... ;P

Te recomiendo lo mismo que Free ,que compruebes que valores obtienes para ver si es porque no son los mismos...

SplinterGU

  • Hero Member
  • *****
  • Mensajes: 12887
  • Karma: 377
Re: ayuda con durezas
« Respuesta #3 en: Julio 26, 2010, 09:44:18 pm »
utiliza say para ver que color estas obteniendo para comprobar que la igualdad del if se cumple

color = map_get_pixel ( fpg_fondo , 7 , x , y );
say(color);
say(colores [_AZUL]);

;) muy bien, muy bien... me gusta ver que uno no habla al pedo y la gente toma los consejos... gracias... :)

me alegraste, te voy a dar 1 karma.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

FreeYourMind

  • Hero Member
  • *****
  • Mensajes: 5681
  • Karma: 128
    • GECA soft
Re: ayuda con durezas
« Respuesta #4 en: Julio 26, 2010, 09:48:25 pm »
Vaya....
Pues os cuento un secreto, el say ya lo llevo usando hace tiempo (por lo menos en este proyecto es una constante, por los codigos de colores y demas cosillas ya que tambien uso mapas de durezas y he definido varios colores como aqui nuestro amigo).
Mi duda de ayer fue una idiotez, en la cual no se me paso por la cabeza utilizarlo en el case 0...
 ;D ;D

chuflun

  • Newbie
  • *
  • Mensajes: 31
  • Karma: 0
Re: ayuda con durezas
« Respuesta #5 en: Julio 26, 2010, 10:35:37 pm »
lo del say no lo entiendo muy bien
pero aparte yo en el if pongo x e y al pasarle las coordenadas pero
que tengo que poner para anticiparme un poco?
quiero decir que si mi protagonista se moviera en el eje x, pondria en el if x + 10
pero al moverse con advance como lo hago

DjSonyk

  • Sr. Member
  • ****
  • Mensajes: 492
  • Karma: 24
Re: ayuda con durezas
« Respuesta #6 en: Julio 26, 2010, 10:45:56 pm »
Lo de say deves incluirle en el juego , import "mod_say" , luego haces como te explico Free y en la consola te pone los valores que vas recogiendo, lo de avance simplemente le tienes que poner el valor que quieres que avance en el angulo que tenga por ejemplo avance(10), lo que es un poco mas "complicadillo" en hacer que el personaje este en el angulo que deseas ,podrias hacerlo algo asi if ( key(_left) ) angle+=90000; end ...

chuflun

  • Newbie
  • *
  • Mensajes: 31
  • Karma: 0
Re: ayuda con durezas
« Respuesta #7 en: Julio 26, 2010, 10:47:50 pm »
vale ya he hecho say y los colores del scroll los pilla bien pero (_AZUL) o cualquier otro color me devuelven 1
que esta pasando

huy iva a guardar este post con ctr+s, bufff...

chuflun

  • Newbie
  • *
  • Mensajes: 31
  • Karma: 0
Re: ayuda con durezas
« Respuesta #8 en: Julio 27, 2010, 01:31:21 am »
ya esta,
el problema es que al comprobar el color de mi grafico ponia como (y) un 1 pensando en el pixel 1, y es el (0)

a ver si me podeis resolver lo de advance

Drumpi

  • Hero Member
  • *****
  • Mensajes: 6340
  • Karma: 162
  • Odio el periodo "entre proyectos"
    • La web de Drumpi
Re: ayuda con durezas
« Respuesta #9 en: Julio 27, 2010, 04:38:29 am »
Me temo que advance actúa sobre X e Y, así que 1 de dos:
-O creas una funcion en la misma posición y ángulo, y haces que avance lo que sea y devuelva el color de dicha posición.
-O tiras de trigonometría básica: sabes la distancia, el ángulo y el punto de origen. Con el seno averiguas el avance en Y y con el coseno en X:
new_x=x+avanzar*cos(angle);
new_y=y+avanzar*sin(angle);
Espero no equivocarme, es un poco tarde :P
Hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta.
(Drumpi epic moment)

chuflun

  • Newbie
  • *
  • Mensajes: 31
  • Karma: 0
Re: ayuda con durezas
« Respuesta #10 en: Julio 27, 2010, 06:18:55 pm »
pero aun asi solo calculo si hay obstaculo justo delante de mi protagonista
que pasa si un objeto me da de lado?
tendria que calcular si hay obstaculo dentro de un radio determinado
he encontrado esto...

Código: [Seleccionar]
WHILE ( map_get_pixel ( fpg_fondo , 7 , x+radio , y ) == obstaculo ) x--; END
WHILE ( map_get_pixel ( fpg_fondo , 7 , x-radio , y ) == obstaculo ) x++; END
WHILE ( map_get_pixel ( fpg_fondo , 7 , x , y+radio ) == obstaculo ) y++; END
WHILE ( map_get_pixel ( fpg_fondo , 7 , x , y-radio ) == obstaculo ) y--; END

y esto funcionaria bien si mi personaje fuera un circulo pero es un rectangulo
aun asi me hace cosas raras

aqui os dejo mi juego completo para que probeis si os apetece
http://www.mediafire.com/?q3cy45r29vm2m9x
hay que encontrar otra solucion
« última modificación: Julio 27, 2010, 06:27:36 pm por chuflun »

FreeYourMind

  • Hero Member
  • *****
  • Mensajes: 5681
  • Karma: 128
    • GECA soft
Re: ayuda con durezas
« Respuesta #11 en: Julio 27, 2010, 06:42:19 pm »
Tienes que poner un color distinto para cada esquina del rectangulo.

chuflun

  • Newbie
  • *
  • Mensajes: 31
  • Karma: 0
Re: ayuda con durezas
« Respuesta #12 en: Julio 27, 2010, 07:06:34 pm »
las durezas estan en el scroll con forma de arboles, o lo que sea
el rectangulo es mi personaje

FreeYourMind

  • Hero Member
  • *****
  • Mensajes: 5681
  • Karma: 128
    • GECA soft
Re: ayuda con durezas
« Respuesta #13 en: Julio 27, 2010, 08:14:23 pm »
Lo mismo.

Drumpi

  • Hero Member
  • *****
  • Mensajes: 6340
  • Karma: 162
  • Odio el periodo "entre proyectos"
    • La web de Drumpi
Re: ayuda con durezas
« Respuesta #14 en: Julio 28, 2010, 12:15:53 am »
Si tu personaje es un rectángulo tendrás que hacer la operación que te dije 4 veces, una por cada esquina, por lo que primero tendrás que determinar la posición de cada esquina (puedes hacerlo por trigonometría o usando puntos de control).

Sé que puedes pensar que los obstáculos se pueden colar por  entre medias, pero entonces tendrías que hacer una comprobación por cada pixel del contorno para que fuese perfecto y ya no se si compensa tanta perfección por el trabajo que lleva.
Aprenderás que, en ocasiones, no hay que ser tan perfeccionista y concederse algunas "facilidades". Si es tu primer mapa de durezas, a menos que tu personaje sea gigante, puedes comprobar sólo el centro, y si no, pues con 4 esquinas vale (aunque sea un círculo).
Hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta.
(Drumpi epic moment)