Efficacement dessiner une grille en Windows Forms
Je suis en train d'écrire une implémentation de Conway du Jeu de la Vie en C#. C'est le code que j'utilise pour dessiner la grille, c'est dans mon panel_Paint événement. g est le contexte graphique.
for (int y = 0; y < numOfCells * cellSize; y += cellSize)
{
for (int x = 0; x < numOfCells * cellSize; x += cellSize)
{
g.DrawLine(p, x, 0, x, y + numOfCells * cellSize);
g.DrawLine(p, 0, x, y + size * drawnGrid, x);
}
}
Quand je lance mon programme, il ne répond pas jusqu'à ce qu'il termine le dessin de la grille, ce qui prend quelques secondes à numOfCells = 100 & cellSize = 10. La suppression de tous les multiplication rend plus rapide, mais pas par beaucoup.
Est-il un meilleur/le plus efficace pour attirer mon réseau?
Grâce
Si vous venez en une seule étape grâce à ce dans l'IDE, vous seriez en mesure de répondre à votre propre question.
Comme c'est drôle, c'est que. J'ai sérieusement juste codé de la cellule-ajouter des trucs pour
Comme c'est drôle, c'est que. J'ai sérieusement juste codé de la cellule-ajouter des trucs pour
game of life
et cherché un moyen de dessiner une grille. La première chose que je vois, c'est quelqu'un de poser cette option pour tracer la grille pour game of life
:D.
OriginalL'auteur Joel | 2010-05-02
Vous devez vous connecter pour publier un commentaire.
Le problème, c'est que vous dessinez les X lignes pour chaque coordonnée Y de la. Vous pouvez simplifier d'abord par juste le rendu de l'axe des lignes dans une boucle, puis les X lignes dans une autre boucle.
Voici un exemple rapide
Que vous progressez, vous pouvez utiliser le double buffering pour réduire toute clignotant etc. Jetez un oeil à Contrôler.SetStyle < br/>
http://msdn.microsoft.com/en-us/library/system.windows.forms.control.setstyle.aspx
d'accord. J'ai du mal avec ce moment de répondre, de mon point de vue est que l'OP ne voyait pas le problème de base, et c'est pourquoi je vais pour le manifeste tout d'abord et puis une fois que le problème est comprise améliorer à partir de là. Mais juste une opinion.
Ugh, je ne sais pas ce que je pensais avec des boucles imbriquées. Merci pour l'aide. Activer le double mise en mémoire tampon ne semble pas faire quoi que ce soit, mais ce n'est pas grave, il n'y a qu'un peu de scintillement quand je le démarre.
vous devriez regarder Thomas solution qui est encore plus optimisée puisqu'elle ne fait qu'une seule boucle plutôt que les 2 ci-dessus.
C'est effectivement la solution que j'ai utilisé, depuis ma grille est un carré. Cependant, j'ai choisi la solution, la réponse étant donné que vous avez donné un peu plus de détails.
OriginalL'auteur Chris Taylor
Vous n'avez pas besoin de boucles imbriquées :
OriginalL'auteur Thomas Levesque
Créer une image bitmap de, disons, 100x100 pixels avec les lignes de la grille et de l'afficher dans les carreaux.
Assurez-vous que le joint entre les carreaux de ne pas entraîner une discontinuité dans les espaces de la grille.
OriginalL'auteur shoosh
Vous devriez jeter un oeil à XNA pour cela. Il serait probablement plus efficace de le faire dans une fenêtre au lieu d'un WinForm.
XNA est le jeu de cadre pour C#.
Rechercher plus d'informations à http://creators.xna.com/
OriginalL'auteur Kurru
Je sais que c'est tard, mais ici...
OriginalL'auteur Ushan Dissanayake