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

1411
Preguntas y respuestas / Re:Mouse leave en codigo?
Febrero 17, 2015, 02:30:17 AM
Se puede simular de esta forma:
[gml]
///Create
puntero1 = collision_point( mouse_x, mouse_y, id, false, false ); //estado actual del puntero
puntero0 = puntero1; //estado previo del puntero, al inicio son iguales
[/gml]
[gml]
///Step
puntero1 = collision_point( mouse_x, mouse_y, id, false, false ); //estado actual del puntero

if( puntero0 and !puntero1) //si la instancia estaba bajo el puntero y ahora no
{
    //ocurre un "mouse leave"
}

if( !puntero0 and puntero1) //si la instancia no estaba bajo el puntero y ahora si
{
    //ocurre un "mouse enter"
}

puntero0 = puntero1; //estado previo del puntero, se actualiza en cada step
[/gml]
1412
En el código que pones nunca se modifica la posición del personaje, si el objeto es persistente conservará sus coordenadas en la room siguiente.
1413
Hice un ejemplo en el que la barra se dibuja sobre una superficie y se texturiza cambiando el método de mezcla (blend mode). Para que el redondeado quede más suave, en vez de usar draw_roundrect, se debe usar un sprite circular con "anti-alias".
1414
Preguntas y respuestas / Re:Vitual_Keys
Febrero 16, 2015, 08:32:52 PM
Puedes obtener la posición del dedo en la interfaz gráfica con device_mouse_x_to_gui y device_mouse_y_to_gui, después comparar la distancia entre ese punto y el centro de los botones con point_distance, si la distancia es menor al radio del un botón el botón está presionado.

Si ya tienes el juego programado para responder a las virtual keys, vas a tener que cambiar mucho código.
1415
Preguntas y respuestas / Re:Excluir objeto de la view
Febrero 16, 2015, 02:16:26 PM
También se puede dibujar el HUD en el evento Draw GUI que no es afectado por las vistas.
1416
Agregar otra condición para comprobar que la ruta ha cambiado y no volver a iniciarla:
[gml]
if( vida <= 100 )
if( path_index != path_nueva )
path_start( path_nueva, 4, 2, 1 );
[/gml]
1417
Se va a usar mayor cantidad de memoria (RAM), el uso del procesador no va a aumentar. Cuando se sale de una room persistente las instancias que están ahí no ejecutan ningún evento, sólo se conservan sus variables en la memoria.

Los problemas pueden ocurrir si se visitan muchas rooms persistentes, que van agregando variables a la memoria, y si hay muchas instancias en las rooms. Como el juego será en HD, ya es un requisito que el dispositivo tenga una cantidad considerable de memoria, tal vez las variables guardadas no sobrepasen la cantidad de memoria requerida para los gráficos, pero conviene meditar si las rooms persistentes son el mejor método, toma en cuenta que cada instancia en la room tiene unas 100 variables aproximadamente (son las variables predefinidas de GMS), aunque el objeto esté inmóvil y no tenga eventos cuenta con esas variables, multiplícalas por la cantidad de instancias en la room, suma las variables que vas a definir y suma las variables de todas las instancias de las otras rooms persistentes, tal vez sea mejor implementar un método que guarde sólo las variables que necesitas.
1418
Las funciones que devuelven un valor al azar (llamadas pseudo-aleatorias) funcionan en base a una número denominado semilla para generar los números "aleatorios". Para cada semilla se produce una secuencia de números aleatorios, si no se cambia se obtendrá el mismo orden de resultados

randomize() asigna una semilla "aleatoria", ocasionando que la función choose() sea más aleatoria.

También se puede asignar manualmente con random_set_seed().

Me acabo de dar cuenta que el código necesita un ciclo para funcionar, debe quedar así:
[gml]
randomize();
repeat( n ) //n es el número de objetos
{
    objeto = choose( ob1, ob2, ob3, ... );
    if( not instance_exists(objeto) ) { instance_create( x,y, objeto ); break; }
}
[/gml]
1419
Estas pueden ser algunas causas:


  • Tal vez en los niveles lentos hay demasiados cambios de texturas, se deben optimizar.
  • Con el tiempo se van acumulando en la memoria páginas de textura sin usar, es necesario hacer de vez en cuando una limpieza con draw_texture_flush().
  • Si usas estructuras de datos y/o surfaces, borra las que no se utilicen, o reutiliza las que se crearon al inicio del juego
1420
Se puede así:
[gml]
randomize();
objeto = choose( ob1, ob2, ob3, ... );
if( not instance_exists(objeto) ) instance_create( x,y, objeto );
[/gml]
1421
Preguntas y respuestas / Re:Como hago un plataformero
Febrero 11, 2015, 05:15:25 PM
Aquí hay consejos para un juego plataformero:
http://www.comunidadgm.org/articulos/tips-para-juegos-de-plataformas-(programacion)/

y aquí, un motor para plataformas que usa el mínimo de procesador:
http://www.comunidadgm.org/articulos/colisiones-con-tiles-(programacion)/
1423
Como tamaño de room usa el que más te guste y mejor se adapte a tu estilo gráfico, las views son necesarias para que el juego se adapte a la pantalla sin que se vean líneas negras o que la imagen se vea aplastada/alargada, pero toma en cuenta que en algunas pantallas será necesario recortar un fragmento de la room.
¿Qué versión de GMS usas?, el método para adaptar a la pantalla es diferente a partir de la versión 1.3
1424
El manual muestra cómo se calcula el "producto punto":
[gml]
dot_product( x1,y1, x2,y2 ) = (x1*x2) + (y1*y2)
[/gml]
y por sus propiedades es igual a |x1,y1|*|x2,y2|*cos(ángulo)

Se puede usar para saber si un objeto está en el rango de visión de otro objeto, pero se me ocurre un método más entendible:


Tenemos al objeto observador en una posición (x, y) y su vector de visión "V" con ángulo de inclinación "a" y ángulo de visión "c", y tenemos otro objeto con posición (ob.x, ob.y), el paso fundamental es saber cuánto mide el ángulo "b", con GML es muy fácil
[gml]
b = point_direction( x,y, ob.x,ob.y );
[/gml]
después se obtiene la diferencia entre los ángulos a y b
[gml]
dif = abs( angle_difference(a,b) );
[/gml]
y por último se compara con el ángulo de visión
[gml]
if( dif <= c/2 ) //el objeto es observado
[/gml]
1425
Preguntas y respuestas / Re:Cómo abro un fichero gmz?
Febrero 10, 2015, 05:19:52 PM
Esa extensión es para un proyecto de :GMS: comprimido, se puede descomprimir con Winrar, pero no se puede importar en  :GM8: