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.

# Tile path following algorithm

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.

2 replies to this topic

### #1sega16  Members

Posted 29 September 2012 - 09:22 PM

Hello everyone. I am having some issues with my path following algorithm the enemys are supposed to follow a path that I set in the level editor. I know the path is being correctly set I can verify that. The issue is that lets say the enemy is on pixel 64 and each tile is 64 pixels the enemy is moving to the left the next tile over is to move down. The enemy moves left by lets say 2 pixels. As soon as it moves to pixel 62 the enemy will move down. I am fully aware of how integer math works 62/64=0. At first I was able to use modules and just do if (x%64 == 0 && y%64 == ) then change the direction but I was limited to speeds that are a factor of 64 and I could not work with that maily becuase my code varies the enemy speed based on frames per second and I would like more control over speed. Here is the code I used to get the direction I removed the module checks after I added the code to move based on pixels per millosecond instead of pixels per frame As the enemys would go off the path even worse due to the fact that the direction would never change.
direction=path[((x>>bloon_fract_bits)/tile_size_px)+(((y>>bloon_fract_bits)/tile_size_px)*11)];

Also just to give a heads up the bitshifts are because I am using fixed point math for the enemy speed and the array path is uchar array that is 88 bytes my level is 11x8 tiles and the tiles are 64 pixels each
Here are some pictures
The correct path in the level editor:
Click on image for full size on my computer it resizes the pictures ~99% and makes them look blurry it is not your vision.

The incorrect path being taken

If anybody has a good algorithm to correctly follow the path it would help me alot thank you for reading this

Edited by sega16, 29 September 2012 - 09:33 PM.

### #2Endurion  Members

Posted 29 September 2012 - 10:51 PM

It looks like your current method brings some inprecision. Keep the precision intact.

Pseudocode:

while ( number_of_pixels_to_move > 0 )
{
if ( number_of_pixels_to_move >= pixels_left_to_move_on_one_tile )
{
// arrive at a tile
number_of_pixels_to_move -= pixels_left_to_move_on_one_tile;
move pixels_left_to_move_on_one_tile pixels in move direction
adjust direction according to tile below
}
else
{
// move object number_of_pixels_to_move pixels in move direction
number_of_pixels_to_move = 0;
}
}

Edit: The dumb editor keeps screwing up indentation

Edited by Endurion, 29 September 2012 - 10:53 PM.

Fruny: Ftagn! Ia! Ia! std::time_put_byname! Mglui naflftagn std::codecvt eY'ha-nthlei!,char,mbstate_t>

### #3sega16  Members

Posted 30 September 2012 - 11:29 AM

Thank you I see what to do now I knew it was simple I guess I was suffering from programmer's block.

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.