
03-30-2005, 02:44 PM
|
|
Script Monkey
|
 |
Join Date: May 2001
Posts: 18,222
|
|
Vector-Based Collision
|
Onwall2 is more or less sufficient for the simple movement of player characters, since they tend to travel at consistent speeds and they can be considered rectangular. However, it is pretty lacking for many other types of collision detection. Rotatable objects are a pretty good example: Rotate a square by thirty degrees and then fire it in an arbitrary direction. Odds are it won't be easy to write fast, reliable code to find out what it'll hit first.
It would be nice, then, to have a function like this:
vectorcollision({line1},{line2},time)
The two lines represent the start and end state of a single vector. It changes linearly from one to the other over a specified time (in most cases we would pass 0.05). The engine examines the path of this vector and determines if/when it will first collide with a blocking object. Then it returns the coordinates and relative time of that collision (we can return arrays, right?).
Alternatively,
vectorcollision({line},dx,dy,drotation,speed)
dx,dy give the velocity of the centre of the line. drotation gives its rate of spin (adjusted to be consistent with the velocity). Again, the engine figures out when and where the lines collides with something and returns its prediction. |
__________________
|
|
|
|