12. oktober 2005 - 22:39Der er
30 kommentarer og 1 løsning
problem med en random ting
hej med jer jeg skal lave et projekt i programering på htx og jeg er løbet ind i problemer...opgave lød på at jeg skulle lave en lille animation af en sol som bevægede sig lidt. jeg har valgt at lave 7 billeder af min sol og så kommer problemet, jeg skal have min kode til at skifte tilfældigt mellem de 7 billeder. det er vigtigt at animationen er tidsbegrænset skal det lige siges...her er det jeg er kommet frem til:
Image offscreenImage; //Grafikbufferen (baggrundsbillede), //hvor optegningen skal foregå. Graphics offscreen; //offscreen skal indehold det grafiske indhold //fra vores grafikbuffer. Dimension dim; //Størrelse, der senere tilknyttes //formens størrelse.
Random random = new Random(); int ranNum;
//Konstruktor public Sol() {
this.setBackground(Color.WHITE);
//Eventlistener, der lytter på Windowsknappen, der lukker //applikationen/programmet addWindowListener(new java.awt.event.WindowAdapter() { public void windowClosing(java.awt.event.WindowEvent evt) { System.exit(0); } });
pack(); setTitle("Sol projekt - Mathias 2.w"); setSize(800,600);
ImageIcon[] billedserie = new ImageIcon[6]; // for (int i = 0; i >=6; i++){ i=1; billedserie[i] = new ImageIcon("sol1.jpg"); //billedserie[i] = new ImageIcon("sol" + i + 1 + ".jpg"); } }
public void paint(Graphics g){ Graphics2D g2 = (Graphics2D) g; //Bruger java 2D { //Sletter alt på baggrundsbilledet og giver det farven sort. for(int i = 0; i < 20; i++){ //her har jeg lavet en lykke, så programmet bliver løbet igennem flere gange //ved at bruge lykken spare jeg en masse tide og plads på at få programmet til at billederne frem flere gange offscreen.setColor(Color.black); offscreen.fillRect(0,0, dim.width, dim.height);
ranNum = 1 + random.nextInt(5);
billedserie[ranNum].paintIcon(this,g,1,1); //Baggrundsbilledet tegnes på skærmen.
pause(100); } } }
//Main-metoden skal altid findes i en applikation. public static void main(String[] args){ //Main-metoden kalder konstruktoren Sol ramme = new Sol(); ramme.show(); }
fejlen opstår i "public void pause(int ms){" delen men hvad er gået skævt?
ja jeg har kigget lidt på det, men det jeg har brug for er at få hendet mine 6 billeder ind i programmet i tilfældig række følge...jeg er virkelig ny i det her...!
Så prøv følgende. Det er din egen kode jeg har rettet til så den burde virke. Jeg har lavet det om til at være en tråd, da det er den eneste måde du kan få noget grafisk til at bevæge sig.
public class Sol extends JFrame implements Runnable { Image offscreenImage; //Grafikbufferen (baggrundsbillede), //hvor optegningen skal foregå. Graphics offscreen; //offscreen skal indehold det grafiske indhold //fra vores grafikbuffer. Dimension dim; //Størrelse, der senere tilknyttes //formens størrelse.
Random random = new Random(); int ranNum; ImageIcon[] billedserie;
//Konstruktor public Sol() { this.setBackground(Color.WHITE);
//Eventlistener, der lytter på Windowsknappen, der lukker //applikationen/programmet addWindowListener(new java.awt.event.WindowAdapter() { public void windowClosing(java.awt.event.WindowEvent evt) { System.exit(0); } });
pack(); setTitle("Sol projekt - Mathias 2.w"); setSize(800,600);
billedserie = new ImageIcon[6]; for (int i = 0; i < billedserie.length; i++) { billedserie[i] = new ImageIcon("sol1.jpg"); //billedserie[i] = new ImageIcon("sol" + i + 1 + ".jpg"); }
Thread thread = new Thread (this); thread.start(); }
billedserie[ranNum].paintIcon(this,offscreen,35,35); //Baggrundsbilledet tegnes på skærmen.
g.drawImage(offscreenImage, 0, 0, this); } }
public void run () { while (true) { ranNum = 1 + random.nextInt(5); pause(100); } }
//Main-metoden skal altid findes i en applikation. public static void main(String[] args) { //Main-metoden kalder konstruktoren Sol ramme = new Sol(); ramme.show(); } }
jeg her en mistanke om at problemet ligger her: billedserie = new ImageIcon[6]; for (int i = 0; i >=6; i++){ billedserie[i] = new ImageIcon("sol" + i + 1 + ".jpg"); men hvad er der galt, altså jeg har 6 billeder der skal hentes tilfældigt frem...
jeg fik en af mine venner til lige at kigge på det og han fik løst problemet billedserie = new ImageIcon[6]; for (int i = 0; i < billedserie.length; i++){ String filnavn = ("sol" + ((int)i + 1) + ".jpg"); billedserie[i] = new ImageIcon(filnavn); i stedet for at min lykke hentede bille med navnet sol1, sol2 osv. tog den sol11, sol12 og sol13... men mange tak for hjælpen begge to, i fik lavet det hele lidt mere klart for mig!
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.