Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: Yoo en Junio 24, 2015, 12:09:37 AM

Título: [AYUDA!] IMAGE_?SCALE
Publicado por: Yoo en Junio 24, 2015, 12:09:37 AM
En un juego que estoy haciendo(24x24) tengo el siguiente problema:
1. Quiero ahorrar el máximo de espacio y me enteré que con image_xscale podia hacer un efecto "espejo" y ya no tener que hacer dos sprites derecha e izquierda.
PERO AL PONERLO EN USO, la imagen se voltea y cambia de posiciòn(creo q es porq el cursor NO esta en el medio), y además de eso la mask se distorsiona, no es precisa.
NOTA: No pongo el cursor en el medio porq en mi juego necesito especialmente funciones con la grid.
NOTA2: Probé con DRAW y funciona parcialmente pero me parece que el evento DRAW CREO que usa mucho espacio.

AYUDAAAAAA
¿No hay otra manera? ¡La MASK no me da colisiones buenas y el sprite se cambia de posición!!!!

EL PRIMERO ES EL PLAYER Y EL SEGUNDO LA MASK:
Título: Re:[AYUDA!] IMAGE_?SCALE
Publicado por: penumbra en Junio 24, 2015, 12:38:44 AM
El evento draw no usa mucho espacio. El rendimiento de un evento no se mide por cantidad de espacio usado.

He visto que no pocos usuarios tienen la idea de que esta prohibido usar DRAW. DRAW es generalmente el evento que más recursos consume, al menos el que más demanda al procesador, pero por lo general esa es la naturaleza del dibujo en pantalla, se trata de un proceso demandante con el que hay que tener cuidado sea en GM o en otra suite de desarrollo.

Esto no quiere decir que no se pueda usar código en DRAW. Usar código y funciones en DRAW es totalmente válido. La solución más simple es configurar el origen del sprite en el centro. Tener el origen centrado y usar funciones de grid es totalmente posible, no debería dar problemas am enos que hagas algo mal en el código.

Si no quieres usar image_xscale usa el evento draw para dibujar el sprite, esto no afectaría la máscara original. Por algo existen las funciones draw_. Si no fuera adecuado usarlas, YoYo ya las habría descartado.
Título: Re:[AYUDA!] IMAGE_?SCALE
Publicado por: Yoo en Junio 24, 2015, 02:39:41 PM
CREO QUE SOLUCIONE Eso de cambio de posición cuando el cursor esta en X:0 y Y:0.Aquí está:
PERO sigue fallando eso de las colisiones, en el example tambn están, en la colisión con el bloque, al estar en image_x_scale=-1 no da caolisión!!!! PORQUE SUCEDE?? alguien me explica que hace exactamente image_xscale??modifica la mask tambn???  XD :'( :-X

MOD:
Cita de: penumbra en Junio 24, 2015, 12:38:44 AMLa solución más simple es configurar el origen del sprite en el centro. Tener el origen centrado y usar funciones de grid es totalmente posible, no debería dar problemas am enos que hagas algo mal en el código.
RESPECTO A ESO quedaria así no? pERO Es que lo veo en desorden,  ??? Y todos los demas objects tambien los tengo en cursor al cero, tendria que centrar y volver a ordenar(ya lo hice una vez, pero no me parecia eficiente  XD)
Título: Re:[AYUDA!] IMAGE_?SCALE
Publicado por: Clamud en Junio 24, 2015, 03:26:06 PM
Si, image_*scale modifica la máscara de colisión al igual que image_angle (se menciona en el manual de GM8: Changing the scale also changes the values for the image width and height and influences collision events as you might expect.) En tu ejemplo has manejado bien la forma de posicionar el objeto al cambiar la escala, el problema es el funcionamiento de la acción "Align to grid", que mueve el origen de la instancia a el vértice más cercano sin tomar en cuenta la escala.

Si no te gustan los métodos que has usado, aún queda otra opción: Crea un sprite con la forma de la máscara de colisión (un simple rectángulo) y asígnalo al objeto, en el evento Create inicializa una variable que se usará en vez de image_xscale, por ejemplo filph, y en el evento draw dibuja el sprite del personaje:
[gml]
draw_sprite_ext( sprite,subimg, x+16,y+16, fliph,flipv, 0,c_white,1 );
//(el origen del sprite está en el centro)
[/gml]
Título: Re:[AYUDA!] IMAGE_?SCALE
Publicado por: Yoo en Junio 25, 2015, 03:00:36 PM
Ya lo hice, pero ahora la mask no funciona bien

YA FUNCIONA, solo tenia que poner el cursor al medio en los sprites y en 0 en la mask. ES PERFECTO!! GRACIAS!! ERES TODO UN MASTERGM!!