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

Re: [pygame] trajectory



In most (but maybe not all) tower defense games I have ever played, 
bullets *can* change direction in flight, and do behave like homing 
missles. This isn't obvious visually if the bullets are fast, but it is 
pretty common in tower defense games that if a target is in range when 
the bullet is launched that it will always hit the target no matter how 
it moves.

That being said, I don't have any idea if Nathan Biagini wants to make 
his own tower defense game work that way or not :)

---
James Paige


On Fri, Jul 22, 2011 at 08:24:51AM -0700, Lee Buckingham wrote:
>    Unless the bullet can change direction in flight, it will have to choose
>    one, and only one spot to aim for, and therefore, one vector to guide it. 
>    Homing missiles are a lot different to code for, since they have to adjust
>    course, and potentially deal with a synthesized form of inertia.  
> 
>    A bifurcating tree of solutions seems to suggest looking at all possible
>    'likely' positions for the target in the future.  That's not so much
>    vector math as it is statistics and player-psychology.
> 
>    You also probably don't want to deal with linear solutions to this
>    problem, unless you really really need pinpoint accuracy on each shot
>    (again, assuming NOTHING changes direction or speed after a shot is fired,
>    which makes all that accuracy useless anyway).  Breaking it up into steps
>    that are a little smaller than the clipping rectangles involved will
>    probably get you more than close enough.  Furthermore, there will be a
>    different solution to the linear form of the problem for every firing
>    angle (wide angles intercept later, etc...) It would get pretty ugly.
> 
>    It might suit better to 'fudge' in a calculation.  Make an estimated
>    change (just add a constant or something) to the current position of the
>    target, based on it's speed and direction, and fire at that position. 
>    Divide the x and y distance to the target each by the speed of your bullet
>    (you don't even NEED to do the trigonometry for speed calculations, the
>    player wouldn't notice much anyway) and make the bullet move that much in
>    the x and y directions each tick.  Try it out... are your shots firing too
>    far ahead?  Too far behind??   Change the estimation constant a little bit
>    and try again.  If the target is in close, you might have to reduce the
>    estimate a bit, etc...   You can probably tweak this one enough to have a
>    very satisfying "firing computer" without having to go through the hassle
>    of reading the physics chapter on ballistics.
> 
>    Just a few ideas...
> 
>    -Lee-
> 
>    On Fri, Jul 22, 2011 at 7:21 AM, Joe Ranalli <jranalli@xxxxxxxxx> wrote:
> 
>      I'm not totally clear on what you're asking.  If you're saying that the
>      targets might change direction after the bullet is fired, but you still
>      want the bullet to hit the target, then my second algorithm wouldn't
>      work.  That just doesn't make any sense.  The algorithm I suggested aims
>      at the target, then shoots at it.  If the target changes direction, then
>      it will no longer go to the spot you were aiming.
> 
>      If you're having this much trouble figuring this out I would definitely
>      suggest you take some time to sit down and think about what it is you're
>      trying to do and maybe read about some simple physics.  This part of the
>      application really shouldn't be that difficult to figure out.
> 
>      On Fri, Jul 22, 2011 at 9:08 AM, Nathan BIAGINI <nathan.open@xxxxxxxxx>
>      wrote:
> 
>        Hi. Thanks all for you replies i have one more question before trying
>        to write something on top of that, your algorithme Joe, does it works
>        if the way has some bifurcations, i mean, a fully linear way but that
>        contain bifurcations.
> 
>        Thanks.
> 
>        2011/7/20 Joe Ranalli <jranalli@xxxxxxxxx>
> 
>          It depends what you're trying to do. 
> 
>          If you draw the straight line between the tower and the enemy and
>          use that vector to translate a bullet each tick, the bullets might
>          miss the enemy.  Think about it this way, the bullet moves 2 steps
>          toward the enemy, then the enemy moves 1 step, then the bullet moves
>          2, etc.  Because the enemy moves the bullet will have to change its
>          direction through the flight.  So you could calculate the direction
>          vector between the bullet and the enemy every tick and have the
>          bullet move that direction.  That would make the bullets kind of arc
>          to the target.
> 
>          If you want to have the bullet go straight to the right spot, you
>          need to:
>          1) calculate how long the bullet will take to get to the enemy
>          2) calculate where the enemy will be at that time (newposition)
>          3) calculate how long it will take the bullet to get to newposition
>          4) recalculate newposition based on the new time
> 
>          Technically you could iterate that repeatedly until newposition
>          converges.  Practically, iterating once probably gets you close
>          enough unless the movement is extremely complicated.
> 
>          On Wed, Jul 20, 2011 at 9:14 AM, Nathan BIAGINI
>          <nathan.open@xxxxxxxxx> wrote:
> 
>            Hi everyone,
> 
>            i would like to know what are the common way to handle
>            "trajectory" in a 2d game. In fact, i think of writing a tower
>            defense game and i wonder how to handle the trajectory of the
>            missile launch by the towers. I though of getting the pos of the
>            tower and the target and create a vector between this two
>            entitites to make a sprite translation of this vector but there is
>            maybe some tricky stuff to do it.
> 
>            Thanks in advance and happy game making all :-)