Question

J'ai donc une image mosaïque tile.png et j'essaie de créer une carte en mosaïque sur toute la fenêtre. Je construis cela comme un applet. Voici à quoi ressemble ma méthode de peinture, mais ce n’est pas efficace. Lorsque je lance l'applet, cela prend environ 2 secondes et tout l'écran est peint de gauche à droite avec l'image, plutôt que tout ce qui est rendu en une fois. En outre, tout cela ressemble à un grand tile.png au lieu de 40 petites instances de 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 le fichier tile.png est de 10 x 10 pixels, il s’agit de l’image réelle:

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

Éditer: En utilisant le code ci-dessous et en améliorant l’image en mosaïque, j’ai résolu ce problème. Voici ma nouvelle vignette img au cas où cela pourrait aider quelqu'un:

 tile-new.png

Était-ce utile?

La solution

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

Vous devez effectuer un décalage en fonction de la largeur / hauteur de la tuile.

Autres conseils

En guise de remarque, vous souhaiterez probablement commencer à vérifier votre " Clip Region " à un moment donné et ne pas dessiner de choses en dehors de cette région. Votre code est assez bien configuré pour le faire.

L’autre chose que vous pouvez faire pour accélérer le processus est le "double tampon". Créez un composant de la taille de votre carte, appelez getGraphics () pour ce composant, effectuez tous vos dessins sur ce nouvel objet graphique, puis dessinez simplement votre composant sur le véritable objet Graphics transmis à votre méthode de peinture.

Une bonne chose à ce sujet est que vous pouvez dessiner votre carte dans son intégralité avant de cliquer sur l'instruction Paint, puis l'envoyer instantanément.

Google Double Buffering en Java pour plus d'informations.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top