# [Solved] Simple Waypoint problem

This topic is 1937 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

## Recommended Posts

Hello everyone,

So I have a class called Enemy and I set a series or way point and the enemy follow the way points and move accordingly.

the problem is if the enemy movment speed is more than 5 the enemy doesn't move and get stuck and only move backward and forward. However if the speed is 4 or less the enemy moves with no problems at all.

I just want to know why does the enemy get stuck if the speed is more than 5?

Here is a video that show if speed is less than or equal 4 it works:-
[media]
[/media]

And here video that show how the enemy get stuck and doesn't move if speed is more than 5:-
[media]
[/media]

thank you all

 class Enemy { int WayPointIndex; double Length; float Speed; Vector2 Position; Vector2 Direction; Texture2D EnemyTexture; Rectangle EnemyRec; //Way points list public static List<Vector2> EnemyPath = new List<Vector2>(); public Enemy() { WayPointIndex = 0; Length = 0; Position.X = 31; //if position X == 32 the enemy doesn't show up !!! just set it to 31 for now Speed = 4; } // Load the way points from XML file and add them to EnemyPath list. void LoadEnemyWaypointXML() { XmlReader Reader = XmlReader.Create("D:/EnemyWaypoint.xml"); while (Reader.Read()) { if (Reader.NodeType == XmlNodeType.Element && Reader.Name == "WayPoint") { EnemyPath.Add(new Vector2(int.Parse(Reader.GetAttribute(0)), int.Parse(Reader.GetAttribute(1)))); } } } public void LoadContent(ContentManager Content) { LoadEnemyWaypointXML(); EnemyTexture = Content.Load<Texture2D>("Tiles/Enemy"); } void Movment() { // Calculate direction vector Direction.X = EnemyPath[WayPointIndex].X - Position.X; Direction.Y = EnemyPath[WayPointIndex].Y - Position.Y; // Normalize direction vector to unit length Length = Math.Sqrt(Direction.X * Direction.X + Direction.Y * Direction.Y); Direction.X /= (float)Length; Direction.Y /= (float)Length; // Apply movement vector to move Position.X += Direction.X * Speed; Position.Y += Direction.Y * Speed; if (Length <= 1) WayPointIndex++; } public void Update() { Movment(); } public void Draw(SpriteBatch spriteBatch) { spriteBatch.Draw(EnemyTexture, Position + ScreenScrolling.ScreenOffset, Color.White); } 

Solution is I had to change this line of code in Movment():-

 if (Length <= 1) WayPointIndex++; 

To

 if (Length <= speed) WayPointIndex++; 

Way point XML file
 <?xml version="1.0" encoding="utf-8"?> <Enemy_Waypoints> <WayPoint X="32" Y="0" /> <WayPoint X="32" Y="32" /> <WayPoint X="32" Y="64" /> <WayPoint X="32" Y="96" /> <WayPoint X="32" Y="128" /> <WayPoint X="32" Y="160" /> <WayPoint X="64" Y="160" /> <WayPoint X="96" Y="160" /> <WayPoint X="128" Y="160" /> <WayPoint X="160" Y="160" /> <WayPoint X="192" Y="160" /> <WayPoint X="224" Y="160" /> <WayPoint X="256" Y="160" /> <WayPoint X="288" Y="160" /> <WayPoint X="288" Y="128" /> <WayPoint X="288" Y="96" /> <WayPoint X="288" Y="64" /> <WayPoint X="288" Y="32" /> <WayPoint X="320" Y="32" /> <WayPoint X="352" Y="32" /> <WayPoint X="384" Y="32" /> <WayPoint X="384" Y="64" /> <WayPoint X="384" Y="96" /> <WayPoint X="384" Y="128" /> <WayPoint X="384" Y="160" /> <WayPoint X="384" Y="192" /> <WayPoint X="384" Y="224" /> <WayPoint X="384" Y="256" /> <WayPoint X="384" Y="288" /> <WayPoint X="352" Y="288" /> <WayPoint X="320" Y="288" /> <WayPoint X="288" Y="288" /> <WayPoint X="256" Y="288" /> <WayPoint X="224" Y="288" /> <WayPoint X="192" Y="288" /> <WayPoint X="160" Y="288" /> <WayPoint X="128" Y="288" /> <WayPoint X="128" Y="320" /> <WayPoint X="128" Y="352" /> <WayPoint X="128" Y="384" /> <WayPoint X="128" Y="416" /> <WayPoint X="128" Y="448" /> <WayPoint X="160" Y="448" /> <WayPoint X="192" Y="448" /> <WayPoint X="224" Y="448" /> <WayPoint X="256" Y="448" /> <WayPoint X="288" Y="448" /> <WayPoint X="320" Y="448" /> <WayPoint X="352" Y="448" /> <WayPoint X="384" Y="448" /> <WayPoint X="416" Y="448" /> <WayPoint X="448" Y="448" /> <WayPoint X="480" Y="448" /> <WayPoint X="512" Y="448" /> <WayPoint X="544" Y="448" /> <WayPoint X="544" Y="416" /> <WayPoint X="544" Y="384" /> <WayPoint X="544" Y="352" /> <WayPoint X="544" Y="320" /> <WayPoint X="544" Y="288" /> <WayPoint X="544" Y="256" /> <WayPoint X="544" Y="224" /> <WayPoint X="544" Y="192" /> <WayPoint X="544" Y="160" /> <WayPoint X="544" Y="128" /> <WayPoint X="544" Y="96" /> <WayPoint X="544" Y="64" /> <WayPoint X="576" Y="64" /> <WayPoint X="608" Y="64" /> <WayPoint X="640" Y="64" /> <WayPoint X="672" Y="64" /> <WayPoint X="704" Y="64" /> <WayPoint X="736" Y="64" /> <WayPoint X="736" Y="96" /> <WayPoint X="736" Y="128" /> <WayPoint X="736" Y="160" /> <WayPoint X="736" Y="192" /> <WayPoint X="704" Y="192" /> <WayPoint X="672" Y="192" /> <WayPoint X="640" Y="192" /> <WayPoint X="640" Y="224" /> <WayPoint X="640" Y="256" /> <WayPoint X="640" Y="288" /> <WayPoint X="640" Y="320" /> <WayPoint X="640" Y="352" /> <WayPoint X="640" Y="384" /> <WayPoint X="640" Y="416" /> <WayPoint X="640" Y="448" /> <WayPoint X="672" Y="448" /> <WayPoint X="704" Y="448" /> <WayPoint X="736" Y="448" /> <WayPoint X="768" Y="448" /> </Enemy_Waypoints>