Partage
  • Partager sur Facebook
  • Partager sur Twitter

[java] probleme de scrolling

    5 avril 2006 à 22:51:50

    Bonjour, je suis en train de realiser des tests pour l'affichage d'un jeu en 2d vue du dessus et je me cantonne a un probleme,
    j'ai codé une méthode qui selon les coordonnées que l'on rentre (par exemple 1000, 1000)
    nous affiche ce que l'on voit de 600, 700 a 1400, 1300 (si la resolution est de 800x600cela semblait marcher mais si dans ma boucle d'affichage j'augmente la coordonnée x, le scroll marcha mais les tiles se changent, voila donc si quelqu'un peut m'expliquer pourquoi, je vous remerci.

    ca c'est ma fonction pour afficher un tile (je pense pas que le provienne de la mais pour comprendre le code c'est mieu

    private void drawChip(String path ,int dx, int dy, int tile, Graphics g){
            Image img;
            int sx,sy;
            img = new ImageIcon(path).getImage();
            sx = (tile %8);//le fichier tile est composé de 8 colones de 32 cases chacunes
            sy = ((int) (tile /8));
            buffer.drawImage(img,dx,dy,dx+TILE,dy+TILE,sx*TILE,sy*TILE ,(sx+1)* TILE,(sy+1)*TILE,null);
        }


    et ca la fonction qui est censé m'afficher ma carte:

    private void afficheEcran(int x, int y, String chipset){
            int tilecourante;
            //coordonnées du coin sup gauche de l'ecran
            int x1=x-(RESOX/2);int y1=y-(RESOY/2);
            //coordonnées du coin inf droit de l'ecran
            int x2=x1+RESOX;int y2=y1+RESOY;
           
            //recupere les x,y de la matrice de la map
            int tdebx = (int) (x1/TILE);//tile x du debut
            int tfinx = (int) (x2/TILE)+1;//tile x de fin
            int tdeby = (int) (y1/TILE);
            int tfiny = (int) (y2/TILE)+1;
           
            int debouclex = (tdebx*TILE)-x1; int finbouclex = (tfinx*TILE)-x1;
            int deboucley = (tdeby*TILE)-y1; int finboucley = (tfiny*TILE)-y1;
           
            for (int i=debouclex; i<finbouclex; i+=TILE)
                for (int j=deboucley; j<finboucley; j+=TILE){
                    this.drawChip(chipset, i, j, map[tdebx][tdeby],buffer);
                    tdebx++; tdeby++;
                   
                }
                   
        }


    la map est contenu dans une matrice de 10000x10000 generée aleatoirement au debut de l'application

    et ma boucle qui affiche la carte et rafraichi:

    public void graphicalRender() {
            //dessine la carte
           
            this.afficheEcran(x,y,"chip.png");
            //affiche un perso sur la carte
            this.drawImage("perso.png", 400-11, 300-22, 21,45, buffer);
            //augmente x, =>deplacement laterale de la carte vers la gauche
            x++;
           
            //on envoie toutes les données du buffer mémoire vers le buffer d'affichage (équivalent d'un flush en C/C++)
            strategy.show();
           
        }


    je precise que je me suis basé unr un algo de double buffering hardware pour afficher ma carte au cas ou ca ai de l'importance.

    Voila j'espere que vous n'avez besoin de rien d'autres, en fait le principe (si mal expliqué plus haut) est de passer à la fonction afficheEcran les coordonnés de l'endroit que je veux voir et que juste d'apres la matrice, il me genere la carte correspondante visible afin de ne pas avoir à calculer le reste de la map qui est invisible et donc inutile de calculer.

    Voila je remercie d'avance celui ou celle qui m'aidera bien que je ne suis pas sur d'etre sur le bon forum pour ca.
    • Partager sur Facebook
    • Partager sur Twitter

    [java] probleme de scrolling

    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
    • Editeur
    • Markdown