Gå til innhold

trenger hjelp med å få lys til å skifte farge..


Anbefalte innlegg

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

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

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

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 av rjd-2
Lenke til kommentar

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

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å
×
×
  • Opprett ny...