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?