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

1576
En el evento "press" del botón o tecla que quieras que cambie el sprite coloca esto:
[gml]
sprite_index = //nuevo sprite
alarm[0] = //número de steps
[/gml]
En el evento "Alarm 0" cambia el sprite por el que estaba inicialmente:
[gml]
sprite_index = //sprite por defecto
[/gml]

En la sección de descargas hay muchos ejemplos, también es útil revisar la secciones de artículos y tutoriales. Mira éste es un manual con la equivalencia entre D&D y GML, está en la sección de descargas:
http://www.comunidadgm.org/index.php?page=verdescargas&accion=descargaD&download_id=2365
1577
Preguntas y respuestas / Re:Cargar sonidos a un botón
Diciembre 02, 2014, 05:07:37 PM
Hola.

Lo primero es asignar los sonidos a los botones de la lista, esto se puede hacer de muchas formas dependiendo de cómo estén programados los botones (puede ser un sólo objeto y los botones serían scripts, se puede hacer con muchas instancias de un objeto botón y asignar los sonidos con un objeto controlador o con creation codes), la forma más sencilla es crear un objeto para cada sonido (aunque tal vez no sea la más eficiente). En el evento Create de cada botón en la lista se asigna la variable "sonido = id_sonido;" y la variable "seleccionado = false;", y en algún otro objeto la variable "global.sonido_seleccionado = -1;"

Al hacer click en alguno de los botones de la lista se hace esto:
[gml]
global.sonido_seleccionado = sonido;
seleccionado = true;
[/gml]
Cuando la varible "seleccionado" esté activada el botón se debe mostrar con otra forma y/o con otro color para indicar que está seleccionado y si hay otro botón seleccionado hacer que se des-seleccione. Una forma sería poner esto en el evento Step:
[gml]
if( global.sonido_seleccionado != sonido ) seleccionado = false;
[/gml]

Ahora en los objetos de abajo, que llamaste "botón de sonido", en el evento Create se inicializar la variable "sonido_cargado = -1;". Al hacer click en esos botones el sonido se carga de esta forma: "sonido_cargado = global.sonido_seleccionado;". Si quieres que las variables "sonido_cargado" se usen en otras rooms debes hacerlas globales o almacenarlas en un array global.

Ya tienes un método sencillo para cargar sonidos y hacer pruebas, hasta luego.
1578
Lo mas fácil es hacer que todos los tipos de suelo sean objetos hijos del obj_suelo.
http://docs.yoyogames.com/source/dadiospice/001_advanced%20use/more%20about%20objects/parents.html
1579
Preguntas y respuestas / Re:Movimiento de vegetación
Diciembre 01, 2014, 04:15:41 PM
Se ve que el árbol es un sprite fijo y se le aplica un efecto de distorsión. Puedes basarte en éste script de MegaG y adaptarlo a tus necesidades:
http://www.comunidadgm.org/desarrollo-de-scripts/distorsionar-sprites/
He encontrado efectos de distorsión hechos con surfaces y/o primitivas, pero usan funciones incompatibles con GMS, con shaders me parece más difícil porque hay que aprender el lenguaje de los shaders.
1580
¿Qué código usas en la colisión?
1581
Preguntas y respuestas / Re:rotar imagenes
Noviembre 29, 2014, 04:11:44 PM
Crea un sprite con origen en el centro, asignalo a un objeto y define una variable "velocidad_rotacion", en el evento Step coloca el código image_angle += velocidad_rotacion.
1584
Estás intentando leer una parte del arreglo que no está definida. Debe haber una diferencia entre el número de imágenes que le estás agregando y el número de imágenes que quieres dibujar.
1585
Preguntas y respuestas / Re:BOTON SILENCIAR
Noviembre 27, 2014, 02:30:10 AM
Mejor usa el mismo objeto para hacer las dos cosas.
En el evento Create define una variable: sonido = true;
En el evento Left pressed coloca una condición:
[gml]
if( sonido ) //si el sonido está activado
{
    //Hacer lo que desactiva los sonidos
    sonido = false; //indicar que el sonido está desactivado
}
else //si no está activado
{
    //Hacer lo que activa los sonidos
    sonido = true; //indicar que está activado
}
[/gml]
1586
Hola, eso se puede hacer con tiles (losas).
Primero coloca los bloqes como deseas y luego agrega una capa de tiles sobre los bloques. En el evento "Destroy" del objeto bloque coloca éste código:
[gml]
tile_delete( tile_layer_find( layer, x, y ) );
[/gml]
"layer" debe ser el valor de profundidad de la capa de tiles que usaste. Entonces cuando el objeto se destruya va a borrar la imagen que esté en las mismas coordenadas.
1587
Ya me dí cuenta porqué se repite, en en último bucle anidado i+j tiene valores repetidos, entonces hay que usar una variable mas:
[gml]
k = 0;
for( i=0; i<m; i++ )
{
    for( j=0; j<n; j++ )
    {
        draw_sprite( arreglo[k,0], arreglo[k,1], i*sep+160, j*sep+480 );
        k++;
        if( k >= tot ) break;
    }
    if( k >= tot ) break;
}
[/gml]
1588
Hola.

