• Advertisement
Sign in to follow this  

[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.

If you intended to correct an error in the post then please contact us.

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>

Share this post


Link to post
Share on other sites
Advertisement
Sign in to follow this  

  • Advertisement