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és, no antes, de inicializar el scroll.
A ver que le siga echando un ojo xD
Ah pos no, la cagada creo que está aquí:
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ías poner directamente x e y, o eso creo, ya que lo que quieres ver es si hay un obstá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ó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í, y darles un valor.
Una vez hecho eso llamas al proceso del personaje:
adam(adam_x_ini, adam_y_ini);
Hasta aquí 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étodo (process adam(x, y)), es decir, metería un 30 en la variable x de adam y un 50 en la y, y el proceso ya aparecería en esas coordenadas.
Otra forma de hacer lo mismo serí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í me mola el Fenix xDD
hellcross
04/01/2008, 03:21
Muchas gracias ! :brindis:
Alguien me ayuda con el mapa de durezas? T_T
< - >
???????
Si no pones el código o nos dices que deberí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 ^^
Si saber, sabía lo que pasaba; lo que no sabía era como iba el código y pretendí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Ó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 ¿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
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.
Powered by vBulletin® Version 4.2.5 Copyright © 2025 vBulletin Solutions Inc. All rights reserved.