February 23, 2004
Jag håller på med ett bilspel i C++ m.h.a. Allegro's grafiska bibliotek. I spelet har jag en funktion som räknar hur många varv man kört och skriver ut det på skärmen. Jag har gjort det så att själva banan är en bild som laddas in och ritas ut, likaså bilen. Det jag gör är att kolla en viss pixel på bilen och jämföra den med mållinjens pixel-färgkod. Så ifall bilen "överträder" mållinjen så räknas varvräknaren upp med 1.
Nu är det dock så att denna räknare funkar inte alltid som den bör, den räknar inte alltid upp varv fast man överträder mållinjen med hela bilen. Jag gjorde ett test och ritade en liten orange kub och laddade in den istället för bilen (hela kuben har samma färgkod) och när jag kör med den så räknas varven upp i de allra flesta fall! Varför görs inte detta med min bil (som inte har samma färgkod på hela såklart, men det ska ju inte spela någon roll).
Om någon mocklat med allegro (eller c++) och känner sig manad att kunna hjälpa mig, så vänligen svara här eller i pm så kanske vi kan ta det via msn. Det blir lättare att förklara då... Tackar på förhand!
February 23, 2004
ren wrote: Använd inte pixlarnas färgkod for att detektera om man kört över mållinjen, använd istället biles position från nuvarand och förra (eller nuvarande och nästa) frame och jämför med mållinjen för att se om bilen passerat.
På vilket sätt kan jag lösa det så? Alltså lite mera exakt hur skriver jag.
January 15, 2004
Ta en titt på den här sidan,
http://astronomy.swin.edu.au/~.....ineline2d/
låt linjen p1-p2 vara din mållinje, och linjen p3-p4 vara del linje bilen färdas längs mellan två tidpunkter.
Lös ut Ua och Ub enligt de formler som finns på sidan.
Befinner sig både Ua och Ub mellan 0 och 1 så har bilen passerat mållinjen.
Nu återstår det bara att veta från vilket håll bilen paserat mållinjen.
En ifsats löser det problemet.
if((P3.x - P1.x)*(P2.y - P1.y) - (P3.y - P1.y)*(P2.x - P1.x) > 0)
{
// bilen har passerat mållinjen i rätt rikting
}
Läs lite om vektorprodukter om du inte fattar.
Märker du att varvräknaren bara räknar upp om du kör bilen åt fel håll, byt plats på koordinaterna för mållinjen.
1 Guest(s)