![]() |
findPath()
1 Attachment(s)
I never planned on sharing this with anyone when I made it a while back, but since you asked....
I strongly suggest you read this tutorial which helped me understand A* pathfinding. I must have read it at least 5 times myself while coding this. There's also several suggestions on how you can help speed up your pathfinding. findPath(cx, cy, tx, ty, cutCorners, fullPath); -- returns an array of nodes (tiles) from one tile to another
Source: Attachment 49606 It's not commented very well...I added what I could quickly before posting. It actually wasn't commented at all until today, so if you have any questions just ask. For example, PHP Code:
Important note: This function assumes that the object you are finding a path for is only 1 tile big (16x16 pixels). However, it shouldn't be hard to modify the onwall checks for bigger objects such as a player. I might add another parameter for the size of the object in the future, but I don't have the time right now. Tips for improving speed:
|
You so pro !
|
I was waiting for you to click on an area that was inaccessible, to see it explode.
|
Quote:
Here's a little level sweepage, 3015 valid locations. As you can see, the area inside the table was not highlighted because it is not valid. |
Quote:
|
wow nice
|
1 Attachment(s)
I edited your script so that use takes an offset x/y and width/height for wall checking.
The function parameters now goes as this: findPath(cx, cy, offSet, blockSize, tx, ty, cutCorners, fullPath) Where offSet and blockSize are two-member arrays. It's not perfect, but it does work pretty well. |
I would much prefer if a path is not found the characters head exploded.
|
Oh, I also forgot to mention that I changed the h-score equation to a revised manhattan equation that takes diagonal movement into account. The equation favors diagonal movement.
|
Quote:
On another random note, I found a* algorithms start to go real bad once you're above the 64*64 tile range.... implement a method to work with a node based system? =D (i'm way too lazy) |
Quote:
Quote:
Diagonal movement "costs" 14 and horizontal/vertical was 10 (1,1,sqrt(2) triangle)...and with A* that would make moving to a diaganol node less favorable because it's considered to be a longer distance. However, if taking a diaganol path will get you to the final location quicker, it still will to a certain extent. Keep in mind this searches tile-by tile, and doesn't take into account that a straight line to the target might be the quickest approach (like if there's no walls)...might be something else you could add. |
Quote:
|
Quote:
|
Bumping this thread a bit...
I've tried several times to have a larger wall checking area than 1x1 and have absolutely no luck. I'm wondering if you've had any luck doing this, Salesman? |
Quote:
I'm supposed to be cramming for an exam right now...serious ADD...but I'll try to maybe show an example of larger nodes tomorrow or this weekend. |
All times are GMT +2. The time now is 03:01 AM. |
Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2025, vBulletin Solutions Inc.
Copyright (C) 1998-2019 Toonslab All Rights Reserved.