Noticias

Se ha publicado un nuevo servicio, el Portal de Juegos Online

Comunidad Game Maker

Bienvenid@ a la comunidad hispana de Game Maker. Nuestro objetivo es crear videojuegos y dar soporte en castellano de GM. Para mejorar nuestro servicio hemos implantado, como adicion al reglamento general, algunas normas especificas en los subforos más comunes. ¡No olvides informarte antes de participar!.

Mostrar Mensajes

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


Mensajes - Guacusio

Páginas: 1 2 3 ... 28
1
Preguntas y respuestas / Re:Para que sirven las surfaces
« en: Enero 24, 2016, 02:57:15 am »
Las surfaces son "lienzos" sobre los cuales se puede dibujar mediante las funciones draw de GM. Permiten, por ejemplo, dibujar en tiempo real sobre la pantalla cosas persistentes (que no se borren al final del step), crear menus de pausa mostrando de fondo el juego congelado, crear sprites personalizados durante el juego y en general cualquier cosa donde se necesite crear un dibujo persistente y utilizarlo posteriormente. La misma imagen que muestra un juego, con todos sus sprites, backgrounds, etc., no es más que una surface llamada application_surface sobre la que GM dibuja el juego en cada step.

2
Preguntas y respuestas / Re:Animar tentáculo
« en: Diciembre 31, 2015, 03:34:01 am »
Nooo! los ángulos no son acumulativos!  XD Tenía un modelo que usa ángulos acumulativos pero se los saqué porque dijiste que no querías que el ángulo dependiera de las conexiones previas. El ángulo del segmento anterior sólo lo necesito para calcular las coordenadas del segmento siguiente, pero no lo acarreo. Si usara ángulos acumulativos, el código del evento end step sería como esto:

Código: [Seleccionar]
var i,a,c,s;
for (i=1;i<ntent;i++)
    {
    with segmento[| i]
        {
        a=degtorad(padre.image_angle);
        c=cos(a);
        s=sin(a);
        x=padre.x+d*c;
        y=padre.y-d*s;
        image_angle=padre.image_angle+a0;
        }
    }

donde a0 representa el ángulo de un segmento relativo al anterior. Y sí, me parece mejor considerar ángulos acumulativos porque facilita la creación de animaciones más realistas.

Citar
lo que habría que hacer es no dejarlo todo en manos de lo random, sino nosotros definir la animación "step por step". Por ejemplo, "muévete gradual de 0 a 90 en... 30 steps", luego gradualmente baja hasta -90 etc

Exactamente. El problema es que no es sencillo definir los ángulos sólo tanteando; requiere paciencia y ensayo y error hasta conseguir la animación como la quieres. Yo una vez necesité hacer esto para un juego de lucha y preparé una interfaz gráfica para crear animaciones de esta manera y me ahorró muchísimo trabajo: creaba el código que simplemente tenía que copiar y pegar en las timeline (si te interesa puedo pasártelo). Lo bueno es que este sistema tiene un uso generalizado para cualquier tipo de animación. Podrías crear no sólo tentáculos sino figuras humanas moviéndose o lo que se te ocurra, con toda una jerarquía de segmentos.

3
Preguntas y respuestas / Re:Animar tentáculo
« en: Diciembre 30, 2015, 05:05:06 am »
Debería ser algo bastante sencillo de implementar, aunque la animación es algo más complicada. Puedes intentar usar el motor spine incorporado en GMS y usar una Skeletal Animation, o puedes hacerlo manualmente. Para lo último, tienes que considerar lo siguiente:

-Cómo vas a mantener cada segmento unido al anterior
-Cómo vas a cambiar los ángulos en forma continua y no discreta para lograr una animación suave

Simplificando el problema a un tentáculo compuesto de segmentos iguales, mediante trigonometría puedes obtener las coordenadas de un segmento en función de las coordenadas del segmento anterior y su ángulo:



donde d es la distancia que separa al origen de un segmento del origen del siguiente. Llevando esto a código, por ejemplo podrías crear 2 objetos, uno para el primer segmento (o_monstruo) y otro para los demás (o_tent); guarda en una lista las id de cada segmento y en end step calculas las coordenadas de cada uno.

