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

1
Cita de: Clamud en Abril 02, 2016, 02:34:10 PM
Es extraño, lo ejecuté por más de 5 minutos y en ningún momento bajaron los fps, el uso de memoria se mantuvo constante (20 MB aprox.) y el uso de procesador fluctuó un poco, pero nunca se usó demasiado.

Hice otra prueba y encontré un error: Cuando se reinicia la room las surfaces se mantienen en memoria y se crean otras nuevas, el uso de memoria no incrementa mucho, pero de todas formas es un desperdicio. Es necesario borrar esas surfaces, al cambiar de room o al reiniciar, y también sería conveniente al finalizar el juego.
[gml]
//Previo a room_restart
if surface_exists( sf0 )
surface_free( sf0 );

if surface_exists( sf1 )
surface_free( sf1 );

// ...
[/gml]


Si, con el ejemplo funciona todo bien, el asunto es en mi juego(adjunto captura). Pero talvez sea por que tiene más elementos en pantalla y resolucion que el ejemplo, aunque yo adapté todo bien.. Igual voy a probar crear una partición con windows 7 y probar, ya que sé que GMK 8.1 no es del todo compatible con el windows 8 que yo tengo y ya me ha dado error "out of memory" cuando lo ejecuto y tengo abierto el photoshop al mismo tiempo. Ojalá sea solo eso, porque este efecto es lo unico que me falta para dejar el motor de mi juego como me gusta  :-[
2
Oye Clamud, porque será que luego de unos 2 minutos el juego empieza a bajar sus FPS de repente? :-X ¿Será que se acumula algo del efecto que agota la memoria?
3
Cita de: Clamud en Marzo 20, 2016, 05:37:23 AM
Usar otra view no es recomendable porque el código se va a complicar mucho.
Hice unas modificaciones al ejemplo para que el desenfoque siempre esté centrado en el personaje. Los degradados se dibujan de acuerdo a la posición relativa del personaje y la vista, y por supuesto, es necesario usar unas imágenes más grandes.

Ahora si, con unos ajustes queda perfecto :3
4
Cita de: Clamud en Marzo 19, 2016, 05:16:49 PM
Es cierto Elvis, usar superficies causa ralentización en algunas máquinas. Para que el juego funcione bien en la mayoría de computadoras, sería bueno poner una opción que desactive los efectos.

Logré hacerlo funcionar con el juego en movimiento, pero estoy haciendo algo que el manual no recomienda: estoy cambiando los lienzos de dibujo dentro del evento Draw, lo bueno es que no parece afectar, el único problema que he encontrado es que si se usa un "foreground" a veces no se ve. El ejemplo está adjunto, el efecto se controla con obBlur, que tiene una profundidad menor a las demás instancias. Creo que exageré con el desenfoque, eso se puede arreglar cambiando los degradados.



Ah gracias, ahí con ese sí queda genial, lo de los foreground igual ya tenía otro objeto encargado de eso y me corre a 60fps sin problemas, igual es buena idea la opcion de desactivar. Lo único que no me queda claro es porque a pesar de que le cambie los parametros sigue utilizando la view[0]? Es que me gustaría centrarlo en el personaje y no en la view (supongo que tendría que usar otra ya que la view[0] tiene la camara y eso) porque cuando llega al borde se ve borroso y tapa al personaje.. jeje
5
Cita de: elviskelley en Marzo 19, 2016, 03:02:40 PM
Oh usan surface, eso ralentiza el juego, bueno al menos en mi PC, yo solo uso
draw_set_blend_mode( bm_blend);
draw_sprite_ext.... el sprite mancha blanca
draw_set_blend_mode( bm_normal);
detph=10000

luego creo un object con un sprite de cuadro negro de 32x32
y coloco en su End step si usa view o create si no la usa.
image_xscale=(room_width/32);
image_yscale=(room_height/32);
detph=-9999; image_alpha=.7;

Listo el circulo anterior teñira el cuadro negro...
Te lo dejo adjunto...



Gracias, pero la cuestión es, que yo no quiero dibujar la iluminación, eso sería talvez más facil incluso. El asunto es el desefoque alrededor, que si bien se logra con el ejemplo de Clamud, el mismo es para una imagen fija y yo necesito que se vea sin importar la escena, ahora estoy viendo si encuentro la vuelta para que quede..
6
Cita de: Clamud en Marzo 18, 2016, 04:26:57 PM
Por un momento pensé en sugerirte un shader, pero me di cuenta de que utilizas GM8. El efecto se puede lograr con superficies. En este caso el proceso se complica un poco porque la escena se debe dibujar a la superficie y no directamente a la pantalla; el dibujo de las instancias se debe hacer previo al evento Draw y en Draw sólo se debe dibujar la superficie para no dibujar dos veces lo mismo.
En resumen, el procedimiento es este: Primero se crean superficies de diferentes tamaños, pero con la misma relación aspecto, y se activa la interpolación de textura. En cada Step se dibuja la escena a una superficie que tiene un tamaño igual a la view, y se usa una imagen con degradado para hacer transparentes algunas zonas de la superficie. Después la superficie con transparencia se dibuja a escala sobre otras superficies.
[gml]
surface_set_target( sf1 );
draw_background( bg0, 0,0 );
draw_set_blend_mode_ext( bm_zero, bm_src_color );
draw_background( bgGradBlanco, 0,0 );
draw_set_blend_mode( bm_normal );
surface_reset_target();

surface_set_target( sf2 );
draw_surface_ext( sf1, 0,0, 1/2, 1/2, 0,c_white,1 );
surface_reset_target();

surface_set_target( sf4 );
draw_surface_ext( sf2, 0,0, 1/2, 1/2, 0,c_white,1 );
surface_reset_target();
[/gml]
En cada evento Draw se dibuja la superficie con la escena original y encima se dibujan las superficies con transparencia, estiradas para que cubran toda el área de la view. Al final se dibuja un degradado oscuro.
[gml]
if surface_exists( sf2 )
draw_surface_ext( sf2, 0,0, 2,2, 0,c_white,1 );

if surface_exists( sf4 )
draw_surface_ext( sf4, 0,0, 4,4, 0,c_white,1 );

draw_background( bgGradNegro, 0,0 );
[/gml]
El resultado es este

Adjunto el editable

El grado de desenfoque y la cantidad de oscuridad se puede modificar cambiando los degradados, usando más supeficies o dibujando con diferentes niveles de opacidad. Además en Limbo parece que hay una capa extra de ruido, para tener ese efecto granulado.





Genial, es lo que andaba necesitando.. Muchas gracias!

Aunque, no habrá manera de reemplazar..

Citardraw_background( bg0, 0,0 );

por una función que dibuje lo que se muestra en pantalla en lugar de una imagen fija? Probé de varias formas, incluso con "background_create_from_screen" y "background_create_from_surface"  y lo me muestra todo muy oscuro o me sale es este error..

CitarERROR in
action number 1
of Create Event
for object obj_bloom:

Trying to draw non-existing background.

:(
7
Preguntas y respuestas / ¿Efecto desenfoque radial?
Marzo 17, 2016, 10:10:12 PM
Hola nuevamente!

Tengo un problemita. Es que quisiera saber como podría hacer para lograr un efecto de desenfoque alrededor del personaje, como simulando su campo de visión.


Para dar un ejemplo, como tiene el juego LIMBO (no en el fondo, sino alrededor de la view sería). Si lo han jugado lo entenderán sin problemas..




Que se centra el personaje y se mueve con el.

He buscado y solo encuentro efectos de pantalla completa o para simular un efecto de velocidad.. Y no me sirven  :-X


Y bueno, ese es el asunto.. Gracias de antemano  :-[
8
Cita de: Guacusio en Octubre 19, 2015, 05:32:41 AM
Suponiendo que existe un eje vertical que representa la coordenada x donde ambos se encontrarían si se acercaran, puedes poner en el evento step del objeto B lo siguiente:

x=-objetoA.x+2*eje;

donde eje es la coordenada x donde ambos se encontrarían si se acercaran.


Aaahh.. Ya, ahora si. Gracias.
9
Hola!

Tengo una pequeña duda.. como podría hacer para que un objeto se mueva en dirección contraria (en el eje X) respecto a otro?

Es decir, supongan, muevo el "objeto A" hacia la izquierda progresivamente y el "objeto B" lo hace hacia la derecha a la par y lo mismo en dirección contraria..

Espero explicarme bien. Gracias
10
CitarNo alcanzo a entender a qué te refieres por el objeto reflejado en el fondo

Es por lo que dijo [user]Clamud[/user]..


Con ese ejemplo de [user]penumbra[/user] pude lograr el reflejo utilizando el marco y el espejo como elementos separados..

Lo que no logro es como lograr un desenfoque al final del sprite, algo de "blur". Ya con eso quedaría ideal.

He probado usar las funciones de "draw_set_blend_mode" , pero tiende a quedarme un marco blanco alrededor del sprite del personaje y con otros valores no se ve.. o el marco se hace negro..

Esto tiene muchas partes, pero ya casi lo consigo u.u
11
Cita de: Clamud en Octubre 08, 2015, 02:51:33 AM
En ese caso, lo que se debe hacer es dibujar un sprite que muestre al personaje visto desde un ángulo diferente.
Lo primero es dibujar al personaje como se ve en el espejo.
Después crear un objeto que imite los movimientos del personaje, pero con sprites diferentes, las relaciones entre sprites se podrían almacenar en arreglos o en ds_maps. El objeto reflejo debe tener una posición ligeramente desplazada respecto al objeto principal, podría ser un poco a la izquierda o a la derecha.

Por último, el marco del espejo debe recortar el sprite reflejo, para esto se me ocurren dos formas:

La primera es hacer que el espejo sea un hoyo (un sprite o tile con tranparencia) y dibujar el objeto reflejo en el fondo, de modo que sólo una parte sea visible al pasar por el hueco que es el espejo

La segunda es hacer que el espejo dibuje una "surface" en la que se recorte el objeto reflejo, el procedimiento sería así: crear una surface con el tamaño del espejo, obtener la posición relativa entre el personaje y el espejo, dibujar (en la surface) el objeto reflejo con la posición relativa calculada previamente, cambiar el "blend mode" y dibujar una máscara de recorte con la forma del espejo, regresar el "blend mode" a la normalidad y dibujar la surface en la posición del espejo.

Adjunto un ejemplo de recorte con surface. Para obtener mejores resultados, la máscara de recorte debe ser de color blanco para las áreas que se desean conservar y trasparente para las partes que se desean borrar.

Como se podría dibujar el objeto reflejado en el fondo exactamente? Es que no estoy muy acostumbrado aún a las "surface"
12
Ya lo resolví hasta el punto de lograr el reflejo. Utilizé esto como ejemplo inicial, aunque le cambie muchas cosas:

http://sandbox.yoyogames.com/games/167083-water-reflection-engine


Logré un objeto que dibuja el reflejo con lo siguiente..

//Draw Event

draw_sprite_ext(obj_player.sprite_index,-1,obj_player.x+4,obj_player.y-2,1,1,0,c_white,0.5);



Pero no logro hacer que solo se dibuje por el espejo :S Es decir, si puedo usando el "position_meeting". Pero solo queda muy centrado y se ve por los bordes inferiores..

13
Cita de: penumbra en Octubre 07, 2015, 06:04:59 AM
Por supuesto que es posible y relativamente sencillo, pues sólo es cuestión de dibujar un sprite (o surface) en una zona de la pantalla y en GML hay más de una función que hace eso sin complicaciones.

Es difícil prestar ayuda cuando no se dan detalles exactos: No se sabe de que tamaño es el espejo, en qué posición está, a qué altura del suelo, su orientación, si va a reflejar total o parcialmente el sprite del personaje, etc.

De acuerdo, aquí tienes una captura frente al espejo. Sirve?

14
Hola!

Bueno, he buscado y no he encontrado ninguna solución satisfactoria sobre como crear un reflejo 2D de un personaje de plataforma, lo que quiero lograr es que al pasar frente al espejo simplemente se refleje.

He leído que puede hacerse simplemente redibujando el sprite al pasar por enfrente del objeto espejado, pero muchos se concentran más en reflejo del agua o vidrios HD en GM:S. Y yo necesito saber para Game Maker 8.1, si es posible..


Así que si me pueden prestar una ayudita sería grandioso. Gracias!  :P
15
Preguntas y respuestas / Re:¿Pausar animación Sprite?
Octubre 01, 2015, 10:04:43 AM
Cita de: p34 en Octubre 01, 2015, 09:02:29 AM
Puedes hacer una variable que empiece en 0 y la aumentas en 1 cada step y en lugar de dibujar el -1, dibujas la subimagen con ese contador, y una condición para que cuando llegue a la subimagen final ya no aumente el contador.


if position_meeting(obj_player.x+10,obj_player.y, obj_dooralter1)
{
  if(contador<10) contador++;
  draw_sprite(spr_curiosity,contador,obj_player.x+10,obj_player.y-5);
}


igual y reinicias el contador al final para que la proxima vez vuelva a empezar desde la primer subimagen.



El problema ahí es, que creo que sería más trabajo a largo plazo según cada objeto que le llame la atención, creo que lo dejaré hasta ahí por ahora. Talvez con un objeto que siga al personaje y dibuje la animación en base a una variable global podría ser más práctico.

Igual gracias!
:P