Frage

So habe ich ein Kachelbild tile.png und ich versuche, eine geflieste Karte zu erstellen, die alle über das Fenster. Ich baue das als Applet. Dies ist, was meine Farbe Methode aussieht, aber es ist nicht wirksam. Wenn ich das Applet laufen dauert es ca. 2 Sekunden und der gesamte Bildschirm gemalt wird von mit dem Bild von links nach rechts anstatt alles auf einmal gemacht werden. Auch alles sieht aus wie eine große tile.png anstatt 40 kleine Instanzen tile.png

public void paint(Graphics g)
{
    Image tile=getImg("tile.png");
    int width=this.getWidth();
    int height=this.getHeight();

    int x;
    int y;
    for (x=0; x<= width; x++)
    {
        for (y=0; y<= height; y++)
        {
            g.drawImage(tile, x, y, this);
        }
    }
}

Btw die tile.png Datei 10 x 10 Pixel ist, ist dies die tatsächliche img:

tile.png http://img12.imageshack.us/img12/1368/ tile.png

Edit: Verwenden Sie den Code unten und durch das Kachelbild zu verbessern i dies behoben. Hier ist meine neue Fliesen img falls es hilft jemand:

War es hilfreich?

Lösung

    for (x=0; x<= width / tileWidth; x++)
    {
            for (y=0; y<= height / tileHeight ; y++)
            {
                    g.drawImage(tile, x * tileWidth, y * tileHeight, this);
            }
    }

Sie müssen durch die Breite / Höhe der Fliese kompensieren.

Andere Tipps

So wie eine Randnotiz, werden Sie wahrscheinlich Ihre „Clip-Region“ zu einem bestimmten Zeitpunkt starten wollen Kontrolle und nicht die Sachen außerhalb dieser Region zeichnen. Ihr Code eingerichtet ist ziemlich gut, das zu tun.

Das andere, was Sie tun können, um ihn zu beschleunigen ist „Double Buffer“. Erstellen Sie eine Komponente, die die Größe Ihrer Karte, rufen getGraphics () für diese Komponente, alles tun, um Ihre Zeichnung zu diesem neuen Grafikobjekt, dann nur Ihre Komponente auf die realen Graphics zieht Objekt in Ihre Farbe-Methode übergeben.

Eine schöne daran ist, dass Sie Ihre gesamte Karte ziehen können, bevor Sie jemals die Farbe Aussage treffen, dann schlagen aus sofort.

Google Double Buffering in Java für weitere Informationen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top