PDA

Ver la versión completa : Problema con Fenix: Procedimiento 0 no activo y error de ejecucion en proceso...



hellcross
03/01/2008, 15:25
Hola!

Bueno pues tengo un problemilla. Cuando voy a ejecutarlo, me salta un error que dice: Error de ejecución en proceso 65539: Procedimiento 0 no activo.
Viene a ser despues de haberle metido el tema de las durezas y tal al juego...

A ver si lograis ayudarme y hecho eso y el codigo del otro pj, solo quedaria lo mas facil del juego y... a la gp! *O* XDD

Bueno he aqui el codigo en cuestion :P


Program LeidenTod;

Global
INT ADAM_POSITION_X;
INT ADAM_POSITION_Y;//Variables del personaje
INT GRAFICOS; //EL FPG DONDE ESTAN LOS GRAFICOS
INT DESPEGA_X;//DUREZAS
INT DESPEGA_Y;//DUREZAS
INT OBSTACLE;//DUREZAS
INT COLOROBSTACULO;//DUREZAS
End//Terminamos de establecer las variables globales

Begin //EMPIEZA EL PROGRAMA CON UN PJ EN UN SCROLL.
SET_MODE(320,240,16); //PANTALLA A 320X240 A 16 BITS
SET_FPS(160,1); //FPS (MODIFICABLE)
GRAFICOS=LOAD_FPG("LEIDENTOD.FPG"); //DECIMOS QUE ES GRAFICOS
ADAM(ADAM_POSITION_X,ADAM_POSITION_Y);//SITUAMOS AL PJ
start_scroll(0,GRAFICOS,314,0,0,0);//EMPEZAMOS UN SCROLL CON EL PJ Y UN FONDO. EN ESTE CASO, EL DISTRIBUIDOR
COLOROBSTACULO=MAP_GET_PIXEL(GRAFICOS,102,12,12);//LAS DUREZAS

END

PROCESS ADAM(ADAM_POSITION_X,ADAM_POSITION_Y);//EMPEZAMOS EL PROCESO DEL PJ
BEGIN

CTYPE=C_SCROLL;
SCROLL[0].CAMERA=ID; //INICIA UN SCROLL FRENTE AL PERSONAJE
GRAPH=1;
ANGLE=0;

LOOP
IF(MAP_GET_PIXEL(GRAFICOS,102,SON.X+DESPEGA_X,SON. Y+DESPEGA_Y)==COLOROBSTACULO)
OBSTACLE=TRUE;
ELSE
OBSTACLE=FALSE;
END
DESPEGA_X=0;
DESPEGA_Y=0;
IF(KEY(_RIGHT))DESPEGA_X=2;END;
IF(KEY(_LEFT))DESPEGA_X=-2;END;
IF(KEY(_UP))DESPEGA_Y=-2;END;
IF(KEY(_DOWN))DESPEGA_Y=2;END;

//ANIMACIÓN Y MOVIMIENTO DE ESTE.
IF (KEY(_RIGHT)AND NOT KEY(_UP) AND NOT KEY(_DOWN)AND OBSTACLE==FALSE)
X=X+2;

IF (GRAPH<=10 OR GRAPH>=13) GRAPH=10;END;
GRAPH=GRAPH+1;
FLAGS= 0;
END

IF (KEY(_LEFT) AND NOT KEY(_UP) AND NOT KEY (_DOWN)AND OBSTACLE==FALSE)
X=X-2;

IF (GRAPH<=10 OR GRAPH>=13)GRAPH=10;END;
GRAPH=GRAPH+1;
FLAGS=1;
END

IF (KEY(_UP) AND NOT KEY (_LEFT) AND NOT KEY(_RIGHT)AND OBSTACLE==FALSE)

Y=Y-2;
IF (GRAPH<=6 OR GRAPH>=9) GRAPH=6; END;
GRAPH=GRAPH+1;
END
IF (KEY(_DOWN)AND NOT KEY (_LEFT) AND NOT KEY(_RIGHT)AND OBSTACLE==FALSE)
Y=Y+2;
IF (GRAPH<=1 OR GRAPH>=4); GRAPH=1;END
GRAPH=GRAPH+1;
END
FRAME;
END //LOOP
END



Espero que se entienda :confused:

Un saludo :brindis:

