none
Отрисовка приметивов RRS feed

  • Вопрос

  • Привет всем!

    Делаю редактор(в Windows Application) уровней для игрушки, где мне необходимо отрисовывать сетку. Отрисовываю я ее методом DrawLine в циклах. Но отрисовка происходит слишком медленно, при вызове Invalidate() все  моргает....

    Без использования XNA  и другой ерунды можно тут обойтись?

    30 августа 2011 г. 13:46

Ответы

  • Что тут может тормозить?

     

    using System.Drawing;
    using System.Windows.Forms;
    
    namespace WindowsFormsApplication120
    {
     public partial class Form1 : Form
     {
      public Form1()
      {
       DoubleBuffered = true;
      }
    
      protected override void OnPaint(PaintEventArgs e)
      {
       const int step = 20;
       for (int i = 0; i < Width; i += step)
        e.Graphics.DrawLine(Pens.DeepSkyBlue, i, 0, i, Height);
       for (int i = 0; i < Height; i += step)
        e.Graphics.DrawLine(Pens.DeepSkyBlue, 0, i, Width, i);
      }
     }
    }
    

     


    • Помечено в качестве ответа Abolmasov Dmitry 1 сентября 2011 г. 9:36
    30 августа 2011 г. 13:57
    Отвечающий
  • стройте сетку и выводите ее в Bitmap - только один раз.
    в OnPaint выводите Bitmap

    P.S.
    в конструктор формы или контрола добавьте
    this.SetStyle(ControlStyles.UserPaint | ControlStyles.OptimizedDoubleBuffer | ControlStyles.AllPaintingInWmPaint, true);

    • Изменено Malobukv 30 августа 2011 г. 14:05 добавил P.S.
    • Помечено в качестве ответа Abolmasov Dmitry 1 сентября 2011 г. 9:36
    30 августа 2011 г. 13:59

Все ответы

  • Что тут может тормозить?

     

    using System.Drawing;
    using System.Windows.Forms;
    
    namespace WindowsFormsApplication120
    {
     public partial class Form1 : Form
     {
      public Form1()
      {
       DoubleBuffered = true;
      }
    
      protected override void OnPaint(PaintEventArgs e)
      {
       const int step = 20;
       for (int i = 0; i < Width; i += step)
        e.Graphics.DrawLine(Pens.DeepSkyBlue, i, 0, i, Height);
       for (int i = 0; i < Height; i += step)
        e.Graphics.DrawLine(Pens.DeepSkyBlue, 0, i, Width, i);
      }
     }
    }
    

     


    • Помечено в качестве ответа Abolmasov Dmitry 1 сентября 2011 г. 9:36
    30 августа 2011 г. 13:57
    Отвечающий
  • стройте сетку и выводите ее в Bitmap - только один раз.
    в OnPaint выводите Bitmap

    P.S.
    в конструктор формы или контрола добавьте
    this.SetStyle(ControlStyles.UserPaint | ControlStyles.OptimizedDoubleBuffer | ControlStyles.AllPaintingInWmPaint, true);

    • Изменено Malobukv 30 августа 2011 г. 14:05 добавил P.S.
    • Помечено в качестве ответа Abolmasov Dmitry 1 сентября 2011 г. 9:36
    30 августа 2011 г. 13:59
  • Пожалуйста, не забывайте отмечать ответы. Спасибо.
    Для связи [mail]
    1 сентября 2011 г. 9:36