objeto o_monstruo:
create:
Código: [Seleccionar]
var i;
ntent=6;//número de segmentos
segmento=ds_list_create();
segmento[| 0]=id;
for(i=1;i<ntent;i++)
    {
    segmento[| i]=instance_create(0,0,o_tent);
    segmento[| i].padre=segmento[| i-1];
    }
o_tent.d=84;//depende del sprite y la ubicación de su origen

end step:
Código: [Seleccionar]
var i,a,c,s;
for (i=1;i<ntent;i++)
    {
    with segmento[| i]
        {
        a=degtorad(padre.image_angle);
        c=cos(a);
        s=sin(a);
        x=padre.x+d*c;
        y=padre.y-d*s;
        }
    }

el objeto o_tent no necesita eventos, pero ambos objetos deben tener asignado el sprite del segmento.

Para mover el tentáculo, basta con asignarle valores a image_angle de cada segmento. Por ejemplo, puedes usar este script:

http://www.comunidadgm.org/desarrollo-de-scripts/cambio-continuo-automatico-de-una-variable-entre-2-valores/

y llamarlo así (suponiendo que le llamas scr_cv):

scr_cv("image_angle",a1,a2,n,t);

donde:

a1=ángulo inicial del segmento
a2=ángulo final del segmento
n=número de steps que dura la animación
t=id del segmento a animar

Puedes usar una timeline para ir cambiando los ángulos y crear animaciones complejas. Te dejo un editable con lo que te expuse.

4
Edit:

Es un tanto extraño definir arrays con tramos vacíos. Si tienes que relacionar un índice para cada variable, ¿no te convendría usar una lista un mapa en vez de un array?

5
Preguntas y respuestas / Re:movimiento de personaje
« en: Diciembre 29, 2015, 03:22:34 am »
Al parecer lo que jonciverk2 necesita es mover una instancia de un punto a otro en un número determinado de steps, no automáticamente en uno solo. Una vez hice un script que, dentro de muchas otras cosas, hace exactamente eso:

http://www.comunidadgm.org/desarrollo-de-scripts/cambio-continuo-automatico-de-una-variable-entre-2-valores/

Bastaría llamar al script con estos argumentos:

argument0: "x"
argument1: personaje.x
argument2: personaje.x+d
argument3: steps
argument4: personaje

donde personaje es la id de la instancia que representa al personaje, d es el número de pixeles que quieres moverlo (negativo si es hacia la izquierda) y steps es el número de steps que quieres que le tome el movimiento.


6
Preguntas y respuestas / Re:Input de rango?
« en: Diciembre 26, 2015, 10:03:48 pm »
Si se puede realizar, pero GameMaker no tiene funciones específicas para crear interfaces gráficas, todo tiene que ser programado por el usuario.
Hay varios controles funcionales en el marketplace:
https://marketplace.yoyogames.com/search/results?utf8=%E2%9C%93&query=gui
https://marketplace.yoyogames.com/search/results?utf8=%E2%9C%93&query=volume

Ay! bendito sea el que hizo Game Maker, más trabas no se pueden poner para algunas cosas... para unas esta muy bien y para otras tan simples como inputs te ponen una barrera. Bueh, ya programaré yo el mio propio.

¿A eso llamas una "barrera"? GMS tiene cientos de funciones para diversos usos. No me parece que sea un defecto el que carezca de una para mostrar algo tan específico como un deslizador que defina el valor de una variable. Algo tan simple (como tu mismo lo calificas) puede hacerse perfectamente con los recursos de GMS y de manera totalmente personalizada según los deseos del programador. Aciertas con programarlo tu mismo, es lo mejor.

7
Preguntas y respuestas / Re:Error Raro con los Scripts
« en: Diciembre 26, 2015, 09:55:14 pm »
¿Comprobaste que realmente el script no se ejecuta nunca? (que no haga nada no significa necesariamente que no se esté ejecutando). Al comienzo del script coloca una sentencia que obligue al juego a pausarse, como mostrar un mensaje con show_message; así sabrás si realmente el script se ejecuta o no.