Segata Sanshiro
03/01/2008, 16:05
Mira a ver si te sigue pasando si llamas al personaje despu&#233;s, no antes, de inicializar el scroll.

A ver que le siga echando un ojo xD

Ah pos no, la cagada creo que est&#225; aqu&#237;:


IF(MAP_GET_PIXEL(GRAFICOS,102,SON.X+DESPEGA_X,SON. Y+DESPEGA_Y)==COLOROBSTACULO)
OBSTACLE=TRUE;
ELSE

En vez de son.x y son.y deber&#237;as poner directamente x e y, o eso creo, ya que lo que quieres ver es si hay un obst&#225;culo alrededor de las coordenadas x e y del proceso Adam. Y dentro de ese proceso te refieres a sus propias coordenadas como "x" e "y" simplemente.

hellcross
03/01/2008, 16:43
Muchas gracias Segata! ya me compila! :brindis:

Lo malo esque se sigue comiendo las paredes... :confused: ¿Alguien sabe por que no funciona el mapa de durezas? Tengo la imagen con las cosas que no se pueden traspasar a un mismo color (rojo) y si no me equivoco la coordenada es correcta.

Ah una dudilla tambien :S

Si yo quiero que el proceso Adam (el personaje del juego) empieze en vez de la coordenanda en la que empieza, en otra... eso donde lo pongo?

bueno, muchas gracias :brindis:

Segata Sanshiro
03/01/2008, 18:10
Para lo de que empiece en una cierta posici&#243;n hay varias formas.

Por ejemplo, puedes crear dos variables en GLOBAL con las coordenadas iniciales del personaje: adam_x_ini y adam_y_ini o algo as&#237;, y darles un valor.

Una vez hecho eso llamas al proceso del personaje:

adam(adam_x_ini, adam_y_ini);

Hasta aqu&#237; igual que como lo has hecho, solo que cambiando un poco el nombre de las variables. Pero luego cambias la cabecera del proceso a algo como:

process adam(x, y);

Recuerda lo que ocurre al llamar a un proceso:

Si adam_x_ini vale 30 y adam_y_ini vale 50, por ejemplo, y haces la llamada esa que he puesto arriba:

adam(adam_x_ini, adam_y_ini);

Fenix lo que hace es coger los valores de adam_x_ini (30) y adam_y_ini (50) y los mete en los respectivos lugares que encuentra en la cabecera del m&#233;todo (process adam(x, y)), es decir, meter&#237;a un 30 en la variable x de adam y un 50 en la y, y el proceso ya aparecer&#237;a en esas coordenadas.

Otra forma de hacer lo mismo ser&#237;a:


program ejemplo;

global
adam_x_ini = 50;
adam_y_ini = 30;

begin
adam();
end

process adam();

begin
x = adam_x_ini;
y = adam_y_ini;
loop;
frame;
end
end

Y lo de las durezas ahora lo miro, que a m&#237; me mola el Fenix xDD

hellcross
04/01/2008, 03:21
Muchas gracias ! :brindis:

Alguien me ayuda con el mapa de durezas? T_T

< - >
???????

chipan
04/01/2008, 04:56
Si no pones el c&#243;digo o nos dices que deber&#237;a pasar pero no pasa; malamente te podemos ayudar

hellcross
04/01/2008, 14:20
esta puesto arriba :S

Tiene que pasar que el personaje no pueda atravesar ciertos sitios del mapa.Por eso hay otro mapa igual pero con los sitios que no puede atravesar coloreados de rojo. Asi el codigo coje el rojo ese y lo interpreta como que no puede traspasarlo, pero sigue pudiendolo traspasar..

me explico?

Segata Sanshiro
04/01/2008, 14:32
Si no pones el código o nos dices que debería pasar pero no pasa; malamente te podemos ayudar

Nomeleoloshilos Fan Club xDDD

Eso sí, si has cambiado algo en el código desde que pusiste el del primer post, deberías actualizarlo.

hellcross
04/01/2008, 15:11
//Codigo fuente del personaje, llamado Adam. Hay que depurar la animación si se puede, un poco mas.
// ESTO ES SOLO EL PJ ANDANDO POR UN FONDO EN SCROLL SIN DUREZAS.

Program LeidenTod;

