2013-11-30 2 views
-3
public PbsWheel(AnimatedPictureBox.AnimatedPictureBoxs[] pbs, AnimatedPictureBox.AnimatedPictureBoxs pb, int delta,Label label2) 
     { 
      for (int i = 0; i < pbs.Length; i++) 
      { 

       if (delta > 0) 
       { 
        pbs[i].AnimateRate += 1/60 * 1000; 

1/60 * 1000 - 60 кадров в секунду?Это 60 кадров в секунду?

Это то, как я анимирует изображение. Изображения внутри. Im используя таймер для каждого PictureBox:

public class AnimatedPictureBoxs : PictureBox 
     { 
      public static bool images; 
      List<string> imageFilenames; 
      Timer t = new Timer(); 
      public AnimatedPictureBoxs() 
      { 
       images = false; 
       AnimateRate = 100; //It's up to you, the smaller, the faster. 
       t.Tick += Tick_Animate; 
      } 
      public int AnimateRate 
      { 
       get { return t.Interval; } 
       set { t.Interval = value; } 
      } 
      public void Animate(List<string> imageFilenames) 
      { 
       this.imageFilenames = imageFilenames; 
       t.Start(); 
      } 
      public void StopAnimate() 
      { 
       t.Stop(); 
       i = 0; 
      } 
      int i; 
      private void Tick_Animate(object sender, EventArgs e) 
      { 
       if (images == true) 
       { 
        imageFilenames = null; 
       } 
       if (imageFilenames == null) 
       { 
        return; 
       } 
       else 
       { 
        try 
        { 
         if (i >= imageFilenames.Count) 
         { 
          i = 0; 
         } 
         else 
         { 

          Load(imageFilenames[i]); 
          i = (i + 1) % imageFilenames.Count; 

         } 
        } 
        catch (Exception err) 
        { 

        } 
       } 
      } 

Скорости устанавливаются на 100, что я хочу сделать, это показать и когда я переместить колесо мыши вверх вниз, чтобы изменить скорость изображений анимации кадров в секунду.

pbs - массив изображений.

+1

Я думаю, что это 0. Это целочисленная арифметика и '1/60' == 0. –

ответ

4
pbs[i].AnimateRate += 1/60 * 1000; 

AnimateRate является целочисленным свойством. Это очень плохо названо. Это не ставка. Это интервал таймера. В математическом плане это период. Именование его скорости заставляет его звучать так, как будто это будет скорость или частота.

Математическая зависимость между периодом Т и частотой Р:

T = 1/f 

Итак, вот что вы должны сделать:

  1. Переименовать свойство, как AnimationInterval.
  2. Когда вам нужно преобразовать частоту (то есть частоту кадров) в интервал, используйте приведенную выше формулу.

Обратите внимание, что вы должны учитывать тот факт, что ваши частоты измеряется в кадрах в второй, но ваши интервалы измеряются в милли-секунды. Таким образом, ваш код должен быть:

pbs[i].AnimationInterval += 1000/60; 

Это похоже на то, что у вас было, но есть тонкая разница. В математике формулы идентичны. Но в C# поведение оператора / зависит от типов его операндов. Вы поставляете два целых числа, и поэтому / является целым делением. И результат 1/60 равен нулю. Таким образом, ваш код не изменяет свойство.

Я действительно думаю, что вам нужно немного изменить свою логику. Как бы то ни было, ваши исходные данные являются интервалом. Но на самом деле то, что вы хотите контролировать, если частота кадров. Поэтому я считаю, что вы должны поддерживать переменную, которая поддерживает частоту кадров. Если вы хотите его изменить, внесите изменения в переменную частоты кадров. А затем установите интервал следующим образом:

pbs[i].AnimationInterval = 1000/frameRate; 
Смежные вопросы