unwill Skrevet 30. mars 2003 Del Skrevet 30. mars 2003 Sånn ser keylistneren min ut; switch (e.getKeyCode()){ case KeyEvent.VK_RIGHT: person.moveRight(); break; case KeyEvent.VK_LEFT: person.moveLeft(); break; case KeyEvent.VK_DOWN: person.moveDown(); break; case KeyEvent.VK_UP: person.moveUp(); break; } public void keyReleased(KeyEvent e){ } public void keyTyped(KeyEvent e){ } Og inni i Perosn har jeg f.eks denne metoden: public void moveLeft(){ if (getX() > 20){ changeX((int)-speed); } } Dette fungerer utmerket egentlig, men jeg mistenker at siden released er tom, så er det opptill "refreshraten" til enhver maskin som bestemmer hastigheten til personen. Stemmer det? Hvordan kan jeg få personen til å gå f.eks. 10 pixler til høyre hvert 0,1 s uansett maskin? Håper noen kan hjelpe... Lenke til kommentar
threiran Skrevet 31. mars 2003 Del Skrevet 31. mars 2003 Vet ikke svaret på første spm. 'Konstant' fart kan f.eks. oppnåes på følgende måter: Enkleste er nok å sjekke klokka, om det er gått lang nok tid siden forrige oppdatering. Det er nok likevel bedre med tråder. F. eks. kan du jo lage en tråd der GUI kan sette om (enellerannen retning) er trykt. Denne tråden kan så kalle moveXxxx(), tilsvarende det som er blitt registrert, og nullstille registreringer ca hvert 0.1 sek (bruk f.eks. sleep(int) mellom) Det blir ikke nøyaktig. Spesielt ved høy last risikerer du at tråden 'forsover' seg. CPL Lenke til kommentar
unwill Skrevet 31. mars 2003 Forfatter Del Skrevet 31. mars 2003 Hmm... blir det noe bra da? Har jeg forstått deg riktig nå? At jeg skal lage en tråd som kjører f.eks. 4 move kommandoer... ha 4 boolean verdier Og en liten sleep... ? Det prøvde jeg iallefall på, men da stoppet hele spillet når jeg trykket pga. hele systen sleepet... Lenke til kommentar
threiran Skrevet 31. mars 2003 Del Skrevet 31. mars 2003 Jupp! Opprett en slik tråd. Det høres ut som om du sender feil tråd til å sove. Ser for meg en run() metode noe ala (rask prinsipp siksse): ... run() { while(true) { if(hoyre) p.moveRight(); if... hoyre = false; ... try { sleep(100); } catch (InterruptedException e) {} } Husk at du kaller start metoden, ikke run for å starte tråden, pass på at ikke du ikke kjører sleep på GUI tråden. Det er nok lurt å synkronisere litt. Lenke til kommentar
unwill Skrevet 2. april 2003 Forfatter Del Skrevet 2. april 2003 Det funker fint nå, takk for hjelpen... Gjorde det ikke akkurat som du sa det, men jeg gjorde mye rett, det eneste var at jeg stoppet hele greia istedenfor bare tråden... den arver allerede så jeg måtte bare implementere runnable så verre var det ikke. 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å