Gå til innhold

Anbefalte innlegg

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
Videoannonse
Annonse

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

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

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

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

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...