Suponiendo que tienes 2 sprites con el mismo número de subimágenes, por ejemplo 10, creamos 2 listas de números ordenados de forma aleatoria:
[gml]
//Crear las listas
lista1 = ds_list_create();
lista2 = ds_list_create();

//Llenar las listas
for( i=0; i<10; i++ )
{
    ds_list_add( lista1, i );
    ds_list_add( lista2, i );
}

//Desordenar
ds_list_shuffle( lista1 );
ds_list_shuffle( lista2 );
[/gml]
Ahora suponemos que vamos a usar 6 subimágenes de esos 2 sprites, y las guardamos en un arreglo 2D:
[gml]
//Arreglo de subimágenes aleatorias
for( i=0; i<6; i++ )
{
    if choose( 0, 1 )
    {
        arreglo[i,0] = sprite1;
        arreglo[i,1] = ds_list_find_value( lista1, i );
    }
    else
    {
        arreglo[i,0] = sprite2;
        arreglo[i,1] = ds_list_find_value( lista2, i );
    }
}
[/gml]
Así obtenemos un arreglo con pares sprite-subimagen. Ahora hay que dibujar las imágenes de ese arreglo. Para no tener que predefinir las coordenadas de cada imagen, podemos definir cuántas se van a mostrar a lo ancho y cuántas a lo alto, y la distancia entre los orígenes de las imágenes. El total de imágenes ya estaba definido desde ántes:
[gml]
m = 3; //número de imágenes a lo ancho
n = 2; //número de imágenes a lo alto
sep = 100; //separación entre orígenes
tot = 6; //total de imágenes a mostrar

for( i=0; i<m; i++ )
{
    if( i+j >= tot ) break; //para no leer partes vacías del arreglo
    for( j=0; j<n; j++ )
    {
        if( i+j >= tot ) break;
        draw_sprite( arreglo[i+j,0], arreglo[i+j,1], i*sep, j*sep );
    }
}
[/gml]
En donde dice i*sep, j*sep vas a necesitar sumar otros valores para que la imágenes queden centradas en la pantalla.
Hace unos días que pensé en éste método pero se me olvidaba mostrarlo, ¿qué te parece?
1589
Gracias por las respuestas.

Me agrada la idea de tener un sólo objeto que tenga los códigos necesarios para todas las habitaciones, claro que es necesario, para que funcione, tener ya un diseño de los niveles bastante sólido.

Lo que pasa es que muchas veces me complico la vida tratando que los motores de mis juegos sean totalmente automáticos. Me gustaría que hubiese un modo gráfico de programar las interconexiones de niveles, y ya tengo una idea para hacerlo:
Definir un array 2D con la posición de las habitaciones en el mundo del juego, y que el personaje además de tener unas coordenadas relativas a la room también tenga una coordenadas relativas al mundo, así cuando el personaje salga de una room va a entrar en otra room que abarque las coordenadas "mundiales" que lleva. Con éste método no sería necesario detectar una colisión para transportarse a otra room. Claro que sería mas funcional en algunos juegos que en otros.

Voy a hacer pruebas con varios métodos para ver cuál me gusta más.
1590
Hola, buen día.

Quiero consultarlos para saber qué técnicas se pueden usar para pasar a una room determinada dependiendo de la salida que se tome en la room actual. Ejemplos: como lo que hacen las tuberías en Super Mario Bros. y las puertas en Metroid.

Lo que yo he hecho es poner objetos como salidas y en cada instancia he agregado un "Creation code" definiendo la room de destino y las coordenadas iniciales en la room de destino (porque algunas rooms tienen muchas entradas). Pero a veces es complicado hacer modificaciones a las rooms porque al cambiar la posición de una entrada hay que hacer varias modificaciones a las posciones de las salidas y a los creation codes de la room que conecta con la otra.

¿Qué métodos han usado? ¿cuáles me recomiendan?
Gracias.