View more

View more

View more

### Image of the Day Submit

IOTD | Top Screenshots

### The latest, straight to your Inbox.

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

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

No replies to this topic

### #1FantasyVII  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 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>

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.