Avatar billede gedfrik Nybegynder
19. oktober 2008 - 13:38 Der er 1 løsning

X-antal timere i program - hvordan?

Hej alle, jeg er i gang med et Bomberman-spil og har ALDRIG været ude for ikke selv at kunne læse et problem, men nu er det altså tid.

Jeg har følgende relevante klasser:
- GameEngine, der tager sig af hele spillets gang.
- Bomb, der repræsenterer en bombe på kortet.

Bomb-klassen indeholder en util.Timer (altså en Timer der opretter  en seperat tråd for hvert Timer-objekt). Denne timer oprettes når en metode i Bomb-klassen kaldes. Timerens funktion er basalt set at "tælle til 5", hvorefter bomben springer i luften og sættes som inaktiv.

I min GameEngine klasse er der desuden en anden util.Timer, der laver at delay på computerens ryk. (Så man kan følge med i hvad der foregår). Dette delay er på 300MS.

Klassens main-loop (der stopper når spiller er slut), kører to metoder, hvor den ene tager sig af spillernes ryk - hvis en spiller sætter en bombe, blive der oprettet en bombe, hvis timer startes. Denne bombe lægges ind i en liste af aktive-bomber, altså bomber hvis timer er i gang med at tælle ned.

Den anden metode tjekker for ændringer efter sidste ryk. Den kører  bl.a. listen af aktive bomber igennem, for at tjekke om en eller flere er blevet inaktive - hvis de er det, skal de springe i luften, der skal tjekkes om en spillere bliver berørt af dette, painComponent skal opdateres osv. Bomben der nu er inaktiv bliver desuden fjernet fra listen af aktive bomber. Min interaktion i denne liste foregår på den måde, at jeg hver gang hiver element 0 ud af min liste (ArrayList). Jeg antager der sker et 1000/300 gange i sekundet så det vil sige at der højest kan være en forskel på hver bombes timer på 300MS - altså, jeg behøver kun at kigge på den ældste bombe i listen, for hvert kald af denne metode.

(Det skal siges at jeg før blot tjekkede alle bomber i listen og tjekkede om de var blevet inaktive, så problemets kerne ligger altså ikke her).

Det hele virker fint hvis computeren kun sætter en bombe - men hvis der F.eks. sættes en til, så bliver timeren fra den tidligere bombe, overført til den nye. Vi har altså følgende scenarie:

Tid(sekunder): 1
Computer sætter bombe. Tid: 2
Computer sætter bombe2. Tid: 4
Bombe2 springer i luften, mens bombe1 forbliver "en fuser". Tid: 5

Jeg opretter nye objekter for hver bombe, samt seperate timere for hver bombe, men alligevel har de en sammenhæng. Hvorfor? Hvordan får jeg dem til at opføre sig uafhængigt af hinanden?

Det skal siges at jeg har prøvet at oprette nye tråde for hver bombe i listen over aktive bomber, for hver timer og for hver metode der har relevans for problemet. Alt sammen uden held.

Jeg håber min beskrivelse giver grundlag nok for et svar. Ellers skal jeg gerne smide min kode op, selvom det nok ville ødelægge overblikket!

Tak på forhånd :)
Avatar billede gedfrik Nybegynder
02. november 2008 - 01:22 #1
Lukket... Jeg fandt problemet.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester