2010-10-13 3 views
0

У меня есть массив пикселей, которые составляют 2D-сетку, и я хочу перемещать эти пиксели вправо и влево с течением времени ... постоянно, но цикл, который я придумал, довольно неэффективен и не позволяет для большого расширения с точки зрения изменения движения. Любые идеи о том, как улучшить то, что у меня уже есть, будут высоко оценены.Улучшение эффективности/расширяемости петли

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); 
    } 
    } 
} 

Изменить: К сожалению была ошибка в коде средний цикл должен был быть первым -10 цикл перемещает все пиксели вправо, второй перемещает их обратно в начало координат, а затем налево, третий затем перемещает их обратно в начало координат.

+0

Вы не должны использовать поплавки. – SLaks

+1

Бесконечный цикл - ваша первая проблема ... – JohnFx

+0

, которая в настоящее время просто для простоты, так как x является поплавком и будет изменен. – philbert

ответ

0

Не можете ли вы просто использовать один цикл и использовать int? Три петли кажется избыточным

Используйте один цикл от 0 до й * 2 и выполнять движения, выбирая по значению х

Что-то вроде

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

Вы можете использовать переменное смещение, которые будут использоваться в коде, где фактически используются пиксели. Затем перемещение пикселей вокруг происходит путем изменения смещения, которое является одной строкой кода.

+0

Отличная идея (Y) – philbert