También debieras aclarar si con interceptores te refieres a breakpoints que detienen el juego en modo debug.

8
Preguntas y respuestas / Re:Problema con codigo para menu
« en: Diciembre 24, 2015, 03:33:11 am »
Estás ejecutando todos los if que tienen en su condición que keyboard_check_pressed(vk_down) sea true. Para evitarlo, coloca un exit antes de cerrar la llave de cada if.

Me parece una manera un tanto ineficiente de crear un menú. Te sugiero que pruebes a utilizar una sola variable como índice de la alternativa resaltada en el menú en vez de tener una distinta para cada una de las 4 y que uses el evento keyboard press (any key) en vez de step. Por ejemplo, usando arrays:

Evento create:
Código: [Seleccionar]
//sprite de cada alternativa:
menu[0]=menu_start;
menu[1]=menu_opt;
menu[2]=menu_extra;
menu[3]=menu_exit;
op=0;//índice de la opción resaltada (start al principio)

Evento keyboard press (any key)
Código: [Seleccionar]
if keyboard_check_pressed(vk_up)
    op=max(0,op-1);//mueve el índice hacia arriba
if keyboard_check_pressed(vk_down)
    op=min(3,op+1);//mueve el índice hacia abajo
sprite_index=menu[op];
if keyboard_check_pressed(vk_enter)
    {
    if op=0
        room_goto(level1);
    else if op=3
        game_end();
    }

9
Preguntas y respuestas / Re:Creation Code en la room
« en: Diciembre 23, 2015, 11:38:15 am »
El código asociado a la creación de un room no pertenece a ninguna instancia así que las variables usadas en él desaparecen tan pronto termina de ejecutarse el código. Sin embargo, además de poder utilizarse variables globales, también se pueden utilizar variables de cualquier instancia existente.

10
Preguntas y respuestas / Re:Duda con GUI y view
« en: Diciembre 22, 2015, 03:52:05 am »
Hola, tengo una duda con las view y el DRAW GUI.

Tengo dos view, en al view 0 tengo un objeto con el evento draw GUI {draw_self()}, pero la view 1 se solapa encima de este view. No se supone que el draw GUI hace que se vea encima del todo???

Gracias.

No se entiende la pregunta. Dices que tu view 1 se solapa encima de tu view 0, ¿se supone que no quieres eso? ¿Qué tiene que ver con el hecho de que lo dibujado en el evento draw GUI se dibuja por sobre ambas views? (que así es, por cierto).

11
Preguntas y respuestas / Re:¿En donde debería de ir?
« en: Diciembre 22, 2015, 03:36:38 am »
Cita de: Grewyks
¿En donde debería de ir?

Intenta utilizar títulos descriptivos para tus post, el que pusiste no indica nada.

12
Preguntas y respuestas / Re:Ayuda con orden de una lista
« en: Diciembre 20, 2015, 02:57:55 pm »
Si quieres ordenar una matriz en base a los valores de una columna, lo más sencillo es usar grids: crea un grid con ds_grid_create, asígnale valores con ds_grid_set y finalmente ordénalo en base a los valores de una columna usando ds_grid_sort (esta última una poderosa función).

13
Preguntas y respuestas / Re:Numero en el Array?
« en: Diciembre 19, 2015, 09:54:14 pm »
Tal vez te convenga usar una estructura de datos como una lista o un mapa, que sí tienen funciones dedicadas para saber si un valor está contenido en ellas.

14
Preguntas y respuestas / Re:Demasiadas Instancias
« en: Diciembre 19, 2015, 09:50:07 pm »
No creo que sea especialmente GM el que tenga problemas con el exceso de instancias. Una forma de optimizar un juego es monitorear la cantidad de recursos que consume cada elemento del juego mediante el debugger y así centrar los esfuerzos de optimización en lugares donde realmente se puede hacer una diferencia.

15
Desde que GM no permite crear objetos dinámicamente, lo veo difícil. Tal vez se podría crear en un objeto un código que lo controle todo desde su evento step o draw, que sería la única manera de permitir interacción constante con el jugador.

Páginas: 1 2 3 ... 28