Hola, soy nuevo y estoy comenzando en la programación GML y en la programación en general y les querría preguntar, en general, como ir resolviendo los problemas que surgen al ir desarrollando un proyecto.

Me explico. Estoy intentando crear un juego al estilo Space Invaders, sin intentar crear nada nuevo, tan solo recrear el juego tal cual para ir cogiendo práctica. Pero, al poner el código que hace moverse a los marcianos, solo uno de ellos se queda en pantalla girando de derecha a izquierda (que de momento es lo único que he puesto en el código). Los otros 4 se van de la pantalla de juego y desaparecen.


A continuación les muestro el código que he utilizado:

Evento Create:
hspeed=10

Evento Step:
if x=550
{
hspeed=-10
}
if x=0
{
hspeed=10
}

Y aquí esta el problema. ¿Cómo dar solución a un problema tan aparentemente absurdo?

Existe la posibilidad de que esta condición "x=550" no se cumpla; por ejemplo, si el marciano está en la coordenada 545 y se desplaza 10 pixeles a la derecha, entonces quedaría en la coordenada 555, por lo que la condición no se cumple (Y no regresaría a la izquierda) y seguiría avanzando a la derecha.

Hay formas de ser más específico, pero algo simple con lo que puedes empezar sería cambiando con una condición no tan "absoluta", por ejemplo
if(x>=550)

De acuerdo. Con esta respuesta me das la solución al problema que planteé. Pero (por poner otro ejemplo), lo que sucede ahora es que los marcianos van a distintas velocidades, y se superponen y adelantan.

Me he leído el manual de game maker, pero para un principiante como yo, no creo que sirva como única guía, porque expone el contenido de GM. No responde preguntas concretas.

Así que mi cuestión es, que hago para solucionar estos problemas que van surgiendo, si no sé lo que está sucediendo con certeza en el juego. ¿Qué sugieren, o que hacen con sus propios proyectos?
Para dejarlo claro, para evitar recurrir a preguntar cada vez que me atasco.


Gracias de todos modos por sus respuestas.

Me imagino que quieres hacer que todos los enemigos que están en la misma fila se muevan juntos. Primero tienes que entender bien lo que es un objeto y lo que es una instancia. Si una instancia toca el borde de la pantalla, debe decirle a otras instancias que tienen el mismo valor en la variable y que cambien de dirección. Se puede hacer así:
[gml]
//Evento Step o End Step

avisar = false; //no avisar a los compañeros

if( x >= 550 ){
   hspeed = -10;
   avisar = true;
}
if( x <= 0 ){
   hspeed = 10;
   avisar = true;
}

if( avisar ) //si ha tocado el borde es necesario avisar
with( obj_marciano ){ //con todos los compañeros
   if( y == other.y ) //si tienen la misma altura
      hspeed = other.hspeed; //asignar la misma velocidad
}
[/gml]

Lo mejor que puedes hacer ahora es preguntar y seguir tutoriales, también es importante leer el manual. Al tener más experiencia podrás resolver los problemas tu solo.

Gracias por responder.

Ahora haré una pregunta más especifica.
¿Me podríais poner vuestro propio ejemplo? Me refiero, descubristeis este programa y que hicisteis. ¿Buscar tutoriales y seguirlos al pié de la letra? ¿Crear un proyecto e ir resolviendo los problemas que van surgiendo, uno por uno.
¿Cómo han aprendido a manejar GM? ¿Qué me recomiendan?





Yo aprendi por mi cuenta, a veces uno hace uso de tutoriales o ejemplos que hay aquí en la comunidad. Pero de lo que mas e hechado mano es de... La imaginación