should i use MeshesIntersect to see which car crosses the finish line/check point in my racing game or is there a better way? im using jv-ode but i dont think you can have collisions just for triggering that alow object to pass though uneffected?
MeshesIntersect
Blitz3D Forums/Blitz3D Beginners Area/MeshesIntersect You could parent a pivot to the front most point of each car. Have a quad over the finish line. Then check for collisions between the pivot and the quad. Since the quad is parented to the car, it won't affect the car in anyway either :o)
Should be alot quicker then meshintersect
Should be alot quicker then meshintersect
Pete,
Yeah meshes intersect is how I do some of the collision detection in my stuff, especially when you don't want a collision to effect how the colliding object is moving...Ross's idea is good too though!
IPete2.
Yeah meshes intersect is how I do some of the collision detection in my stuff, especially when you don't want a collision to effect how the colliding object is moving...Ross's idea is good too though!
IPete2.
ok cool ill give ut a try. I had an idea a few minutes ago, with ode I can just make a small part of the track a 2nd trimesh and when a wheel touchs it i can get the collision but im not sure i can identify the car thats driven over the line just that a car has collided with the strip? ill have to ask VIP3R
thanks for your help
thanks for your help
Problem with using the wheel, is the cars might be different shapes. The pivot idea is pretty fast, that's the only reason i suggested it :o) Hope you get it working.
No need for collisions. The easiest way is :
Position a pivot in the center of the starting line
Point it in the direction of the track
Then all you need to do is check that the car is infront of the Pivot like so ...
tformpoint 0,0,0,Carmesh, Pivot
If tformedz() > 0 and tformedz() < 20 and abs( tformedx() ) < TrackWidth
;you have crossed the finish line
Endif
Note that the 20 should be changed to suit.
Only problem is that it'll continually register a lap when you don't want it too. This is where checkpoints should be used ... say 10-20 around the track. Store the current and target checkpoints and when the above condition is met you set the current checkpoint to the target and set the target waypoint to the next one. A lap should only be registered when your current checkpoint has been registered as the starting line pivot.
Make sense?
Stevie
Position a pivot in the center of the starting line
Point it in the direction of the track
Then all you need to do is check that the car is infront of the Pivot like so ...
tformpoint 0,0,0,Carmesh, Pivot
If tformedz() > 0 and tformedz() < 20 and abs( tformedx() ) < TrackWidth
;you have crossed the finish line
Endif
Note that the 20 should be changed to suit.
Only problem is that it'll continually register a lap when you don't want it too. This is where checkpoints should be used ... say 10-20 around the track. Store the current and target checkpoints and when the above condition is met you set the current checkpoint to the target and set the target waypoint to the next one. A lap should only be registered when your current checkpoint has been registered as the starting line pivot.
Make sense?
Stevie
But what if the cars are different lengths? Wouldn't you need to set the entity's(0,0,0) to the very front of the car. If not, and you get an instance when two cars are at the same position centrally, but the larger car has passed the finish line, so wouldn't be so accurate.
Voila ...
tformpoint 0,0,CarLength*.5,Carmesh, Pivot
If tformedz() > 0 and tformedz() < 20 and abs( tformedx() ) < TrackWidth
;you have crossed the finish line
Endif
tformpoint 0,0,CarLength*.5,Carmesh, Pivot
If tformedz() > 0 and tformedz() < 20 and abs( tformedx() ) < TrackWidth
;you have crossed the finish line
Endif
Hehe, nice :o)