Jump to content

  • Log In with Google      Sign In   
  • Create Account

Interested in a FREE copy of HTML5 game maker Construct 2?

We'll be giving away three Personal Edition licences in next Tuesday's GDNet Direct email newsletter!

Sign up from the right-hand sidebar on our homepage and read Tuesday's newsletter for details!

We're also offering banner ads on our site from just $5! 1. Details HERE. 2. GDNet+ Subscriptions HERE. 3. Ad upload HERE.

[Solved] Simple Waypoint problem

Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.

  • You cannot reply to this topic
No replies to this topic

#1 FantasyVII   Members   -  Reputation: 299


Posted 02 October 2012 - 10:23 AM

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

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

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

		public void Update()

		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)


if (Length <= speed)

Way point XML file
<?xml version="1.0" encoding="utf-8"?>
  <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" />


Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.