Global
INT ADAM_POSITION_X = 280;
INT ADAM_POSITION_Y = 580;//Variables del personaje
INT GRAFICOS; //EL FPG DONDE ESTAN LOS GRAFICOS
INT DESPEGA_X;//DUREZAS
INT DESPEGA_Y;//DUREZAS
INT OBSTACLE;//DUREZAS
INT COLOROBSTACULO;//DUREZAS
End//Terminamos de establecer las variables globales

Begin //EMPIEZA EL PROGRAMA CON UN PJ EN UN SCROLL.
SET_MODE(320,240,16); //PANTALLA A 320X240 A 16 BITS
SET_FPS(160,1); //FPS (MODIFICABLE)
GRAFICOS=LOAD_FPG("LEIDENTOD.FPG"); //DECIMOS QUE ES GRAFICOS
//Intro
LOOP
fade_off();
PUT_SCREEN(GRAFICOS,15);
fade_off();
FRAME 80000;
CLEAR_SCREEN();
fade_off();
PUT_SCREEN(GRAFICOS,16);
fade_off();
FRAME 80000;
fade_off();
CLEAR_SCREEN();
fade_off();
PUT_SCREEN(GRAFICOS,19);
fade_off();
FRAME 80000;
CLEAR_SCREEN();
BREAK;
END

ADAM(ADAM_POSITION_X,ADAM_POSITION_Y);//SITUAMOS AL PJ
start_scroll(0,GRAFICOS,5,0,0,0);//EMPEZAMOS UN SCROLL CON EL PJ Y UN FONDO. EN ESTE CASO, EL DISTRIBUIDOR
COLOROBSTACULO=MAP_GET_PIXEL(GRAFICOS,14,300,200);//LAS DUREZAS
END

PROCESS ADAM(ADAM_POSITION_X,ADAM_POSITION_Y);//EMPEZAMOS EL PROCESO DEL PJ
BEGIN

CTYPE=C_SCROLL;
SCROLL[0].CAMERA=ID; //INICIA UN SCROLL FRENTE AL PERSONAJE
GRAPH=1;
ANGLE=0;
X=ADAM_POSITION_X;
Y=ADAM_POSITION_Y;
LOOP
IF(MAP_GET_PIXEL(GRAFICOS,102,X+DESPEGA_X,Y+DESPEG A_Y)==COLOROBSTACULO)
OBSTACLE=TRUE;
ELSE
OBSTACLE=FALSE;
END
DESPEGA_X=0;
DESPEGA_Y=0;
IF(KEY(_RIGHT))DESPEGA_X=2;END;
IF(KEY(_LEFT))DESPEGA_X=-2;END;
IF(KEY(_UP))DESPEGA_Y=-2;END;
IF(KEY(_DOWN))DESPEGA_Y=2;END;

//ANIMACIÓN Y MOVIMIENTO DE ESTE.
IF (KEY(_RIGHT)AND NOT KEY(_UP) AND NOT KEY(_DOWN)AND OBSTACLE==FALSE)
X=X+2;

IF (GRAPH<=10 OR GRAPH>=13) GRAPH=10;END;
GRAPH=GRAPH+1;
FLAGS= 0;
END

IF (KEY(_LEFT) AND NOT KEY(_UP) AND NOT KEY (_DOWN)AND OBSTACLE==FALSE)
X=X-2;

IF (GRAPH<=10 OR GRAPH>=13)GRAPH=10;END;
GRAPH=GRAPH+1;
FLAGS=1;
END

IF (KEY(_UP) AND NOT KEY (_LEFT) AND NOT KEY(_RIGHT)AND OBSTACLE==FALSE)

Y=Y-2;
IF (GRAPH<=6 OR GRAPH>=9) GRAPH=6; END;
GRAPH=GRAPH+1;
END
IF (KEY(_DOWN)AND NOT KEY (_LEFT) AND NOT KEY(_RIGHT)AND OBSTACLE==FALSE)
Y=Y+2;
IF (GRAPH<=1 OR GRAPH>=4); GRAPH=1;END
GRAPH=GRAPH+1;
END
FRAME;
END //LOOP
END



Actualizado ;)

