jinriksha Skrevet 22. november 2005 Del Skrevet 22. november 2005 hoi! trenger litt hjelp med å få trafikklys til å skifte farge ved å klikke skiftLys1() og skiftLys2() har kommet så langt: public class Trafikklys { private Square trafikklys1; private Square trafikklys2; private Circle rod1; private Circle rod2; private Circle gult1; private Circle gult2; private Circle gronn1; private Circle gronn2; public Trafikklys() { trafikklys1 = new Square(30, 80, 355, 355, "blue", true); trafikklys1.draw(); trafikklys2 = new Square(80, 30, 355, 215, "blue", true); trafikklys2.draw(); } public void skiftLys1() { rod1 = new Circle(20, 360, 360, "red", true); rod1.draw(); gult1 = new Circle(20, 360, 385, "yellow", true); gult1.draw(); gronn1 = new Circle(20, 360, 410, "green", true); gronn1.draw(); } public void skiftLys2() { rod2 = new Circle(20, 360, 220, "red", true); rod2.draw(); gult2 = new Circle(20, 385, 220, "yellow", true); gult2.draw(); gronn2 = new Circle(20, 410, 220, "green", true); gronn2.draw(); } } er ikke så god i detta så ja.. det jeg trenger hjelp til er at :når jeg trykker skiftLys1() så skal den skifte farge fra rød til gult, og fra gult til grønt, og fra grønt til rødt osv... det samme gjelder skiftLys2() alt hjelp mottas med stort takk Lenke til kommentar
Iyon Skrevet 22. november 2005 Del Skrevet 22. november 2005 Kanskje det kunne være en idé å tråde et objekt som har peker til alle tre fargene. Hver gang du skifter Lys instansierer du og starter dette objektet: public class LysSkifter1 extends Thread { private Circle rod; private Circle gul; private Circle gronn; public LysSkifter1(Circle rod, Circle gul, Circle gronn) { this.rod = rod; this.gul = gul; this.gronn = gronn; } public void run() { //her behandler du rod slik at lyset slukkes samt slår på det gule lyset sleep(1000); //tråden legges i søvn i 1 sekund (1000 millis) //her slukker du det gule og skrur på det gronne } } metoden skiftLys1 kan da se slik ut: public void skiftLys1() { LysSkifter1 skifter = new LysSkifter1(rod1, gult1, gronn1); rod1 = new Circle(20, 360, 360, "red", true); // rod1.draw(); gult1 = new Circle(20, 360, 385, "yellow", true); // gult1.draw(); gronn1 = new Circle(20, 360, 410, "green", true); // gronn1.draw(); LysSkifter1 skifter = new LysSkifter1(rod1, gult1, gronn1); skifter.start() //start() kalles, JVM sørger for at en ny tråd opprettes, //deretter kalles run() på dette objektet. } Håper det var enkelt å forstå og hva du hadde i tankene. Jørgen Lenke til kommentar
AssKicR Skrevet 22. november 2005 Del Skrevet 22. november 2005 Prøve noe slik kanskje ? skiftLys(int lys) { if (lys=="1") { rod.setVisible() = true gul.setVisible() = false gronn.setVisible() = false } else if (lys=="2") { rod.setVisible() = false gul.setVisible() = true gronn.setVisible() = false } else if (lys=="3") { rod.setVisible() = false gul.setVisible() = true gronn.setVisible() = false } } Lenke til kommentar
jinriksha Skrevet 22. november 2005 Forfatter Del Skrevet 22. november 2005 (endret) hm.. skal prøve begge deler... danker edit: fått til detta nå: public class Trafikklys { private Square trafikklys1; private Square trafikklys2; private Circle rod1; private Circle rod2; private Circle gul1; private Circle gul2; private Circle gronn1; private Circle gronn2; public Trafikklys() { trafikklys1 = new Square(30, 80, 355, 355, "blue", true); trafikklys1.draw(); rod1 = new Circle(20, 360, 360, "red", true); gul1 = new Circle(20, 360, 385, "yellow", true); gronn1 = new Circle(20, 360, 410, "green", true); trafikklys2 = new Square(80, 30, 355, 215, "blue", true); trafikklys2.draw(); rod2 = new Circle(20, 360, 220, "red", true); gul2 = new Circle(20, 385, 220, "yellow", true); gronn2 = new Circle(20, 410, 220, "green", true); } public void skiftLys1(int Lys1) { if (Lys1 == 1) { rod1.draw(); gul1.erase(); gronn1.erase(); } else if (Lys1 == 2) { rod1.erase(); gul1.draw(); gronn1.erase(); } else if (Lys1 == 3) { rod1.erase(); gul1.erase(); gronn1.draw(); } } public void skiftLys2(int Lys2) { if (Lys2 == 1) { rod2.draw(); gul2.erase(); gronn2.erase(); } else if (Lys2 == 2) { rod2.erase(); gul2.draw(); gronn2.erase(); } else if (Lys2 == 3) { rod2.erase(); gul2.erase(); gronn2.draw(); } } } heh.. nå er det bare å få det til å skifte automatisk får vel bare leke litt mer.. takk for hjelpen Endret 22. november 2005 av rjd-2 Lenke til kommentar
Iyon Skrevet 25. november 2005 Del Skrevet 25. november 2005 Uten å legge programmet ditt i en loop som går noen millioner ganger mellom du skifter til gult og så skifter til grønt, (noe som ikke anbefales), ser ihvertfall ikke jeg en annen løsning enn å tråde akkurat den prosessen, da får du lagt inn passende delay uten å legge programmet ditt i en tight loop. Er gjerne behjelpelig med videre hjelp ang. tråder 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å