Jump to content

  • Log In with Google      Sign In   
  • Create Account

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

Like
0Likes
Like

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:-
http://www.youtube.com/watch?v=Q4OBCHN5dQA

And here video that show how the enemy get stuck and doesn't move if speed is more than 5:-
http://www.youtube.com/watch?v=pFQvll723YY

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>


Sponsor:



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.



PARTNERS