Segata Sanshiro
04/01/2008, 16:53
IF(MAP_GET_PIXEL(GRAFICOS,102,X+DESPEGA_X,Y+DESPEG A_Y)==COLOROBSTACULO)
OBSTACLE=TRUE;
ELSE
OBSTACLE=FALSE;
END
DESPEGA_X=0;
DESPEGA_Y=0;
IF(KEY(_RIGHT))DESPEGA_X=2;END;
IF(KEY(_LEFT))DESPEGA_X=-2;END;
IF(KEY(_UP))DESPEGA_Y=-2;END;
IF(KEY(_DOWN))DESPEGA_Y=2;END


Creo que deberías poner primero la detección de teclas, luego el map_get_pixel, y al final justo antes del frame lo de despega_x = 0.

Sin embargo esto ya dudo más que te funcione. Pruébalo, pero a saber. Si no te va, igual puedes ponernos los gráficos (los fpg's enteros) para verlo todo mejor y que la gente pueda hacer pruebas en su pc.

hellcross
04/01/2008, 17:02
Ok, luego lo pruebo ;)

Gracias ^^

chipan
04/01/2008, 18:07
Si saber, sab&#237;a lo que pasaba; lo que no sab&#237;a era como iba el c&#243;digo y pretend&#237;a que nos explicase el algoritmo.

hellcross
04/01/2008, 21:15
No me va...


LOOP
IF(KEY(_RIGHT))DESPEGA_X=2;END;
IF(KEY(_LEFT))DESPEGA_X=-2;END;
IF(KEY(_UP))DESPEGA_Y=-2;END;
IF(KEY(_DOWN))DESPEGA_Y=2;END;
IF(MAP_GET_PIXEL(GRAFICOS,102,X+DESPEGA_X,Y+DESPEG A_Y)==COLOROBSTACULO)
OBSTACLE=TRUE;
ELSE
OBSTACLE=FALSE;
END


//ANIMACI&#211;N Y MOVIMIENTO DE ESTE.
IF (KEY(_RIGHT)AND NOT KEY(_UP) AND NOT KEY(_DOWN)AND OBSTACLE==FALSE)
X=X+2;

IF (GRAPH<=10 OR GRAPH>=13) GRAPH=10;END;
GRAPH=GRAPH+1;
FLAGS= 0;
END

IF (KEY(_LEFT) AND NOT KEY(_UP) AND NOT KEY (_DOWN)AND OBSTACLE==FALSE)
X=X-2;

IF (GRAPH<=10 OR GRAPH>=13)GRAPH=10;END;
GRAPH=GRAPH+1;
FLAGS=1;
END

IF (KEY(_UP) AND NOT KEY (_LEFT) AND NOT KEY(_RIGHT)AND OBSTACLE==FALSE)

Y=Y-2;
IF (GRAPH<=6 OR GRAPH>=9) GRAPH=6; END;
GRAPH=GRAPH+1;
END
IF (KEY(_DOWN)AND NOT KEY (_LEFT) AND NOT KEY(_RIGHT)AND OBSTACLE==FALSE)
Y=Y+2;
IF (GRAPH<=1 OR GRAPH>=4); GRAPH=1;END
GRAPH=GRAPH+1;
END
DESPEGA_X=0;
DESPEGA_Y=0;

FRAME;
END //LOOP
END



asi decias?
He probado colocandolos de diferente manera pero nada TT_TT

Muchas gracias!

animanegra
05/01/2008, 18:17
A ver creo que ya se cual es el problema. El programa esta bien, te dejo el programa pa que veas que funciona. Lo he hecho sin scroll con una jodida bola negra y un fondo cutre pero como ves funciona.

Yo creo que tienes el mapa de durezas mal dibujado. Justo lo has puesto con lineas de 1 pixel y por eso no se te para. Como avanzas dos x pasa de la dureza porque no caes en el punto de dureza.

Voy a subir el archivo cuando lo tenga subido lo linko aqui mismo &#191;vale?

prueba (http://animanegra.trastear.com/descargas/prueba.tar.gz)

hellcross
06/01/2008, 15:50
va gracias ^O^

esta noche lo miro
=)

< - >
ya tengo mapa de durezas, muchas gracias a todos. El problema era que estaba mal dibujado :$ XDD

chipan
07/01/2008, 16:14
Otra opcion es hacer una comprobacion por cada pixel que avanzas; por ejemplo si avanzas 4, hacer un mini bucle dentro del principal que compruebe los 4 pixels de 1 en 1.