2ke Skrevet 3. november 2014 Del Skrevet 3. november 2014 Hei Leter etter en måte for å få et lite "delay" på rundt 5 sekunder i C. if (Sphere->speedx < 0.1 && Sphere->speedy < 0.1 && Sphere->speedx > -0.1 && Sphere->speedy > -0.1) { object_t *tmp = Sphere; Sphere = list_next(iter); list_remove(list, tmp); DestroyObject(tmp); } I koden over har jeg en "if" funksjon, med en del kriterier. Tanken er at når disse kriteriene er tilfredsstilt, da skal det gå 5 sek før object_t *tmp = Sphere; osv skal gjennomføres. Problemene så langt har vært: Når jeg bruker Delay(5000), så stopper hele programmet, noe som ikke er hensiktsmessig. Programmet er noen baller som spretter (SDL) og og når farten til en ball ca er 0, da skal det gå 5 sekunder før den blir slettet. Ettersom Delay() gjør slikt at de andre ballene som er i bevegelse også stopper for 5 sek, er ikke dette veien å gå. Har prøvd diverse veier sleep, delay, og noen forsøk via time.h biblioteket. Noen som sitter på noen gode ideer? Lenke til kommentar
Mr Burns Skrevet 3. november 2014 Del Skrevet 3. november 2014 (endret) Tja, hva om objectet har en maate og holde styr paa tiden, slik at du bare If (Sphere->CalcSpeed() < 0.1) { Sphere->StartSelfDestruct(); } Eller kanskje ha en liste over Sphere som skal slettes, og regelmessig sjekke om det er noe I lista? Endret 3. november 2014 av Mr Burns Lenke til kommentar
2ke Skrevet 3. november 2014 Forfatter Del Skrevet 3. november 2014 Ettersom ballene får forskjellig fart, vil det gå forskjellig tidsintervaller før farten er lik 0. Hvis jeg forstod deg rett så tenkte du å holde styr på tiden basert på, når skal if kjøre? Litt usikker på hvordan jeg bør implementere dette, når farten er ulik og dermed tiden er ulik for hver ball. Noen tanker? jeg sitter nå å prøver forskjellige varianter av SDL_GetTicks. Men dette er ikke akurat lett:) Lenke til kommentar
Mr Burns Skrevet 3. november 2014 Del Skrevet 3. november 2014 Jeg kjenner ikke til SDL, men jeg antar at du oppdaterer skjermbilde og status til hvert objekt ved faste tidsintervaller? Lenke til kommentar
2ke Skrevet 3. november 2014 Forfatter Del Skrevet 3. november 2014 Du må holde ut med meg. Tre måneder med programmering er det jeg har bak meg. Ballene er bygd opp av mange små trekanter og det blir regnet ut nye koordinater til disse ballene for hver oppdatering av skjermen. Det er det eneste jeg kan se sålangt som har en referanse til tid, er FPS. Så, ja, jeg oppdaterer til faste tidsintervaller (tror jeg). Lenke til kommentar
Mr Burns Skrevet 3. november 2014 Del Skrevet 3. november 2014 (endret) Ok, da har du nok en while () som kjører oppdateringer til skjerm, men uten at det nødvendigvis er tidssynkronisert. Og du har en liste over ballene som er på skjermen? Kan du legge til en variabel som heter sletteTid? Hvis en ball skal slettes om fem sekunder, kan sletteTid settes til nåværende tick pluss fem sekunder. if (Sphere->speedx < 0.1 && Sphere->speedy < 0.1 && Sphere->speedx > -0.1 && Sphere->speedy > -0.1) { Sphere->sletteTid = SDL_GetTicks() + 5000; } Ved hver oppdatering sjekkes det om fem sekunder er gått siden sletteTid ble satt. // Sjekke om ballen skal slettes if (SDL_GetTicks() > Sphere->sletteTid) { object_t *tmp = Sphere; Sphere = list_next(iter); list_remove(list, tmp); DestroyObject(tmp); } Dette er ikke den eneste måten å gjøre det på... Endret 3. november 2014 av Mr Burns Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå