Jump to content

View more

Image of the Day

Working on an auto spawn system. #gamedev #indiedev #screenshotsaturday https://t.co/Mm2kfekz7b
IOTD | Top Screenshots

The latest, straight to your Inbox.

Subscribe to GameDev.net Direct to receive the latest updates and exclusive content.

Sign up now

[Solved] Simple Waypoint problem

4: Adsense

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   


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.