ayuda con durezas

Started by chuflun, July 26, 2010, 09:01:27 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

chuflun

hola a todos
no se que hago mal pero las durezas no me funcionan,
cuando hago esto...

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...

int colores[6];

y en constante esto...

_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

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

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

Quote from: FreeYourMind on July 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]);
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

Quote from: FreeYourMind on July 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]);

;) 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

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

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

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

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

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

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

#10
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...


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

FreeYourMind

Tienes que poner un color distinto para cada esquina del rectangulo.

chuflun

las durezas estan en el scroll con forma de arboles, o lo que sea
el rectangulo es mi personaje

FreeYourMind


Drumpi

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)