Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mensajes - Johann

211
Puedes hacer un servidor centralizado con cualquier lenguaje de programación, incluso con el mismo GM, al que se conectan los clientes y que se encargue de sincronizarlos a todos. Asi funcionan los videojuegos grandes.

Justo iba a compartir ese articulo XD pero no es exactamente el mismo:

https://www.comunidadgm.org/articulos/(programacion)hacer-un-juego-multijugador-online-con-game-maker-studio-ver2/
https://www.comunidadgm.org/articulos/crea-tu-juego-online-tutorial-php-mysql-gml-(programacion)/
212
Esa función no toma en cuenta los ejes por separado sino como un vector.
Debes tomar el componente X del vector que tiene como magnitud el valor que retorna distance_to_object pero necesitas el angulo de inclinación que tiene, lo obtienes con point_direction.
[gml]
var dir = point_direction(x, y, obj_blaze.x, obj_blaze.y)
var dist = lengthdir_x(distance_to_object(obj_blaze), dir);
[/gml]
213
Preguntas y respuestas / Re:Error Android
Diciembre 11, 2018, 12:44:37 AM
Esto es de hoy, pero por lo que veo y pruebo solo es para GMS 2 asi que he ajustado el icono del post a esa version y para que sea mas claro también cambio el titulo del post.

Edit:
Me ha pasado en Studio1, la ubicacion del archivo en win7 que hay que modificar es:
C:\Users\USUARIO\AppData\Roaming\GameMaker-Studio\Android\runner\RootFiles
214
Tengo un texto que se dibuja sobre un rectangulo dibujado con draw_roundrect_ext.
¿Como hago para que al hacerle scroll al texto (moverlo hacia arriba y abajo), cuando se salga del area del rectangulo, no se dibuje por fuera?
¿Tal vez con una surface?
Me ayudan?
215
creo que todo lo que se llame draw_* debe ir en evento draw, que igualmente se ejecuta cada step.
Pasa el codigo de step a draw, seguro así si funciona.
216
A mi me dijeron que simplemente era una forma mas económica de hacer operaciones matemáticas con base 2, ya sabes, si le quitas o le pones un bit al numero binario que representa al numero que estas operando, lo que quieras hacer con eso ya depende de tu imaginación, por ejemplo la imaginación de NiuWeb dice que puedes tomar unmonton de variables booleanas (unos y ceros) y componer un numero decimal con esos bits, nadie sabrá de que se trata  ;D
217
Seguro que el GM utilice coordenadas esfericas? Yo la verdad no tengo idea pero puede ser mas conveniente utilizar otro sistema de coordenadas, por ejemplo en Godot dicen que es mejor utlilizar Quaterniones. Si consultas este sistema encontrarás la teoría que necesitas para implementar tu propio sistema de rotación asi como has dicho que prefieres hacerlo: https://en.wikipedia.org/wiki/Quaternions_and_spatial_rotation
218
General / Re:alguien tiene discord?
Diciembre 05, 2018, 11:27:34 PM
220
Preguntas y respuestas / Re:Script que funciona a veces
Noviembre 30, 2018, 07:56:52 PM
No, lo que me toca hacer es simplificar todo con el uso de las colas de prioridad, así ese algoritmo se vuelve innecesario.
De todas formas comparto el script Sintesis2 que hace lo que explicaba al principio:
Cita de: Johann
... juntar todos esos objetos en una única lista y luego redistribuirlos en listas nuevas luego de haberlos ordenado de acuerdo al valor en una de sus propiedades.
[gml]
///sintesis2(new1, new2, others)
// argument0: Primera nueva lista
// argument1: Segunda nueva lista
// argument2: lista de objetos que contienen las listas a unir

var mol, elm, i, j;
var elems = ds_list_create();
// primero se meten todos los objetos de las listas en argument2 en una sola lista
for (i=0; i<ds_list_size(argument2); i++) {
    mol = argument2[| i];
    for (var j=0; j<ds_list_size(mol.lista); j++) {
        ds_list_add(elems, mol.lista[| j]);
    }
    ds_list_clear(mol.lista);
}
// luego esa lista se ordena
e_sort(elems); // aquí es donde falla algunas veces, cuando se le da la gana si funciona XD
// los objetos ordenados se distribuyen de manera equitativa en 2 listas nuevas
for (i=0; i<ds_list_size(elems); i++) {
    elm = elems[| i];
    if (i mod 2 == 0) {
        elm.padre = argument0.id;
        ds_list_add(argument0.lista, elm);
    } else {
        elm.padre = argument1.id;
        ds_list_add(argument1.lista, elm);
    }
}

ds_list_clear(elems);
ds_list_destroy(elems);
[/gml]

Alguno dirá que son muchos ciclos for, pero como una lista no va a llegar a tener mas de 10 objetos no le veo problema.
Y bueno, tampoco me voy a cerrar, voy a probar los de la cola de prioridad para ordenar haber que pasa.


