Sign in to follow this  
sega16

Tile path following algorithm

Recommended Posts

sega16    127
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.
[code]
direction=path[((x>>bloon_fract_bits)/tile_size_px)+(((y>>bloon_fract_bits)/tile_size_px)*11)];
[/code]
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.

[img]http://imageshack.us/a/img706/9938/leveleditor.png[/img]
The incorrect path being taken
[img]http://imageshack.us/a/img16/4214/pathissue.png[/img]
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
Endurion    5408
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

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this