Konstig bugg i mitt spel som måste åtgärdas! (C++ Allegro)|Programmering / Grafisk formgivning|Forum|Nordichardware

Search
Forum Scope


Match



Forum Options



Minimum search word length is 3 characters - maximum search word length is 84 characters
Lost password?
The forums are currently locked and only available for read only access
sp_Feed sp_TopicIcon
Konstig bugg i mitt spel som måste åtgärdas! (C++ Allegro)
Ramon
Kommer du hit ofta?
Medlem
Forum Posts: 461
Member Since:
February 23, 2004
sp_UserOfflineSmall Offline
1
June 28, 2006 - 5:17 am
sp_Permalink sp_Print

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!

ren
Kommer du hit ofta?
Medlem
Forum Posts: 833
Member Since:
January 15, 2004
sp_UserOfflineSmall Offline
1054220
June 28, 2006 - 8:29 am
sp_Permalink sp_Print

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.

Ramon
Kommer du hit ofta?
Medlem
Forum Posts: 461
Member Since:
February 23, 2004
sp_UserOfflineSmall Offline
1054223
June 28, 2006 - 8:49 am
sp_Permalink sp_Print

Ah, kan man göra så också! Låter intressant, har lite frågor dock.

Hur ska jag göra det så som du skrev 😕 Hänger inte riktigt med på vad du menar med nuvarande och förra (eller nuvarande och nästa) frame, alltså hur jag ska fixa det så.

Caesar
Mina inlägg skrivs i binär kod
Medlem
Forum Posts: 116
Member Since:
September 7, 2003
sp_UserOfflineSmall Offline
1054249
June 28, 2006 - 10:48 am
sp_Permalink sp_Print

Jag tror han menar att man kan spara bilens föregående position (en frame tidigare) och sedan bara läsa av om bilens nuvarande position är framför mållinjen medan den föregående var bakom mållinjen, då måste ju bilen ha passerat mållinjen.

Ramon
Kommer du hit ofta?
Medlem
Forum Posts: 461
Member Since:
February 23, 2004
sp_UserOfflineSmall Offline
1054279
June 28, 2006 - 12:42 pm
sp_Permalink sp_Print

Okej, då är jag med på hur han menar. Jag är dock osäker på hur jag ska lösa det så. Med if-sats(-er)? Alltså spara bilens position innan mål och sen läser av med if-sats efter mål? Fast vad ska det vara för villkor på if:en?

Ramon
Kommer du hit ofta?
Medlem
Forum Posts: 461
Member Since:
February 23, 2004
sp_UserOfflineSmall Offline
1054726
June 30, 2006 - 8:21 am
sp_Permalink sp_Print

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.

ren
Kommer du hit ofta?
Medlem
Forum Posts: 833
Member Since:
January 15, 2004
sp_UserOfflineSmall Offline
1054894
June 30, 2006 - 8:25 pm
sp_Permalink sp_Print

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.

Ramon
Kommer du hit ofta?
Medlem
Forum Posts: 461
Member Since:
February 23, 2004
sp_UserOfflineSmall Offline
1054966
July 1, 2006 - 5:45 am
sp_Permalink sp_Print

Tackar så mycket ren! Jag ska ta mig en titt på den sidan 😀

Forum Timezone: Europe/Stockholm
Most Users Ever Online: 1030
Currently Online:
Guest(s) 365
Currently Browsing this Page:
1 Guest(s)
Top Posters:
Andreas Galistel: 16287
Jonas Klar: 15897
ilg@dd: 10810
Nyhet: 10607
Mind: 10550
Ctrl: 10355
Gueno: 9881
Guest: 9344
Snorch: 8881
Callister: 8468
Newest Members:
PetrbonFU PetrbonFU
Karine Bembry
Dolores Mcdaniels
Anibal McLeish
Francisca Alt
Alfie Everhart
Lester Huitt
Orlando Jorgensen
Mikki Lundgren
Dakota Kozlowski
Forum Stats:
Groups: 11
Forums: 59
Topics: 146630
Posts: 1300967

 

Member Stats:
Guest Posters: 2
Members: 79425
Moderators: 0
Admins: 11
Administrators: nordicadmin, Henrik Berntsson, Anton Karmehed, Carl Holmberg, Joel Oscarsson, Mikael Linnér, Mikael Schwartz, Andreas Paulsson, Nickebjrk, Mattias Pettersson, EmxL