Avatar billede qurzyx Nybegynder
17. februar 2003 - 17:33 Der er 4 kommentarer

Hvordan virker dette???

Hej...

Jeg har et spil, som, hver gang tegningen bliver kastes, skal vise (updatede det grafiske vindue) et billede.. Kodne er følgende:

import java.awt.*;
import java.util.*;

public class GrafiskVindue extends Frame
{
        Spiller sp1=new Spiller("Søren",50000);  // opret spiller 1
        Spiller sp2=new Spiller("Gitte",50000);  // opret spiller 2
        Vector felter=new Vector();          // indeholder alle felter
   
   
    public void paint(Graphics g)
    {
    // Herunder referer g til et Graphics-objekt man kan tegne med.
      for (int i=0; i<felter.size(); i++)
    {
      Felt f = (Felt) felter.elementAt(i);
      f.tegn(g);
    }
   
 
  }
 
    public GrafiskVindue()
    {   
        felter.addElement(new Start(5000));
        felter.addElement(new Gade2("Gade 1",10000, 400,1000));
        felter.addElement(new Gade2("Gade 2",10000, 400,1000));
        felter.addElement(new Gade2("Gade 3",12000, 500,1200));
        felter.addElement(new Rederi2("Maersk",17000,4200));
        felter.addElement(new Gade2("Gade 5",15000, 700,1500));
        felter.addElement(new Helle(15000));
        felter.addElement(new Gade2("Gade 7",20000,1100,2000));
        felter.addElement(new Gade2("Gade 8",20000,1100,2000));
        felter.addElement(new Gade2("Gade 9",30000,1500,2200));
       
        for (int i=0; i<felter.size(); i++)
          {
        double v = Math.PI*2*i/felter.size(); // vinkel i radianer
          Felt f = (Felt) felter.elementAt(i);
          f.position = new Point(
          100 + (int) (100*Math.cos(v)), 
          110 + (int) (100*Math.sin(v))
                  );
          }
           
           
        // løb igennem 20 runder
        for (int runde = 0; runde<2; runde=runde+1)
        {
            sp1.tur(felter);
            sp2.tur(felter);
       
        }
    }
   

}


Det viser dog kun billedet til sidst, og ikke løbende.
Ikke alle filerne er der, da det er lidt omfattende
Avatar billede =maddog= Nybegynder
17. februar 2003 - 18:48 #1
kig engang på Threads og Runnable. det er lidt for omfattende at forklare sådan ud af det blå.
Avatar billede magoo20000 Nybegynder
17. februar 2003 - 18:53 #2
Er det til netværksspil?
Se evt. også på Observer pattern - søg evt her på Eksperten efter dette pattern.
Avatar billede jesper_dk Nybegynder
18. februar 2003 - 17:19 #3
dit problem er højest sandsynligt at dit program ikke er trådet.
du skal bruge en seperat tråd til din paint() metode
så du ikke tegner med GUI tråden
Avatar billede ulrikm Nybegynder
18. februar 2003 - 17:54 #4
paint() metoden vil tidligst blive kaldt _efter_ kontruktoren er færdig - dvs. efter de 20 runder. Prøv at flytte koden der "løber gennem 20 runder" ud i sin egen metode og kald repaint() fra denne når du ønsker en gentegning:

import java.awt.*;
import java.util.*;

public class GrafiskVindue extends Frame
{
  private int runde = 0;

  public GrafiskVindue()
  {   
  }

  public void paint(Graphics g)
  {
      // skift farve ved hver runde
      g.setColor( runde % 2 == 0? java.awt.Color.white: java.awt.Color.black );   
      g.fillRect( 0, 0, getWidth(), getHeight() );
      // vis runde nummer med modsat farve af baggrundsfarven
      g.setColor( runde % 2 == 0? java.awt.Color.black: java.awt.Color.white );   
      g.drawString( "Runde = " + runde, 10, 100 );
  }

  private void simulate()
  {
      // løb igennem 20 runder
      for (; runde<20; runde=runde+1)
      {
        try
        {
            // pause indsat, så vi kan følge med i hvad der sker
            Thread.sleep(500);
        }
        catch( Exception e )
        {
            // ignore
        }
        // gentegning krævet ved slutning af hver runde
        repaint();
      }
  }

  public static void main( String[] args )
  {
      GrafiskVindue gv = new GrafiskVindue();
      gv.setSize( 400, 250 );
      gv.show();
      gv.simulate();
  }
}
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