Jump to content
  • Advertisement
Sign in to follow this  
sega16

Tile path following algorithm

This topic is 2212 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. 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.

leveleditor.png
The incorrect path being taken
pathissue.png
If anybody has a good algorithm to correctly follow the path it would help me alot thank you for reading this Edited by sega16

Share this post


Link to post
Share on other sites
Advertisement
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

Share this post


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

  • Advertisement
×

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

We are the game development community.

Whether you are an indie, hobbyist, AAA developer, or just trying to learn, GameDev.net is the place for you to learn, share, and connect with the games industry. Learn more About Us or sign up!

Sign me up!