Unknown identifier, found "SCROLL"

Started by Woody, February 15, 2011, 07:05:58 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Futu-block


SplinterGU

Quote from: Futublock on February 17, 2011, 10:56:05 PM
¿antes del end final?

ya...

donde quieras... cuando termina tu nivel (salir al menu, pasar a otro nivel, etc) haces un stop... cuando empieza tu nivel (inicio del juego, nuevo nivel, etc) haces un start
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Drumpi

Futu, te diría que mirases el código de cierto juego que conocemos bien tu y yo (SBT), concretamente el nivel 6, pero como sé que no lo vas a hacer, te lo copio aquí, simplificado:

[code language="bennu"]process level_6 ()
private
    int l6_graficos[2];
    int l6_loaded_music;
    int l6_music_id;
   
    int l6_instr;
   
    int l6_room;//,l6_room_ant;
    int hijos[4];
   
    int cont;
begin
    //CARGA DE RECURSOS*************************************************
    l6_graficos[0]=load_fpg("graf/level06/prota.fpg");
    l6_graficos[1]=load_fpg("graf/level06/tiles.fpg");
   
    l6_loaded_music=load_song("sound/level06/level06.ogg");
   
    //inicialización final de datos
    exit_mode=0;
    //l6_room_ant=0;
    l6_room=1;
    prota_info.energia=4;
   
    //interfaz
    hijos[0]=level_6_miss( 20,20,-20,l6_graficos[0],150,151,4);
    hijos[1]=level_6_miss( 60,20,-20,l6_graficos[0],150,151,3);
    hijos[2]=level_6_miss(100,20,-20,l6_graficos[0],150,151,2);
    hijos[3]=level_6_miss(140,20,-20,l6_graficos[0],150,151,1);
    hijos[4]=l6_vidas_restantes(l6_graficos[0]);
   
    //ponemos la música
    l6_music_id=l6_music(l6_loaded_music);
    //**********************************************************************

    while (exit_mode==0)
        switch (l6_room)
        case 0..19:
           
            //LINEA IMPORTANTE
            l6_play_platform_room(l6_graficos[0],l6_graficos[1],l6_room);
           
            //ESPERA A QUE TERMINE EL NIVEL, DEVUELVE UN VALOR EN LA VARIABLE GLOBAL exit_mode
            //0: no ha terminado
            //1: termina con éxito
            //2: termina pero ha muerto
            //3: termina porque le ha dado a la opción de salir
            signal(id,s_sleep);
            frame;
           
            if (exit_mode==1)
                exit_mode=0;
                if (l6_room==10)
                    l6_room=99;
                else
                    l6_room++;
                end
            end
           
        end
        case 99:    //fase especial del paracaidas
           
            l6_dificultad=6;
            l6_play_falling_room(l6_graficos[0],l6_graficos[1]);
           
            //la salida del nivel aquí cambia un poco
            //signal(id,s_sleep);
            //frame;
            while ((id_tscroll.camera_y<5000) && (exit_mode==0))
                frame;
            end
           
           
            if (exit_mode==0)
                exit_mode=1;
                signal(id,s_freeze);
                frame;
            end
            if (exit_mode==1)
                exit_mode=0;
                l6_room=11;
            end
        end
       
        case 20: //monstruo
            if (exists(l6_music_id)) signal(l6_music_id,s_kill); end
            fade_music_off(1000);
            unload_song(l6_loaded_music);
           
           
            l6_loaded_music=load_song("sound/level06/boss1.ogg");
            l6_music_id=l6_music(l6_loaded_music);
           
            l6_graficos[2]=load_fpg("graf/level06/boss.fpg");
            l6_play_boss_room (l6_graficos[0],l6_graficos[1],l6_graficos[2]);
           
            signal(id,s_sleep);
            frame;
           
            unload_fpg(l6_graficos[2]);
           
            if (exit_mode==1)
                //loop frame; end
            end
        end
       
        default: exit_mode=3; end
        end //switch
        frame;
    end

    //FIN DEL NIVEL, DESCARGA DE RECURSOS*****************************************
    for (cont=0;cont<=1;cont++)
        unload_fpg(l6_graficos[cont]);
    end
   
    //quitamos la musica
    if (exists(l6_music_id)) signal(l6_music_id,s_sleep); end
    fade_music_off(1000);
    frame(5000);
    if (exists(l6_music_id)) signal(l6_music_id,s_kill); end
    unload_song(l6_loaded_music);
   
    if (exists(hijos[0])) signal(hijos[0],s_kill); end
    if (exists(hijos[1])) signal(hijos[1],s_kill); end
    if (exists(hijos[2])) signal(hijos[2],s_kill); end
    if (exists(hijos[3])) signal(hijos[3],s_kill); end
    if (exists(hijos[4])) signal(hijos[4],s_kill_tree); end
    //***********************************************************************

    //fade(100,100,100,3);
    signal(father,s_wakeup);
    frame;
end[/code]

Como ves, este proceso es independiente del resto del programa, basta con llamarlo para ejecutar el nivel 6, sólo necesita saber el número de vidas y algún detalle extra, pero esto se lo pasan los procesos:
-Que ejecuta el modo historia, cuando el jugador llega al nivel 6.
-Que ejecuta sólo este nivel desde el level_select.
-Proceso de debug, que debe andar por ahí todavía.

Además, si te fijas, este proceso llama a
l6_play_platform_room(l6_graficos[0],l6_graficos[1],l6_room);
que sólo necesita saber los gráficos que debe usar y el número de nivel, y ejecuta sólo uno de los niveles (el proceso está justo encima del que te he escrito), o puede llamar a otros minijuegos como el falling_room o el mostruo final en mitad del desarrollo del nivel.

Pero el scroll se inicializa y se termina cada vez, en el proceso l6_play_platform_room.
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)

Futu-block

#33
que vá, si eso lo miré y no lo entiendo muy bien, y empecé con la inteligencia artificial de los enemigos

de todas formas repasaré bien lo que mas puesto a ver que comprendo

edito:
al fin lo he calao, jo el trabajo que me ha costao una pamplina tan enorme; joño, es que hay que comprenderolo, si no lo razono lo pongo por poner y si vá va, y no me gusta