¿Por qué mi personaje se desplaza fuera de la pantalla en lugar de permanecer dentro de los límites de la pantalla?

En mi juego XNA, tengo mi "gran jefe" cargado y en la pantalla del juego. Puse el código para actualizar su position en el método de Update de la class principal.

El objective es hacer que el "gran jefe" se mueva desde el lado derecho de la pantalla hacia la izquierda. Pero, en cambio, se mueve fuera de la pantalla y no retrocederá nuevamente.

Aquí está mi código en el método de Update :

 public void UpdateBigBoss() { // make the updateBigBoss boss move from r to l // and l to r // next, take count the collision, // by increasing the hit counts by 1 // when hit counts reach to 10 // make the big boss alive to false (mean disappear) // position of the paddle - start motion = Vector2.Zero; if (score > 200) { motion.X = 1; } motion.X *= BigBossSpeed; BigBoss.position += motion; } 

 public void UpdateBigBoss() { motion = Vector2.Zero; // make the updateBigBoss boss move from r to l // and l to r motion.X += dir; if(BigBoss.position.X >r || BigBoss.position.X< l){ var at = BigBoss.position.x BigBoss.position.X = Math.max(l,Math.min(r,at)); dir *= -1; } // next, take count the collision, // by increasing the hit counts by 1 if(BigBoss.isCollided) hitCount++; // when hit counts reach to 10 // make the big boss alive to false (mean disappear) if(hitCount>=10)BigBoss.alive = false; // position of the paddle - start // if (score > 200)motion.X = 1; motion.X *= BigBossSpeed; BigBoss.position += motion; } 

Su código solo le indica al personaje jefe que se mueva en una dirección, para siempre.

Establece el componente X del vector de movimiento en 1 cuando el puntaje es mayor que 200, y luego incrementa la position del jefe en ese valor. Nunca intenta verificar si la position del jefe después de incrementar está dentro de un umbral apropiado de los límites del mundo y, si es así, establecer algún estado para moverlo en la dirección opuesta.

Una forma simple de hacer esto sería comprobar si bigboss.position.X + bigboss.size.Width >= RightEdgeOfScreen y, si es así, configure motion.X para que sea -1. Haga lo mismo para el borde opuesto de la pantalla.