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 - Clamud

361
Buena solución.
Hace poco estaba pensando en cómo comprobar que las funciones shuffle usan el mismo generador de números que las funciones random. Esto lo demuestra.
362
Preguntas y respuestas / Re:salto en plataforma 3d
Abril 22, 2018, 09:30:54 PM
Cuando se utiliza with el código se ejecuta en todas las instancias del objeto indicado (en este caso obj_piso) y la instancia que inició el ciclo se convierte en other (en este caso other es el objeto jugador). Si una instancia de obj_piso toca al jugador y es la primera instancia en este ciclo, entonces se guarda su valor z1, pero si no es la primera instancia, su valor z1 se compara con el que ya se tiene guardado y solo se conserva el mayor de los dos (max).
363
Deberías revisar todos los puntos táctiles (de 0 a 4), tal vez el punto que está sobre la flecha tiene indice 3, pero el for solo llega a 1.

Usar "virtual keys" es buena opción, creo que haría el código más fácil de escribir.
364
Creo que "flood fill" es la solución. Estuve probando el ejemplo de Stack Overflow y detecta loops aunque no existan ceros dentro del loop, entonces no sirve para lo que necesitas.

Después encontré esta alternativa
https://www.geeksforgeeks.org/find-number-of-islands/
que utiliza el algoritmo DFS para encontrar todas las celdas adyacentes. El problema es que DFS es recursivo y he leído que GMS tiene un límite reducido de niveles de recursión, por lo que no es muy seguro.

Para evitar la recursión se puede usar BFS
https://es.wikipedia.org/wiki/B%C3%BAsqueda_en_anchura

Con esa información logré hacer un programa que asigna colores aleatorios a islas de 0's separadas por barreras de 1's. El editable está adjunto.

Para que funcione como lo necesitas debes agregar más posiciones de celdas adyacentes y verificar que las islas no tocan la orilla del tablero.
365
Parece que la room o la view es más pequeña que la pantalla, cuando GM escala la imagen se notan los pixels.
Puedes hacer los gráficos un poco más grandes y mantener activa la interpolación.
366
El tablero se podría guardar en un array 2D, para evitar guardar las coordenadas como strings.
Los anillos se podrían detectar de esta forma, pero revisando 6 celdas adyacentes en lugar de 4.
https://stackoverflow.com/questions/30903506/detecting-closed-loop-in-a-2d-array-pattern
367
Normalmente utilizo xor para cambiar una variable de true a false y viceversa
[gml]
check = check xor true;
[/gml]
Es más compacto con xor a nivel bit
[gml]
check ^= 1;
[/gml]
368
Puedes utilizar algo como esto.
http://www.comunidadgm.org/desarrollo-de-scripts/distorsionar-sprites/
Tal vez debes ajustar algunos parámetros como la velocidad de las ondas y su amplitud. También puedes dibujar encima un sprite azul con baja opacidad.

En realidad es más eficiente usar shaders. En el marketplace hay muchos (por el momento el marketplace no está disponible :o).
Puedes basarte en estos ejemplos
http://xorshaders.weebly.com/tutorials/8-wind-shader
https://github.com/h3rb/gml-pro
369
En GM8 no se pueden usar buffers, solo son espacios de memoria donde puedes escribir datos byte por byte.

En Minecraft se utilizan varias técnicas avanzadas de optimización, hacer una réplica no es tan sencillo como parece.
Hay varios ejemplos de Minecraft hechos con GML. Por ejemplo: https://enigma-dev.org/edc/games.php?game=65

Para aprender sobre estructuras de datos puedes comenzar con el artículo de NiuWeb
http://www.comunidadgm.org/articulos/estructuras-de-datos-mapas-y-listas-(programacion)/
y con el manual traducio
https://bygdle.xyz/gamemaker/manual/Referencia/Estructuras_de_datos/
Aún no hay información sobre ds_grids, pero funcionan de forma parecida a las ds_lists.
370
Preguntas y respuestas / Re:Problema con local push
Abril 16, 2018, 06:19:26 PM
Nunca he usado notificaciones, no se mucho al respecto, pero sospecho que el problema puede estar en las actualizaciones recientes de GMS.
371
Preguntas y respuestas / Re:Dudas sobre arrays
Abril 16, 2018, 06:17:38 PM
Sí, los arrays se pueden declarar como variables locales con var. Al terminar el bloque de código los valores se borran de la memoria.
Ejemplo:
[gml]
// Create
var arr;
arr[0] = 1;
arr[1] = 4;

// Draw
// Lanzará error porque arr ya no existe
draw_text(x,y, arr[0]);
[/gml]

Otra forma de borrar el contenido de un array es asignar un valor como a una variable simple.
Ejemplo:
[gml]
arr[0] = 1;
arr[1] = 4;
arr[1] = 5;
arr[1] = 9;
//arr continen 4 valores

arr = 0;
//los valores anteriores se borraron
[/gml]
372
Preguntas y respuestas / Re:salto en plataforma 3d
Abril 16, 2018, 06:03:14 PM
Estoy pensando que el método con instance_position solo funciona bien en GM8. Una alternativa para encontrar la altura del suelo es esta:
[gml]
ins1 = true; //para determinar si es la primera instancia que se revisa
with (obj_piso) {
    if place_meeting(x,y, other.id) {
        if (other.ins1) { //primera instancia
            other.gnd = id.z1; //altura de esa instancia
            other.ins1 = false; //ya se revisó
        }
        else{
            //si la altura es mayor, sustituye a la anterior
            other.gnd = max(id.z1, other.gnd);
        }
    }
}
[/gml]
Debe ser más segura en todas las versiones de GM.
373
Juegos en desarrollo / Re:Airmaze (ver. beta 0.1)
Abril 16, 2018, 03:47:08 AM
Está divertido el juego.
Podrías poner instrucciones en la pantalla y hacer que el área de colisión del personaje sea más clara, también sería bueno poder controlar con las flechas.
374
Hace tiempo probé el juego, pero olvidé comentar.
Funciona bien, pero por alguna razón no es llamativo o emocionante, tal vez otros lo perciben de forma parecida y por eso no hay muchos comentarios.
375
Preguntas y respuestas / Re:salto en plataforma 3d
Abril 16, 2018, 03:16:33 AM
¿Cómo es el mensaje original?

Modifiqué algunas cosas para que funcione en GMS, y me di cuenta de que el objeto obGnd0 es parent de los otros obGnd, tal vez falta agregar algo parecido a tu juego. Adjunto el nuevo editable.