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

721
Creo que la mejor forma de armar los niveles sería crear un editor propio que permita ensamblar las piezas básicas.

Para detectar el cursor dentro de las piezas no recomiendo usar collision_point, ya que se deben activar las colisiones precisas y la revisión se hace pixel por pixel, mientras más grandes sean los sprites más lento será el sistema. Se me ocurren dos métodos para optimizar la detección: El primero sería definir los objetos con el sistema de física (Box2D) y usar physics_test_overlap para detectar la superposición con un objeto pequeño que represente al cursor. El segundo método sería definir las áreas de colisión de forma geométrica y detectar el cursor con funciones como estas:
point_in_circle
point_in_rectangle
point_in_triangle
point_in_polygon
punto_en_rect_rotado

Algo que requiere un poco de trabajo es lograr que los bordes de las figuras se vean nítidos al rotarlas. Una forma fácil es usar un nivel alto de antialias con display_reset, pero no es recomendable usarla en teléfonos proque requiere mucho procesamiento. Otra forma es usar texturas o sprites con un contorno igual al color del fondo, así el borde se verá nítido simplemente con activar la interpolación entre pixels, pero tendrás que ser muy cuidadoso en la forma de ensamblar las piezas.
722
Me parece interesante la idea de un juego con ese protagonista.

El principal error con las colisiones es que no se asegura que el personaje va a quedar afuera del bloque, ¿el signo menos es para darle un efecto de rebote?. En lugar de usar el evento Collision puedes usar el evento Step y usar variables personalizadas para la velocidad vertical y la velocidad horizontal para dividir el movimiento en dos partes. Puedes basarte en esto para programar las colisiones: http://www.comunidadgm.org/articulos/tips-para-juegos-de-plataformas-(programacion)/.

También deberías usar máscaras de colisión completamente rectangulares.
723
Lo que se ve en el primer video es normal, es el efecto tearing, sucede porque los frames se dibujan antes de que se complete el barrido vertical de la pantalla, entonces a veces queda la mitad de un frame y la mitad del siguiente. Se puede disminuir activando la sincronización vertical, pero pueden bajar los fps.
http://docs.yoyogames.com/source/dadiospice/001_advanced%20use/global%20game%20settings/windows%20tab.html
http://docs.yoyogames.com/source/dadiospice/002_reference/windows%20and%20views/display_reset.html
En teléfonos no ocurre el efecto tearing.
Una mejor opción es incrementar los fps de las rooms.

El problema del fondo que no sigue a la view correctamente se debe al orden de los eventos. El fondo se coloca en la posición de la view, pero ya se dibujó en la posición anterior. Debes posicionar la view y el fondo antes de que inicie el evento Draw.
[gml]
//Evento End Step
view_xview[0] = obj_player.x - 200;
view_yview[0] = obj_player.y - 100;
background_x[0] = view_xview[0];
background_y[0] = view_yview[0];
[/gml]
724
¿también se compara la altura?
725
El tamaño máximo que permite GMS es 2048 x 2048, ese es el tamaño de las páginas de textura por defecto en Windows, para otros dispositivos tienes que indicarlo en Global Game Settings. Si tienes imágenes más grandes debes recortarlas en partes que no pasen de 2048 x 2048 (o el tamaño de páginas de textura que hayas elegido). El problema es que sí afecta el rendimiento, sobre todo en móviles, ya que se deben hacer muchos "texture swaps".
726
Es muy poca información, deberías mostrar el código.
727
Preguntas y respuestas / Re:dudas snippets.txt
Mayo 23, 2017, 06:58:57 AM
Hay dos archivos "snippets.txt", uno en Roaming y otro en Local, el último es el que tiene preferencia.
El texto que se escribe entre dos barras verticales aparece seleccionado al insetar el snippet, eso se puede usar para mover el cursor al final. Escribe dos barras, pero sin texto en medio.
[gml]
D - destroy:instance_destroy();||
[/gml]
728
¿Tienes pensado el género del juego?
Mis laberintos favoritos son los metroidvanias, juegos de plataformas, donde el personaje se mueve dentro de espacios angostos buscando salidas a nuevas zonas. En cada juego el personaje ataca de forma diferente y tiene diferentes armas disponibles, podrías crear tu propio sistema de batalla.
729
Se puede asignar una timeline por instancia, entonces puedes crear dos objetos con timelines diferentes y hacer que inicien al mismo tiempo.
730
Este problema es muy común, se explica aquí: https://www.yoyogames.com/blog/3
Para solucionarlo se debe agregar un "buffer" alrededor de cada tile, este programa puede ayudar: http://gmc.yoyogames.com/index.php?showtopic=546371
731
Preguntas y respuestas / Re:Click en un texto
Mayo 19, 2017, 02:22:23 AM
Tal vez te sirve este script:
[gml]
///boton_texto( x,y, c1,c2,c3, texto );
/*              0 1  2  3  4   5
x,y: posicion del texto
c1: color normal
c2: color cuando el puntero esta encima
c3: color al ser presionado
texto: cadena a mostrar
*/

var _x,_y,_w,_h;
_x = argument0;
_y = argument1;
_w = string_width( argument5 );
_h = string_height( argument5 );

if( mouse_x > _x
and mouse_x < _x+_w
and mouse_y > _y
and mouse_y < _y+_h ) //si el puntero esta dentro del texto
{
    if mouse_check_button_pressed( mb_left ) //si se ha hecho click
    {
        draw_set_color( argument4 ); //color al presionar
        draw_text( _x,_y, argument5 ); //dibujar texto
        return true; //se ha presionado
    }
    else //si no se ha hecho click
    {
        draw_set_color( argument3 ); //el puntero esta encima
        draw_text( _x,_y, argument5 );
        return false;
    }
}
else //el puntero no esta dentro del texto
{
    draw_set_color( argument2 ); //color normal
    draw_text( _x,_y, argument5 );
    return false;
}
[/gml]

Se debe poner en el evento Draw:
[gml]
if boton_texto( x,y, color1,color2,color3, "Texto" )
{
  // Acciones
}
[/gml]
732
Esta línea no debería causar problemas
[gml]application_surface_draw_enable(false);[/gml]
solo evita que la application_surface se dibuje automáticamente en el evento Draw, por eso se dibuja manualmente en el evento Post Draw.

El error debe estar en otro objeto que borra la surface
[gml]application_surface_enable(false);[/gml]
733
Puedes programar los movimientos como en este ejemplo de Guinxu https://www.youtube.com/watch?v=uRaE-NaxFJA
Para recortar la imagen se pueden usar surfaces.
734
Ya hice pruebas y me dicuenta de que usar la variable global.reiniciar_musica no es buena idea, el evento se ejecuta al cargar, pero también se ejecuta después de guardar.

Elimina los eventos Create y Step del objeto música, y agrega esta linea en el objeto que carga el juego
[gml]
game_load( "guardar.sav" );
event_perform_object( obj_Musica, ev_other,ev_room_start );
[/gml]
735
Se me ocurrió esto, pero no estoy seguro de que su efectividad: En lugar de usar las funciones activate y deactivate, podrías poner un código en el evento Step de cada objeto que esté revisando si se encuentra dentro de la view. Si se sale de la view, se hace invisible y salta los eventos más pesados, de lo contrario ejecuta todo.