Junio 27, 2017, 07:10:38 AM Ultima modificación: Junio 27, 2017, 08:35:40 AM por Sergio Luis
Hola a todos! hoy recurro a este gran foro porque he tenido un problema creando un codigo perdonenme si me estoy refiriendo a esto de manera extraña xd un codigo de solo una linea en verdad que debe ser sencillo que lo unico que deberia hacer es que un background se mueva en dirección opuesta al jugador exactamente a la misma velocidad. Mi objeto jugador tiene una variable que se encarga de medir su velocidad horizontal y yo lo que he hecho es poner esto:

background_hspeed[0] = - obj_jugador_01.intVX; (obviamente intVX es la variable)

según yo esto deveria funcionar a la perfección pero no es asi  :-X ese pequeño codigo pertenece a un objeto control que como no se explicar bien dejare todo su codigo:

///Gestión de habitaciones

switch (room)
{
   case rom_titulo:
    instance_create (0,0, obj_efecto_transicion);
   break
   
   case rom_menu_opciones:
    instance_create (0,0, obj_efecto_transicion);
   break
   
   case rom_nivel_01:
    instance_create (0,0, obj_efecto_transicion);
    background_hspeed[1] = - 0.2;
    background_hspeed[2] = - 0.4;
    background_hspeed[0] = - obj_jugador_01.intVX;
   break
   
   case rom_seleccion_nivel_01:
    instance_create (0,0, obj_efecto_transicion);
   break
   
   default:
   break;
}


todos los casos en ese switch funcionan a la perfección el unico que no he logrado hacer que funcione es el que ha hecho que les pida ayuda.

PD: Perdon si no me he sabido explicar o expresar, es que soy aun muy novato en game maker y tampoco estoy acostumbrado a pedir ayuda en foros  XD

Saludos!!

Acabo de probar en mi proyecto cambiando solo nombre de objeto y variable y funciona.

Dudas:

En qué evento (Create, Step, etc) tienes escrito esa línea?
Qué valor/valores obtienes con show_debug_message(intVX)?
El background está marcado como "visible when rooms starts"?


¡Muchas gracias por ayudarme!

En respuesta a las dudas:

En qué evento (Create, Step, etc) tienes escrito esa línea?
R= Las líneas de codigo estan en un evento Other >> Room Start

Qué valor/valores obtienes con show_debug_message(intVX)?
R= El valor a sido 0 creo que ya tengo una noción de lo que ocurre, más no he dicho que no me ayudes  XD

El background está marcado como "visible when rooms starts"?
R= El background si está marcado como "visible when rooms starts"

EDIT: Si de repente has visto un mensaje que se borro o alguna otra incoherencia es por que como ya sabes soy nuevo en el foro y he terminado haciendo un disparate  :-[






Gracias a ti ya lo he solucionado ;D

Solo tuve que cortar la línea de codigo que no funcionaba, crear un evento step y poner esto:

if (room) == rom_nivel_01
{
   background_hspeed[0] = - obj_jugador_01.intVX;
}


Muchas garacias por todo! si conoces una mejor manera de hacerlo no dudes en decirmelo!

Saludos!

#4 Junio 27, 2017, 11:31:09 AM Ultima modificación: Junio 27, 2017, 11:33:00 AM por SarTaeL
Muy contento de que hayas podido solucionarlo y bienvenido al foro!!

Por añadir más información al caso te diré que el evento Room Start se ejecuta solo 1 vez de manera que al tener ahí el código sí se estaba ejecutando pero 1/30 de segundo. Como es tan rápido tu personaje tendría movimiento 0 (al menos horizontal) y no se movía el fondo.

Efectivamente al colocar cualquier código en el evento Step le estamos diciendo que lo ejecute 30 veces por segundo (que a nuestros ojos es todo el rato) con lo cual sí puedes notar movimiento.

Si efectivamente lo que quieres es que el fondo se mueva según el movimiento de tu personaje, ese código está bien donde y cómo está (evento Step) y tampoco me viene a la cabeza una mejor manera de reducir el gasto de memoria, que al ser una línea de contenido tan sencillo, será ínfimo.

Para terminar, y, por si acaso no lo conoces, échale un ojo al "efecto parallax" que es muy parecido a lo que estás buscando y suele quedar muy bien en ese tipo de situaciones. Saludos!