Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: Java: Image-muuttuja

Mobel [21.04.2007 20:27:32]

#

Vaivaampa jälleen!

Ohjelmani olisi tarkoitus piirtää kuvia näytölle riippuen metodille annetuista parametreistä(kuvan nimi siis riippuu parametreistä). Kuvat ovat muotoa kuvake1.png, kuvake2.png jne.. Image-muuttuja muuttuu siis useaan kertaan paint-metodia suoritettaessa. nimiGen siis generoi kuvan nimen. Pätkä listausta:

//...
public void paint(Graphics g){
 for(y = 0; y < 5; y++)for(x = 0; x < 5; x++){ //käydään taulukon jokainen solu läpi

   switch (taulukko[x][y]){ //riippuen mikä on taulukon solun arvo piirretään tietty kuva
      case 0:
        kuva=getImage(getCodeBase(), nimiGen(0,lisäys));
        g.drawImage(kuva, x, y, 100*x, 100*y, this);
        break;
      case 1:
        kuva=getImage(getCodeBase(), nimiGen(1,lisäys));
        g.drawImage(kuva, x, y, 100*x, 100*y, this);
        break;
      case 2:
        kuva=getImage(getCodeBase(), nimiGen(2,lisäys));
        g.drawImage(kuva, x, y, 100*x, 100*y, this);
        break;

   }; //switch-case
 } //for-silmukka
} //paint()

public String nimiGen(int luku, int lisäLuku){
   int a; //apumuuttuja selkeyden vuoksi
   a=luku+lisäLuku;
   nimi="kuvake" + a;
   return nimi;
}

Jostakin kumman syystä ei ruudulle piirry mitään. Miksihän näin käy?

FooBat [22.04.2007 04:22:05]

#

Tarkista nyt aluksi, että kuva ei ole null (jos on niin voit päätellä, että kuvan lataus ei onnistunut -> nimi väärin (puuttunee .png lopusta) tai kuvaa ei löydy polusta). Toiseksi kuvan leveytenä ja korkeutena olevat x*100 ja y*100 ovat takuulla virheelliset. Kolmanneksi toi swicth näyttää olevan ihan turha, jos kaikissa tapauksissa koodi on muotoa

case n: getImage(getCodeBase(), nimiGen(n, lisäys));

En nyt tarkalleen muista pitikö myös update-metodille tehdä jotain (kutsu paint-metodiin), että piirrokset tulevat näkyviin tai päivittyvät kunnolla.

Mobel [22.04.2007 16:57:35]

#

Niinpä niin. Olin tietysti nimigeneraattorista unohtanut päätteen lisäyksen. Oikea muoto metodillehan on seuraava:

public String nimiGen(int luku, int lisäluku, String pääte){
   int a;
   a=luku+lisäluku;
   nimi="kuvake" + a + pääte; //pääte saa arvon ".gif" tai ".png"
   return nimi;
}

Ja päätteen arvoksi annetaan ".png" tai vaihtoehtoisesti ".gif".

FooBat kirjoitti:

Toiseksi kuvan leveytenä ja korkeutena olevat x*100 ja y*100 ovat takuulla virheelliset.

Olin epähuomiossa kopioinut koodin väärin. Oikea muoto:

g.drawImage(kuva, x*100, y*100, 100, 100, this);

Kiitos vastauksesta!

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta