2010-10-13 4 views
0

J'ai un tableau de pixels qui constitue une grille 2D et je veux déplacer ces pixels à droite et à gauche avec le temps ... en permanence, mais la boucle que j'ai créée est assez inefficace et ne permet pas pour beaucoup d'expansion en termes de changement de mouvement. Toute idée sur la façon d'améliorer ce que j'ai déjà serait très appréciée.Amélioration de l'efficacité/de l'extensibilité de la boucle

while (true) 
{ 
    for (float i = 0; i < x; i++) 
    { 
    foreach (Pixel p in pixels) 
    { 
     p.move(10, 0); 
    } 
    } 
    for (float i = 0; i < x * 2; i++) 
    { 
    foreach (Pixel p in pixels) 
    { 
     p.move(-10, 0); 
    } 
    } 
    for (float i = 0; i < x; i++) 
    { 
    foreach (Pixel p in pixels) 
    { 
     p.move(10, 0); 
    } 
    } 
} 

Edit: Désolé avait une erreur dans le code de la boucle intermédiaire nécessaire pour être -10 la première boucle se déplace tous les pixels à droite, le second les déplace de nouveau à l'origine, puis vers la gauche, la troisième boucle puis les ramène à l'origine. Vous ne pouvez pas utiliser une seule boucle et utiliser int?

+0

Vous ne devriez pas utiliser de flotteurs. – SLaks

+1

La boucle infinie est votre premier problème ... – JohnFx

+0

qui est actuellement juste pour la simplicité car x est un flottant, et sera changé. – philbert

Répondre

0

Trois boucles semble être redondant

Utiliser une boucle de 0 à x * 2 et effectuer le mouvement du choix sur la valeur x

Quelque chose comme

for(int i = 0; i < x * 2; i++) 
{ 
    foreach(Pixel p in pixels) 
    { 
     if (i < x) 
     { 
      p.move(0.1, 0); 
      p.move(10, 0); 
      p.move(10, 0); 
     } 
     else 
      p.move(10,0) 
    }  
} 
1

Vous pouvez utiliser une variable de décalage à utiliser dans le code où les pixels sont réellement utilisés. Le déplacement des pixels est ensuite effectué en changeant le décalage, qui est une ligne de code.

+0

Bonne idée merci (Y) – philbert

Questions connexes