Autor Tema: Los strings también son mala gente  (Leído 1068 veces)

Arcontus

  • Sr. Member
  • ****
  • Mensajes: 293
  • Karma: 9
Re:Los strings también son mala gente
« Respuesta #15 en: Mayo 30, 2018, 08:09:15 am »
NOTA: 32000 no tiene nada que ver con 32768, simplemente es casualidad que se reuse el mismo id cerca de ese numero... de hecho a mi me falla a los 36500 exactos, creados...

ya esta explicado el problema, debes controlar los ids de textos que creas, si haces un delete_text(0) se borra todo, write* retorna 0 ante error... (la wiki esta mal), luego de borrar todo los ids se reusan, si tu logica no limpia el id, en algun momento va a asignar ese id a otro texto, y tu logica hara cosas pensando que es otro texto que ya no existe...
Bien visto SplinterGU!
¿Y en este caso podría explicar que provocara un crash? Por ejemplo tratando de borrar un ID que ya ha sido borrado por el delete_text(0).

Con el nuevo código todo va estupendamente:
Código: [Seleccionar]
import "mod_key"
import "mod_video"
import "mod_text"
import "mod_map"
import "mod_string"
import "mod_rand"
import "mod_say"


PROCESS creaTexto(int miX, int miY, string cadena)
PRIVATE
    int txtid;
    int temporizador;
    string miCadena;
END
BEGIN
    txtid = -1;
    x = miX;
    y = miY;
    miCadena = cadena;
    temporizador = 360;
    txtid = write_string(0, x, y, 0, &miCadena);

    while(temporizador > 0)
        temporizador--;
        move_text(txtid, x, y);
        FRAME;
    END
OnExit:
    if (txtid > 0) delete_text(txtid); END
    //say(cadena);
END

PROCESS main()
PRIVATE
    int indice, contador, contador2, txtid;
    string miCadena, micadena2;

END
BEGIN
    set_fps(200,0);
    set_mode(800,600,32, mode_window);
    x = 30;
    y = 550;
    txtid = write_string(0, 30,550, 0, &micadena2);
    while(!(key(_ESC)))
            contador2++;
            for (indice = 0; indice < 100; indice++)
                contador++;
                miCadena = "Hola caracola: " + contador;
                miCadena2 = "Total: " + contador;
                creaTexto(rand(10,200), rand(10,500), miCadena);
            END
            move_text(txtid, x, y);
            say (miCadena2);
        FRAME;
    END
END
Ahora he de cambiar nuevamente de >= a > en la detección de ID's en tooodo mi proyecto.
¿Alguien con derechos de edición podría corregir la wiki para tener correcta la documentación?


Arcontus

  • Sr. Member
  • ****
  • Mensajes: 293
  • Karma: 9
Re:Los strings también son mala gente
« Respuesta #16 en: Mayo 30, 2018, 08:15:04 am »
NOTA: 32000 no tiene nada que ver con 32768, simplemente es casualidad que se reuse el mismo id cerca de ese numero... de hecho a mi me falla a los 36500 exactos, creados...

ya esta explicado el problema, debes controlar los ids de textos que creas, si haces un delete_text(0) se borra todo, write* retorna 0 ante error... (la wiki esta mal), luego de borrar todo los ids se reusan, si tu logica no limpia el id, en algun momento va a asignar ese id a otro texto, y tu logica hara cosas pensando que es otro texto que ya no existe...
Bien visto SplinterGU! y te voy a dar un karmazo!
¿Y en este caso podría explicar que provocara un crash? Por ejemplo tratando de borrar un ID que ya ha sido borrado por el delete_text(0).

Con el nuevo código todo va estupendamente:
Código: [Seleccionar]
import "mod_key"
import "mod_video"
import "mod_text"
import "mod_map"
import "mod_string"
import "mod_rand"
import "mod_say"


PROCESS creaTexto(int miX, int miY, string cadena)
PRIVATE
    int txtid;
    int temporizador;
    string miCadena;
END
BEGIN
    txtid = -1;
    x = miX;
    y = miY;
    miCadena = cadena;
    temporizador = 360;
    txtid = write_string(0, x, y, 0, &miCadena);

    while(temporizador > 0)
        temporizador--;
        move_text(txtid, x, y);
        FRAME;
    END
OnExit:
    if (txtid > 0) delete_text(txtid); END
    //say(cadena);
END

PROCESS main()
PRIVATE
    int indice, contador, contador2, txtid;
    string miCadena, micadena2;

END
BEGIN
    set_fps(200,0);
    set_mode(800,600,32, mode_window);
    x = 30;
    y = 550;
    txtid = write_string(0, 30,550, 0, &micadena2);
    while(!(key(_ESC)))
            contador2++;
            for (indice = 0; indice < 100; indice++)
                contador++;
                miCadena = "Hola caracola: " + contador;
                miCadena2 = "Total: " + contador;
                creaTexto(rand(10,200), rand(10,500), miCadena);
            END
            move_text(txtid, x, y);
            say (miCadena2);
        FRAME;
    END
END
Ahora he de cambiar nuevamente de >= a > en la detección de ID's en tooodo mi proyecto.
¿Alguien con derechos de edición podría corregir la wiki para tener correcta la documentación?

SplinterGU

  • Hero Member
  • *****
  • Mensajes: 12778
  • Karma: 375
