2012-05-15 3 views
1

J'ai créé un labyrinthe 2D composé de 2 ensembles de tableaux booléens, se référant à la verticale et aux murs horizontaux de mon labyrinthe. Ce labyrinthe est actuellement de 12 x 12, mais je veux seulement montrer 5 x 5.Android/Java - Zoom sur ma toile dessinée

Existe-t-il un moyen de zoomer le labyrinthe à une circonférence 5 x 5 de l'endroit où se trouve l'utilisateur et ensuite montrer simplement le bloc suivant le temps qu'ils bougent, donc ne montrant jamais que 5 x 5.

Idéalement, je tiens à tirer le dessin tout en ayant simplement une sorte de zoom birdseye vue (cela permettra d'améliorer la convivialité et généralement accélérer l'application).

EDIT est Ci-dessous le code que je suis actuellement en utilisant pour dessiner le labyrinthe. Toutefois, le code ci-dessous ne semble pas dessiner les lignes v et hLines correctes lorsque je déplace le cercle utilisateur.

public void onDraw(Canvas canvas) 
{ 
    canvas.drawRect(0, 0, width, height, background); 
    mazeSizeX = 5 + maze.getCurrentX(); 
    mazeSizeY = 5 + maze.getCurrentY(); 
    for(int i = maze.getCurrentX(); i < mazeSizeX; i++) 
    { 
     for(int j = maze.getCurrentY(); j < mazeSizeY; j++){ 
      float x = j * totalCellWidth; 
      float y = i * totalCellHeight; 
      if(j < mazeSizeX -1 && vLines[i][j]) { 
       //we'll draw a vertical line 
       canvas.drawLine(x + cellWidth, //start X 
           y,    //start Y 
           x + cellWidth, //stop X 
           y + cellHeight, //stop Y 
           line); 
      } 
      if(i < mazeSizeY -1 && hLines[i][j]) { 
      //we'll draw a horizontal line 
       canvas.drawLine(x,    //startX 
           y + cellHeight, //startY 
           x + cellWidth, //stopX 
           y + cellHeight, //stopY 
           line); 
      } 
     } 
    } 
} 

NOTE - mazeSizeX et Y sont intially mis sur 5. Toute guidenece plus que là où je me trompe serait très apprécié.

EDIT 2: Veuillez voir l'image ci-dessous pour indiquer 3 étapes différentes qu'un utilisateur a pu suivre pour vous aider à mieux comprendre le problème que je rencontre. La première image est le point de départ et a été tracée comme il se doit, mais lorsque j'ai commencé à déplacer le cercle de l'utilisateur autour des lignes ne sont pas dessinés correctement.

3 differnt user position showing drawLine issue

Enfin, s'il vous plaît voir ci-dessous le tableau booléen actuel que je utilise pour dessiner les murs de Waze:

boolean[][] vLines = new boolean[][]{ 
         {true ,false,false,false,true ,false,false}, 
         {true ,false,false,true ,false,true ,true }, 
         {false,true ,false,false,true ,false,false}, 
         {false,true ,true ,false,false,false,true }, 
         {true ,false,false,false,true ,true ,false}, 
         {false,true ,false,false,true ,false,false}, 
         {false,true ,true ,true ,true ,true ,false}, 
         {false,false,false,true ,false,false,false} 
        }; 
boolean[][] hLines = new boolean[][]{ 
         {false,false,true ,true ,false,false,true ,false}, 
         {false,false,true ,true ,false,true ,false,false}, 
         {true ,true ,false,true ,true ,false,true ,true }, 
         {false,false,true ,false,true ,true ,false,false}, 
         {false,true ,true ,true ,true ,false,true ,true }, 
         {true ,false,false,true ,false,false,true ,false}, 
         {false,true ,false,false,false,true ,false,true } 
        }; 

Merci à l'avance

+1

Il est très difficile de répondre à cela sans en savoir plus sur la façon dont vous faites aujourd'hui .. Je –

+0

essentiellement un tableau de booléens par exemple vrai, vrai, faux etc, le vrai va dessiner une ligne solide faux rien. Ceux-ci seront utilisés comme labyrinthe de mur. Ensuite, je lance un onDraw pour créer tout le labyrinthe à la fois, puis il y a 2 autres points qui sont dessinés, 1 pour la position de départ définie avec cordinaltion (x, y) et la même chose pour le point finsih. J'espère que ce qui précède est clair, s'il y a quelque chose de spécifique s'il vous plaît faites le moi savoir et je vais essayer d'être plus spefic. Merci –

Répondre

1

J'utiliser deux variables, scroll_x et scroll_y que vous utilisez pour dessiner et modifier lorsque vous vous déplacez, de sorte que votre labyrinthe est toujours dessiné en 5 x 5 et vous utilisez les deux variables pour déterminer le décalage des parties de la carte que vous devez dessiner.

En outre, vous pouvez implémenter zoom_x et zoom_y variables pour changer le zoom si vous le souhaitez.

Puisque vous utilisez la méthode onDraw, cela exclut toutes les possibilités auxquelles je peux penser «peindre tout une fois et déplacer la carte».

C'est la meilleure réponse que je peux donner pour le moment, en fonction de votre description du problème.

EDIT:

Maintenant que vous avez fourni plus d'informations, voici un onDraw pour vous redessinée:

Dans la fonction ci-dessous, j'ai utilisé maze.scrollX et maze.scrollY travailler le défilement offset si le labyrinthe est plus grand que 5 x 5. J'ai également ajouté drawSize propriétés pour définir la taille que vous voulez dessiner. Si vous êtes dans la partie supérieure gauche de la carte, les deux devraient être mis à zéro. Je n'ai pas testé ce code moi-même, alors informez-moi sur son fonctionnement.

Veuillez noter que ce code n'a pas de vérification d'erreur, si maze.scrollX est trop grand, alors il va provoquer une erreur.

public void onDraw(Canvas canvas) 
{ 
    canvas.drawRect(0, 0, width, height, background); 
    int drawSizeX = 5; 
    int drawSizeY = 5; 
    for(int i = 0; i < drawSizeX - 1; i++) 
    { 
     for(int j = 0; j < drawSizeY - 1; j++){ 
      float x = j * totalCellWidth; 
      float y = i * totalCellHeight; 
      if(vLines[i + maze.scrollX][j + maze.scrollY]) { 
       //we'll draw a vertical line 
       canvas.drawLine(x + cellWidth, //start X 
           y,    //start Y 
           x + cellWidth, //stop X 
           y + cellHeight, //stop Y 
           line); 
      } 
      if(hLines[i + maze.scrollX][j + maze.scrollY]) { 
      //we'll draw a horizontal line 
       canvas.drawLine(x,    //startX 
           y + cellHeight, //startY 
           x + cellWidth, //stopX 
           y + cellHeight, //stopY 
           line); 
      } 
     } 
    } 
} 
+0

Merci pour le conseil, je vais regarder cela au cours des prochains jours (aussi occupé au travail en ce moment) et vous permettra de savoir comment je m'entends. Merci –

+0

Bonne chance, je peux essayer de vous aider plus si vous fournissez plus d'informations (le code pour la façon dont vous faites le dessin par exemple). Mais c'est aussi bien si vous l'essayez par vous-même :) –

+0

Je crée le labyrinthe d'une manière similaire à votre réponse, qui dessine le zoom correctement. Cependant, quand je déplace mon curseur, il ne dessine pas les nouvelles lignes pour une raison quelconque, s'il vous plaît voir ma question éditée avec un code coupé de la façon dont je dessine le labyrinthe. Merci –

Questions connexes