Getting started

Started by Drumpi, January 18, 2017, 02:41:28 AM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Drumpi

Casi, Futu, casi, te han faltado... casi todas las letras, pero casi la aciertas :D
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

jo, ni clonandome como hamster...

Drumpi

#32
AmakaST ¿Alguna pista de por qué no se me ven los procesos dummies? No puedo seguir hasta que se solucione esto :S

EDIT: Nada, olvídalo, he encontrado un graphic_info(0,0, que no había quitado y se interrumpía el código ^^U Ya consigo que se vean los procesos dummies :P

Lo de siempre, tienes que pedir ayuda para encontrar la solución tú solo. Ya van dos hoy: esto y que por fin puedo ejecutar Sonic Generations después de más de seis meses de errores :D :D :D
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)

Drumpi

Por favor, AmakaSt, dime que para cargar imágenes no hay que poner la ruta completa del fichero, que se pueden construir strings al vuelo, porque me está dando un error de compilación que no me está gustando absolutamente nada:

70 fe_grafs_face[cont] = load_image("bitstrips/grafs/face/face_" + cont + ".png"); -- NO SE ENCONTRÓ
79 fe_grafs_hair1[cont] = load_image("bitstrips/grafs/hair1/hair1_" + cont + ".png"); -- NO SE ENCONTRÓ


Esas líneas están dentro de un bucle y los ficheros existen y están en esa ruta.
Voy a usar un rodeo con load_fpg+map_clone para seguir programando, pero si esto es así ¿qué pasará cuando tenga que leer un número indeterminado de ficheros mediante un bucle similar?
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)

AmakaSt

Hola Drumpi,

En principio las rutas dentro de las funciones de carga deben de ser claras, porque sino no te empaquetaría los recursos en el proyecto correctamente. Es el compilador el que analiza las rutas de las funciones de carga y lo prepara para el proyecto, lo mismo para generar los archivo fpg.dat al hacer uso de load_fpg().
Puede que añada para la próxima versión algo para ignorar la comprobación de las rutas en las funciones de carga.

Que sea la carga dinámica puede generarte errores de carga en javascript, si no existe una imagen, bloqueando el script.

Un saludo.

Drumpi

Pero para eso existen las funciones de "file_exists"... o debería ^^U
¿Entonces cómo haces para reconocer y cargar los ficheros de una carpeta? También podría renombrarlos todos como 01.png, 02.png... y usar load_fpg, pero no me parece una buena práctica (y más adelante se va a sustituir por load_external_data... si es esa la función que sustituye a fopen).

Por cierto, tampoco existe un map_clone. Si quieres hacer un map_put, tienes que crear un nuevo mapa e ir pixel por pixel leyendo en uno y pintando en otro ^^U
Paletas entiendo que no hay, que para cambiar un color concreto tengo que ir pixel a pixel ¿no?
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)

AmakaSt

En Javascript no existe la función file_exists() como en PHP, por eso la comprobación se hace al compilar y por esto mismo existe los archivos fpg.dat con las rutas donde localizar los gráficos. Al principio probé en hacer cargas usando en caso de error, por si no existe el archivo, try...catch de Javascript, pero las cargas son interminables al tener que recorrer 999 gráficos en una carpeta y esta cuenta con, por ejemplo, 20 gráficos. La funciona load_external_data() no es exactamente igual a fopen(), esto es el objeto XMLHttpRequest() de Javascript transformado en una función, sirve para obtener la información de una url, por lo que puedes recibir información de variables desde el servidor mediante un GET con PHP.

En Div2 no he encontrado map_clone, es una función de BennuGD. Cree unas funciones para la manipulación de gráficos: graphic_explorer() y graphic_builder(). Y también hice una función para cambiar el color del grafico: color_in_map(), con esta no necesitas ir pixel a pixel.

Un saludo.


Drumpi

Me interesa eso de load_external_data(). Ahora que sé lo básico de PHP, puedo crear una página que sirva de enlace entre el programa en DivGo y el contenido en las carpetas de mi web.
Lo que no veo son ejemplos de uso, así que no sé cómo se usa. Veo que tiene un parámetro de entrada, que es una string, que no sé si será la url del PHP o la info de un XML, o cómo pasar la información que quiero que me busque al PHP

...¿Y luego cómo obtengo esos datos? ¿Vienen todos en una string en crudo?, ¿vienen en formato XML?

Voy a mirar lo del graphic_builder y el graphic_explorer, porque no hay info de ninguna de las dos y a primera vista no entiendo lo que hacen ^^U
La de color_in_map sí la he visto, pero eso cambia todo el color del gráfico, y yo lo que necesito es cambiar todos los pixels de un color concreto. Mis imágenes van a tener 4 colores: transparente, negro, color1 y color2, y quiero que el usuario pueda modificar estos dos últimos a su gusto. Similar al sistema de selección de camisetas en el juego de demostración de fútbol en modo7 que venía en DIV2.
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)

AmakaSt

#38
Hay un ejemplo en la carpeta de ejemplos, pero veo que esta anticuado (de versiones antiguas) y no queda muy claro.

Empecemos con la recogida de datos con load_external_data("ruta/mi_arhivo.php", &mi_variable); //esto recoge datos del archivo php pero con formato JSON y lo introduciría en el juego en la variable 'mi_variable'

Aquí un ejemplo de php haciendo una consulta a la BBDD (para un struct):

    $mysqli = new mysqli('localhost', $usuario, $password, $bbdd);
       
    $consultar = $mysqli -> query("SELECT nombre, puntos FROM mitabla ORDER BY puntos DESC LIMIT 10"); //en caso de querer mostrar los 10 ultimos records
   
    $variables = array();
    while($datos = $consultar -> fetch_array(MYSQLI_ASSOC)){
        $variables[] = array('nombre' => $datos['nombre'],  'puntos' => $datos['puntos']);
    }
       
    echo json_encode($variables); //esto lo recogera DivGO