Re:Los strings también son mala gente
« Respuesta #17 en: Mayo 30, 2018, 09:52:15 pm »
no creo que el crash tenga que ver con esto... seguramente si manejas punteros se deba a algo de eso... al momento no hay algun bug conocido que pueda probar un crash... salvo el bug del render que a veces con rotaciones y sizes dibuja cualquier cosa...
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Arcontus

  • Sr. Member
  • ****
  • Mensajes: 293
  • Karma: 9
Re:Los strings también son mala gente
« Respuesta #18 en: Mayo 31, 2018, 08:41:43 am »
no creo que el crash tenga que ver con esto... seguramente si manejas punteros se deba a algo de eso... al momento no hay algun bug conocido que pueda probar un crash... salvo el bug del render que a veces con rotaciones y sizes dibuja cualquier cosa...
¿No? ¿Incluso mandando un delete_text(id) a una id que ha sido borrada por un delete_text(0) previamente? ¿Esto está protegido de alguna manera para que el programa no haga nada?

FreeYourMind

  • Hero Member
  • *****
  • Mensajes: 5648
  • Karma: 127
    • GECA soft
Re:Los strings también son mala gente
« Respuesta #19 en: Mayo 31, 2018, 08:50:15 am »
que version de bennugd estas usando ? creo recordar que lo de error al pagar id's no existentes hace tiempo que se ignora para que no salte error

Arcontus

  • Sr. Member
  • ****
  • Mensajes: 293
  • Karma: 9
Re:Los strings también son mala gente
« Respuesta #20 en: Mayo 31, 2018, 10:22:35 am »
que version de bennugd estas usando ? creo recordar que lo de error al pagar id's no existentes hace tiempo que se ignora para que no salte error
He actualizado recientemente, pero es posible que estuviera utilizando una versión afectada. He hecho tantos cambios ya que ni se como se ha arreglado el tema.Por cierto, sonara muy noob pero: ¿hay algún comando para ver la versión de bennu que estoy usando?

SplinterGU

  • Hero Member
  • *****
  • Mensajes: 12778
  • Karma: 375
Re:Los strings también son mala gente
« Respuesta #21 en: Junio 01, 2018, 11:48:02 am »
no creo que el crash tenga que ver con esto... seguramente si manejas punteros se deba a algo de eso... al momento no hay algun bug conocido que pueda probar un crash... salvo el bug del render que a veces con rotaciones y sizes dibuja cualquier cosa...
¿No? ¿Incluso mandando un delete_text(id) a una id que ha sido borrada por un delete_text(0) previamente? ¿Esto está protegido de alguna manera para que el programa no haga nada?


por supuesto... esta protegido...
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

SplinterGU

  • Hero Member
  • *****
  • Mensajes: 12778
  • Karma: 375
Re:Los strings también son mala gente
« Respuesta #22 en: Junio 01, 2018, 11:48:26 am »
que version de bennugd estas usando ? creo recordar que lo de error al pagar id's no existentes hace tiempo que se ignora para que no salte error

no recuerdo eso...
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

FreeYourMind

  • Hero Member
  • *****
  • Mensajes: 5648
  • Karma: 127
    • GECA soft
Re:Los strings también son mala gente
« Respuesta #23 en: Junio 01, 2018, 11:50:23 am »
era con los sonidos creo recordar, matar un sonido inexistente

SplinterGU

  • Hero Member
  • *****
  • Mensajes: 12778
  • Karma: 375
Re:Los strings también son mala gente
« Respuesta #24 en: Junio 01, 2018, 12:00:50 pm »
que version de bennugd estas usando ? creo recordar que lo de error al pagar id's no existentes hace tiempo que se ignora para que no salte error
He actualizado recientemente, pero es posible que estuviera utilizando una versión afectada. He hecho tantos cambios ya que ni se como se ha arreglado el tema.Por cierto, sonara muy noob pero: ¿hay algún comando para ver la versión de bennu que estoy usando?


si, corre el bgdi sin argumentos y te muestra el numero de version y demas
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

SplinterGU

  • Hero Member
  • *****
  • Mensajes: 12778
  • Karma: 375
Re:Los strings también son mala gente
« Respuesta #25 en: Junio 01, 2018, 12:01:11 pm »
era con los sonidos creo recordar, matar un sonido inexistente

puede ser, pero el esta preguntando de textos
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Arcontus

  • Sr. Member
  • ****
  • Mensajes: 293
  • Karma: 9
Re:Los strings también son mala gente
« Respuesta #26 en: Junio 05, 2018, 08:47:52 am »
era con los sonidos creo recordar, matar un sonido inexistente

puede ser, pero el esta preguntando de textos
Llevo varios días y muchas horas de juego sin un crash y he vuelto a activar los registros de los textos. He cambiado cosas en mi código, como lo del >= por > en los id's de textos, y descartando esto nada que a primera vista puediera reflejar un crash. En fin, a ver si ya esta todo ok y no vuelve a dar por saco :D

SplinterGU

  • Hero Member
  • *****
  • Mensajes: 12778
  • Karma: 375
Re:Los strings también son mala gente
« Respuesta #27 en: Junio 05, 2018, 09:04:10 pm »
excelente!
Download Lastest BennuGD Release: http://www.bennugd.org/node/2