Edit pocos minutos después: ha funcionado perfectamente el ordenamiento por medio de colas de prioridad y me ahorra modificar todo el proyecto como habia pensado al principio :D
221
Preguntas y respuestas / Re:Script que funciona a veces
Noviembre 30, 2018, 04:03:40 PM
Pues ya estando ordenada, recorro la lista con un for, y como es seguro que habrá un numero par de instancias de cada tipo (sea A o B o incluso C o mas) cuando el indice del for es par (i mod 2 == 0) meto la instancia en la primera lista y cuando es impar, en la segunda, asi se distribuyen en partes iguales y quedan ordenados de una vez, porque necesito que también estén ordenados para crear relaciones entre ellos (dentro de una misma lista) utilizando un grid que contiene esas relaciones.
222
Preguntas y respuestas / Re:Script que funciona a veces
Noviembre 30, 2018, 04:13:40 AM
Cita de: NiuWeb en Noviembre 30, 2018, 03:48:27 AM
tal vez sea buena idea imprimir texto en consola en varias partes del código para ver en qué lugar exactamente se produce el fallo.
Lo he hecho por todas partes, imprimiendo cada cambio en las listas para ver donde muere, una hipótesis que tenía era que el programa dependía del orden que se fueron creadas las instancias, lo cual es ridiculo XD

Me dejas pensando con lo de las colas de prioridad, así no tendría que usar ordenamiento, pero el cambio a esta altura me puede salir un poquito costoso (o no?, ya se me están ocurriendo cosas)
223
Hola a todos, les cuento que me enfrento al bug mas "ficticio" del mundo:
Primero el contexto:
Resulta que tengo varias listas que contienen objetos (instancias de un mismo objeto, para ser mas exacto), estos objetos tienen sus propiedades (variables) con diferentes valores, en algún momento requiero juntar todos esos objetos en una única lista y luego redistribuirlos en listas nuevas luego de haberlos ordenado de acuerdo al valor en una de sus propiedades.
Para eso utilizo el algoritmo de ordenamiento burbuja adaptado a las condiciones particulares, ya lo he probado en un proyecto aislado y no ha tenido inconvenientes:

[gml]
///e_sort(list)
var N = ds_list_size(argument0);
var s = noone;
var j = 0;
for (var i=1; i<N; i++) {
    j = i;
    s = ds_list_find_value(argument0, j);
    while (ds_list_find_value(argument0, j-1).valor > s.valor && j>0) {
        ds_list_replace(argument0, j, ds_list_find_value(argument0, j-1));
        j--;
    }
    ds_list_replace(argument0, j, s);
}
[/gml]

Ahora los casos que se dan luego de juntar todos los objetos en una unica lista:

  • A, B, A, B, B, B
  • B, B, A, B, A, B
Donde A tiene un valor de 3.04 y B tiene un valor de 3.44
En cualquier caso el resultado debería ser A, A, B, B, B, B PERO en el primer caso funciona y en el segundo falla el algoritmo y se cierra la aplicación.
Cuando funciona se crean correctamente dos listas conteniendo A, B, B como se espera que lo haga.


############################################################################################
FATAL ERROR in
action number 1
of Mouse Event for Glob Right Pressed

for object control:


Unable to find any instance for object index '0' name 'table_return'
at gml_Script_e_sort
############################################################################################
--------------------------------------------------------------------------------------------
stack frame is
gml_Script_e_sort (line -1)
gml_Script_sintesis2
gml_Object_control_Mouse_54


Es como si los objetos ya no existieran y hace cualquier cosa como buscar un object_index == 0 con el nombre de cualquier otro objeto.
Ya he verificado que efectivamente los objetos si existen y fue asi como obtuve las listas de los casos que puse arriba como ejemplo.
Las veces que he visto que el "error" se encuentra en la linea -1 es porque no logra iniciar el script.
El script sintesis2 es el que une las listas en una sola, aplica el script de ordenamiento y hace la redistribución en las listas nuevas, eso se ejecuta en un evento Global Right Pressed

Me tocó alargar el post debido a la complejidad del proyecto que postearé a mitad de Diciembre, espero que no se me escape nada para que me puedan ayudar con sus comentarios.
224
Juegos completos / Re:Legend Tracker Episode 1
Noviembre 29, 2018, 01:15:46 AM
Eso es porque no lee una DLL, las veces que he visto ese error ha sido cuando se corre un juego en un sistema operativo en el que la libreria ya no es compatible.
Aunque también puede ser que la librería no esté en su lugar.
225
Juegos completos / Re:Lab 23 [Windows]
Noviembre 29, 2018, 12:02:37 AM
He corregido el error puntual de la imagen, Marth.
era una simple letra mal digitada.
El ejecutable ya esta actualizado