Bennu Game Development

Foros en Español => Mesa de Ayuda => Topic started by: osk on September 25, 2009, 04:56:47 PM

Title: ¿La palabra clave CLONE ha desaparecido?
Post by: osk on September 25, 2009, 04:56:47 PM
Hola chicos.
Pues eso: he intentado probar el ejemplo que viene en la wiki pero no me reconoce el comando (mejor dicho, palabra clave). ¿Se ha retirado del lenguaje por alguna razón?
Venga, gracias.
Title: Re: ¿La palabra clave CLONE ha desaparecido?
Post by: SplinterGU on September 25, 2009, 11:45:58 PM
no se ha retirado...

existe, y es nativa del engine... no depende de ningun modulo.

no se que ejemplo hay en la wiki...
Title: Re: ¿La palabra clave CLONE ha desaparecido?
Post by: DCelso on September 26, 2009, 12:08:31 AM
http://wiki.bennugd.org/index.php?title=Clone
yo lo he probado y tampoco va, le he insertado todos los mods y adaptado a la filosofía c pero nada, sigue diciendo que clone no es un identificador válido
Title: Re: ¿La palabra clave CLONE ha desaparecido?
Post by: SplinterGU on September 26, 2009, 12:44:15 AM
ese codigo esta mal, no se de donde salio que clone devuelve valor...

ejemplo funcional:


import "mod_key";
import "mod_map";
import "mod_video";
import "mod_proc";

Process Main()
Begin

    squares();

    repeat
        frame;
    until(key(_ESC));

    exit();

End

Process squares()
Private
   int advance;
Begin

    graph = new_map(5,5,16);
    map_clear(0,graph,rgb(255,0,255));
    advance = 1;

    clone
        graph = map_clone( 0, graph );
        map_clear(0,graph,rgb(255,255,255));
        advance = 2;
    end

    loop
        x += advance;
        frame;
    end
    unload_map(0,graph);

End

Title: Re: ¿La palabra clave CLONE ha desaparecido?
Post by: SplinterGU on September 26, 2009, 12:48:42 AM
extraido del help del div2:

Sentencia CLONE


CLONE
<sentencia> ;
...
END

Esta sentencia crea un nuevo proceso idéntico al actual, con la salvedad de que las sentencias entre las palabras reservadas CLONE y END se ejecutarán únicamente en el nuevo proceso y no en el actual.

Por ejemplo, si cualquier proceso del programa, con unas coordenadas (x, y) determinadas y un gráfico (graph) concreto, ejecuta la siguiente sentencia:

CLONE
x=x+100;
END

Se creará un nuevo proceso identico a él, con el mismo gráfico y los mismos valores en todas sus variables, a excepción de la coordenada x, que el nuevo proceso tendrá 100 puntos más a la derecha.

Esta sentencia se utiliza para crear réplicas de un proceso, dividirlo en dos procesos (casi) iguales.

Ejemplo:
PROGRAM mi_juego;
BEGIN
    // ...
    x=0;
    y=0;
    CLONE
        x=x+10;
    END
    CLONE
        y=y+10;
    END
    // ...
END





En este ejemplo, las 2 sentencias CLONE crearán 3 copias del proceso principal (y no 2, como podría haberse esperado).

Al ejecutarse la primera sentencia CLONE se creará un nuevo proceso, con lo que habrá 2: uno en (x=0, y=0) y otro en (x=10, y=0). Y estos dos procesos ejecutarán la segunda sentencia CLONE, el primero (el original) creando con ello un nuevo proceso en (x=0, y=10), y el segundo creará el nuevo proceso en (x=10, y=10).

Para crearse únicamente 2 copias del proceso original se podría haber construido el programa, por ejemplo, de la siguiente forma:

Ejemplo:
PROGRAM mi_juego;
BEGIN
    // ...
    x=0;
    y=0;
    CLONE
        x=x+10;
        CLONE
            y=y+10;
        END
    END
    // ...
END





El proceso original (x=0, y=0) creará uno en (x=10, y=0) y éste, a su vez, otro en (x=10, y=10), creandose únicamente dos copias del original.

Se debe, por tanto, tener mucho cuidado con el uso de la sentencia CLONE de forma secuencial o dentro de un bucle, pues se debe contar con que los primeros 'clones' pueden crear, a su vez, a nuevos 'clones'.

Esta sentencia permite usarse sin poner sentencias entre las palabras CLONE y END. Pero, al menos en un principio, no parece tener mucho sentido el querer tener dos procesos idénticos, con las mismas coordenadas, el mismo gráfico y ejecutando el mismo código.
Title: Re: ¿La palabra clave CLONE ha desaparecido?
Post by: DCelso on September 26, 2009, 01:07:53 AM
pues ya está solventado en la wiki.
Aunque es raro, la forma anterior se parecía al fork de c en linux.
Title: Re: ¿La palabra clave CLONE ha desaparecido?
Post by: Windgate on September 26, 2009, 01:17:44 AM
Joder, iba a decir lo mismo :O
Title: Re: ¿La palabra clave CLONE ha desaparecido?
Post by: osk on September 26, 2009, 01:22:11 AM
Muchas gracias por todo
Title: Re: ¿La palabra clave CLONE ha desaparecido?
Post by: SplinterGU on September 26, 2009, 02:05:59 AM
obvio que parecia al fork de linux, pero no se quien lo puso asi, si fue alguien que se equivoco o alguien que quiso destruir el wiki...

las participaciones del wiki son con registro de usuarios?
Title: Re: ¿La palabra clave CLONE ha desaparecido?
Post by: DCelso on September 26, 2009, 02:49:33 AM
sí y no. :D
No te lo vas a creer, pero fuí yo el que creé la entrada en Julio de este año.
Sorry por el malentendido,mea culpa, extraje esa información de una conversación tuya anterior en la que dijiste que era como un fork y yo la tomé al pie de la letra parece ser.
http://forum.bennugd.org/index.php?topic=654.msg9481#msg9481

Lo que no entiendo es cómo que no probé el ejemplo antes. :(
Title: Re: ¿La palabra clave CLONE ha desaparecido?
Post by: SplinterGU on September 26, 2009, 03:29:27 AM
bueno, yo tambien tengo parte de culpa, esas respuestas las habia hecho muy escuetas porque estaba con apuros... y no aclare que era como un fork en el sentido de la funcionalidad, pero no del uso a nivel tecnico de la misma...

gracias por la correccion y disculpas.