Applet - getImage

Java

1 svar · 399 visningar · startad av jabbalizer

Medlem sedan jan. 2001229 inlägg
Trådstart#1

Jag bygger ett litet spel som en java-applet.

I init() initierar jag lite saker (doh!).
Bland annat skapar jag en array av tiles som är 16x16 pixlar stora:

      _groundImage[0] = getImage(getDocumentBase(),"road01.gif");
      _groundImage[1] = getImage(getDocumentBase(),"floor01.gif");
      _groundImage[2] = getImage(getDocumentBase(),"grass01.gif");

Och en 2D-array at typen int som definierar hur leveln ser ut.

int _ground[42][36]

Senare i init() anropar jag en metod som bygger själva leveln och sparar hela i en Image (för att inte behöva bygga om underlaget 40 gånger per sekund när spelet körs).

    _levelImage = createImage (_levelWidth*_gifSize, _levelHeight*_gifSize);
    Graphics levelGraphics = _levelImage.getGraphics();

    for(int y = 0; y<_levelHeight; y++)
    {
      for(int x = 0; x<_levelWidth; x++)
      {
        levelGraphics.drawImage(_groundImage[_ground[y][x]],x*_gifSize,y*_gifSize,this);
      }
    }

Nu misstänker jag att initieringen av bilderna i _groundImage inte är färdig när jag börjar rita upp småbilderna. De övre raderna i _levelImage ritas nämligen inte ut. Olika många rader saknas olika gånger, och man ser tydligt var en speciell bild "börjar fungera". (T.ex. så kan gräset ritas ut från början, men ground-tiles saknas till 5e eller 6e raden.

En ful lösning är att köra loopen ovan två gånger, eller kanske göra något annat som tar tid innan man kör loopen. (Thread.sleep(3000) hjälper inte.)

    _levelImage = createImage (_levelWidth*_gifSize, _levelHeight*_gifSize);
    Graphics levelGraphics = _levelImage.getGraphics();

    for(int y = 0; y<_levelHeight; y++)
    {
      for(int x = 0; x<_levelWidth; x++)
      {
        levelGraphics.drawImage(_groundImage[_ground[y][x]],x*_gifSize,y*_gifSize,this);
      }
    }
    for(int y = 0; y<_levelHeight; y++)
    {
      for(int x = 0; x<_levelWidth; x++)
      {
        levelGraphics.drawImage(_groundImage[_ground[y][x]],x*_gifSize,y*_gifSize,this);
      }
    }

Nu till frågan:
Kan man på något sätt kontrollera om småbilderna är OK innan man börjar rita ut dem?
Beror felet kanske på något annat?

Medlem sedan sep. 2001961 inlägg
#2

Du ska ta och införa en MediaTracker i ditt program som får hålla reda på bilderna åt dig.

Nått sånt här:

Image i;
public void init( ) {
i = getImage( getDocumentBase( ), "Test.gif");
MediaTracker mt = new MediaTracker(this);
mt.addImage(i,0); // add to group 0
try {
mt.waitForAll( ); }
catch(InterruptedException e) {
e.printStackTrace( ); }
}
public void paint(Graphics g) {
g.drawImage(i, 0, 0, this);
}

Om du googlar på "java applet mediatracker" så får du ett gäng bra träffar.

261 ms totalt · 4 externa anrop · v20260731065814-full.d34c6d5a
126 ms — deklarationer (db)
0 ms — hämta statistik (cache)
126 ms — hämta tråd, inlägg och bilagor (db)
131 ms — ändringar (db)