Aquí otro ejemplo de php sencillo (para una variable sencilla):

    $variable = "Probando Div GO";

    echo json_encode($variable); //esto lo recogera DivGO


Y ahora ejemplo de guardar datos con save_external_data("ruta/mi_arhivo.php", &mi_variable); //esto enviara el valor de la varible por GET con una variable especial que se podra comprobar su existencia para guardar o cargar datos

Aquí un ejemplo de php haciendo la recogida de datos:

    if (isset($_GET['DivGOvar'])){ //DivGOvar es la variable que se envia desde DivGO con los valores de las variables en formato JSON
        $variables = $_GET['DivGOvar'];
        $variables = json_decode($variables, true);

        $nombre = $variables['nombre'];
        $puntos  = $variables['puntos'];

        //aquí añades la inserción de datos a la bbdd
    }


No es difícil si sabes PHP, pero para el que no lo ha tocado nunca tampoco le será fácil.
Yo estoy intentando lo más difícil, estoy combinando DivGO, PHP y la API Graph de Facebook para guardar los datos del usuario, sus avances y puntuaciones del juego, ver los records de amigos... haciendo uso del registro de Facebook.

http://www.divgo.net/proyectos/gamma-z/
Si tienes cuenta de Facebook y quieres ver que tal funciona esta combinación, dímelo. Necesita de invitación para el testeo. :)

Un saludo.

AmakaSt

Me olvidaba, aquí ejemplos de graphic_builder y graphic_explorer:
http://www.divgo.net/c-c5c16287 (este esta disponible en la lista de funciones)
http://www.divgo.net/c-4f2f4beb

Un saludo.

Drumpi

Vale, vamos por partes.
Quizás pueda usar un fichero PHP para obtener la construcción de un nombre de fichero, saber si existe dicho fichero (lo que decía de usar un bucle tipo "fichero"+cont+".png") y devolver su contenido.
Después, gracias por el ejemplo de PHP, aun estoy verde con el tema y toda la ayuda se agradece :)
Pero la parte interesante es saber cómo recoge los datos DivGo. Entiendo que usa una estructura, pero tengo un problema: los ficheros no tienen una longitud fija ¿cómo almaceno los datos de los pixels, por ejemplo, de un map? ¿Capturo esos datos en una string? ¿no dará problemas si detecta un color 13 o 10, que en ASCII son el final de linea, y por tanto, deje de leer la "string"?

Y sobre todo ¿cómo interactúa DivGo con los ficheros JSON? Acabo de conocerlos y no sé si tengo que interpretar yo mismo el fichero, o DivGo hace la conversión, o tiene una API para buscar pares "clave/valor" o navegar por el árbol de datos :S

Lo de Graphic_builder y graphic_explorer necesito tiempo para explorarlo ^^U
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)

AmakaSt

Quote
Y sobre todo ¿cómo interactúa DivGo con los ficheros JSON? Acabo de conocerlos y no sé si tengo que interpretar yo mismo el fichero, o DivGo hace la conversión, o tiene una API para buscar pares "clave/valor" o navegar por el árbol de datos :S

Div GO hace la conversión automáticamente, cualquier variable que guardes o cargues se parsea a JSON, por ejemplo:

STRUCT datos;
    nombre = "Mi nombre";
    puntos = 1000;
    nivel = 0;
END


Equivale a:

var datos = {
    'nombre': 'Mi nombre',
    'puntos': 1000,
    'nivel': 0
}

Drumpi

Entiendo entonces que si guardo todo el contenido de un fichero en una variable VARCHAR o su equivalente con más capacidad en la BD, la leo con mi fichero PHP, y se la mando a DivGo como una string, luego podré leer el contenido, independientemente del tamaño, byte a byte ¿correcto?
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)

AmakaSt

Quote from: Drumpi on March 27, 2017, 12:16:31 AM
Entiendo entonces que si guardo todo el contenido de un fichero en una variable VARCHAR o su equivalente con más capacidad en la BD, la leo con mi fichero PHP, y se la mando a DivGo como una string, luego podré leer el contenido, independientemente del tamaño, byte a byte ¿correcto?

Si, dependiendo la cantidad de datos que quieras guardar un VARCHAR será limitado, mejor un campo TEXT. Aunque lo mejor es que el JSON lo descompongas en un array en PHP y guardes la información en distintos campos de la tabla en la BBDD, así podrás filtrar las consultas más rápidamente. El tamaño byte a byte no se requiere.

Otra cosa, que a veces marea bastante, si lo guardas todo en string (VARCHAR, TEXT) al recuperarlo seguirá siendo tipo string en el juego. Imagina que tu variable donde recuperas la información es 'mi_variable' y has cogido el valor '20' pero es un string si en el juego haces: mi_variable += 15; //mi_variable no será 35, sino 2015. Desde PHP tienes que pasar los valores con intval().

Drumpi

Ya, ya tengo eso en cuenta ;)
La cosa es que no tengo funciones para buscar ficheros, cargar ficheros construyendo una string internamente, ni la posibilidad de abrirlos y leerlos, así que esta es la mejor manera que se me ha ocurrido, porque como digo, los ficheros tienen un tamaño variable, y el único tipo de variable dentro de los divlike que no es de tamaño fijo es una string, así que es la mejor forma de secuenciar los valores de un gráfico de tamaño indeterminado y de formato propio.

Ya sólo tengo que averiguar cómo introducir el contenido del fichero en la base de datos, y construir el JSON... pero con tiempo, porque tengo demasiados frentes abiertos ahora mismo :S
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)