[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]

Re: [pygame] Re: Keeping a sprite on screen with rect.clamp



If you're trying to plot curved paths in real-time...

This forward differencing algorithm is the fastest I've found to date: http://www.niksula.cs.hut.fi/~hkankaan/Homepages/bezierfast.html. Though it is only suitable for purposes where the curve does not have to touch all the control points.

And this recipe, mentioned by Ciro, makes a decent foundation for a Bezier editor: http://www.pygame.org/wiki/BezierCurve. For my purposes I modified it to use the forward differencing function, and print the control points on demand.

To use real-time curves in this manner I had to solve the same problem you mention, Mark, that the distance between points varies and results in unwanted sprite speed variations. I ended up tracking sub-pixel sprite position as a float, and advancing to the next curve point when the distance traversed meets or exceeds the distance between the current and next point.

Here's a recipe for calculating point-to-point distance: http://www.pygame.org/wiki/CalculateDist.

For straight lines I've successfully used vector math to move a sprite small distances each frame at an arbitrary angle. This is very efficient for motion along a vector, but floating point errors cause this method to be imprecise. If you're moving to a specific point your sprite will most often miss the point and end up orbiting it, which requires the addition of a terminal test case based, for example, on a distance calculation. Still, this is very efficient. It also requires some additional vector math to compute angles and points on a circumference. If there is an interest I'm willing to post a recipe for these.

Gumm

On Mon, Aug 16, 2010 at 11:01 PM, Mark Reed <markreed99@xxxxxxxxx> wrote:

Any path editors out there?

Mark