Moin moin alle zusammen,
ich hab da so ein kleines Problem mit meinem Projekt. Also ich versuche seit einigen Stunden das ganze zum laufen zu kriegen wie ich es will. Die Ausgangs Situation ist, ich hab eine Klasse Karte die eine Liste von zweidimensionalen Int Arrays hat. Jedes Array ist dabei eine Ebene, die ints repräsentieren ein Bild aus einem Tileset oder einfach ein leeres Feld wenn -1.
Das ganze wird dann in einem eigenen JPanel gezeichnet. Das Problem hierbei ist, sobald ich auf einer zweiten Ebene nun ein Tile platziere wird die unteren Ebenen total überbemalt, also die Fläche wird weiß mit dem gesetzten Tile und dem Gitter. Nun zur frage wie kann ich das ganze nun lösen das es halt möglich ist auf mehr als nur einer Ebene zu malen?
Damit das ganze nicht alzu trocken ist hier mal der Code Abschnitt aus den Panel:
Danke schonmal für jede Antwort die mir irgendwie weiter helfen kann
mfg
xanatos1992
ich hab da so ein kleines Problem mit meinem Projekt. Also ich versuche seit einigen Stunden das ganze zum laufen zu kriegen wie ich es will. Die Ausgangs Situation ist, ich hab eine Klasse Karte die eine Liste von zweidimensionalen Int Arrays hat. Jedes Array ist dabei eine Ebene, die ints repräsentieren ein Bild aus einem Tileset oder einfach ein leeres Feld wenn -1.
Das ganze wird dann in einem eigenen JPanel gezeichnet. Das Problem hierbei ist, sobald ich auf einer zweiten Ebene nun ein Tile platziere wird die unteren Ebenen total überbemalt, also die Fläche wird weiß mit dem gesetzten Tile und dem Gitter. Nun zur frage wie kann ich das ganze nun lösen das es halt möglich ist auf mehr als nur einer Ebene zu malen?
Damit das ganze nicht alzu trocken ist hier mal der Code Abschnitt aus den Panel:
Java:
@Override
protected void paintComponent(Graphics g)
{
super.paintComponent(g);
if (_karte != null)
{
// TODO Mehrere Ebenen lassen sich nicht richtig Malen, neuste Ebene
// Überlagert alle Darunter Liegenden
for (int e = 0; e < _karte.getAnzahlEbenen(); ++e)
{
for (int x = 0; x < _karte.getBreite(); ++x)
{
for (int y = 0; y < _karte.getHoehe(); ++y)
{
if (_karte.hasTileset())
{
drawWithTile(e, x, y, (Graphics2D) g.create());
}
else
{
if (_drawGitter)
{
g.drawRect(x * _karte.getTileBreite(), y
* _karte.getTileHoehe(),
_karte.getTileBreite(),
_karte.getTileHoehe());
}
else
{
g.dispose();
}
}
}
}
}
if (_drawGitter)
{
drawGitter((Graphics2D) g.create());
}
}
else
{
g.setColor(Color.BLACK);
// TODO besseren Platzhalter setzen
g.fillRect(0, 0, 800, 50);
}
}
private void drawGitter(Graphics2D g)
{
try
{
for (int x = 0; x < _karte.getBreite(); ++x)
{
for (int y = 0; y < _karte.getHoehe(); ++y)
{
g.setColor(new Color(0, 0, 0, 0.5f));
g.drawRect(x * _karte.getTileBreite(),
y * _karte.getTileHoehe(), _karte.getTileBreite(),
_karte.getTileHoehe());
}
}
}
finally
{
g.dispose();
}
}
/**
* Zeichnet die einzellnen Tiles
*
* @param e
* aktuelle Ebene
* @param x
* Koordinate des Tiles
* @param y
* Koordinate des Tiles
* @param g
*/
private void drawWithTile(int e, int x, int y, Graphics2D g)
{
try
{
BufferedImage tile = _karte.getTile(e, x, y);
if (tile != null)
{
g.drawImage(tile, x * _karte.getTileBreite(),
y * _karte.getTileHoehe(), null);
if (_showCollision)
{
int id = _karte.getTileID(e, x, y);
Tile tmp = _karte.getTileSet().getTile(id);
Rectangle rec = tmp.getCollision();
if (rec != null)
{
g.setColor(new Color(225, 0, 0, 128));
g.fillRect(rec.x + (x * _karte.getTileBreite()), rec.y
+ (y * _karte.getTileHoehe()), rec.width,
rec.height);
}
}
}
else
{
g.setColor(new Color(0,0,0,0.5f));
g.drawRect(x * _karte.getTileBreite(), y* _karte.getTileHoehe(), _karte.getTileBreite(), _karte.getTileHoehe());
}
}
finally
{
g.dispose();
}
}
Danke schonmal für jede Antwort die mir irgendwie weiter helfen kann
mfg
xanatos1992