Jump to content

  • Log In with Google      Sign In   
  • Create Account


#ActualFantasyVII

Posted 02 October 2012 - 10:48 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>

#1FantasyVII

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)
	    {
		    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);
	    }


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>

PARTNERS