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