2016-02-25 4 views
-1

Я новичок в C#, и у меня возникают некоторые трудности. У меня есть 80 pictureBoxes в панели моей формы. Когда я запускаю свою программу, это приводит к низкой производительности. Мои снимки в режиме исполнения приводят к задержке. Я не понимаю, почему это происходит, может быть, из-за нагрузок pictureBoxes, которые у меня есть? Пожалуйста, кто-нибудь может помочь мне с этим? У меня есть изображение Призрака в pictureBoxe. И некоторые изображения Food in (Dots) pictureBoxes также. Вот мой код.Перемещение PictureBox в Runtime Causes too much Lag

private void Form1_KeyDown(object sender, KeyEventArgs e) 
    { 
     switch (e.KeyCode) 
     { 
      case Keys.Left: 
       GhostPictureBox.Left -= 5; 
       break; 
      case Keys.Right: 
       GhostPictureBox.Left += 5; 
       break; 
      case Keys.Up: 
       GhostPictureBox.Top -= 5; 
       break; 
      case Keys.Down: 
       GhostPictureBox.Top += 5; 
       break; 

     } 


    } 


    private void timer1_Tick(object sender, EventArgs e) 
    { 
     GhostPictureBox.Left -= 5; 

     PictureBox[] Dots = new PictureBox[80]; 


     for (int i = 0; i < Dots.Length; i++) 
     { 
      Dots[i] = (PictureBox)Controls.Find("pictureBox" + (i + 1).ToString(), true)[0]; 

      if (GhostPictureBox.Bounds.IntersectsWith(Dots[i].Bounds)) 
      { 
       Dots[i].Hide(); 

      } 
     } 
    } 
+1

80 картинных ящиков ... которые помнят меня, когда я начал изучать VB XD, пожалуйста, не делайте этого, игры не запрограммированы с помощью ящиков изображений, не используют DirectDraw, OpenGL или, по крайней мере, WPF, которые имеют аппаратное ускорение. – Gusman

+3

Да, слишком много PictureBoxes. Избавьтесь от них всех и просто рисуйте изображения в событии краски контейнера. WinForm лучше работает в бизнес-приложениях, чем приложения, которые вы пытаетесь создать. – LarsTech

+1

Это очень возможно с GDI +, но вы должны использовать только один кадр (или просто рисовать на фоне). –

ответ

0

Это игра типа PacMan? Похоже, вы загружаете точки и делаете FindControl каждый раз, когда вы проверяете один, и все, что каждый галочек, чтобы БЫЛО сделать его очень медленно. Возможно, просто сделайте массив глобальным, как только они будут созданы, тогда вам нужно будет только проверить пересечение. Но даже просто загружая точки один раз, прежде чем цикл, вероятно, поможет много. Однако вам действительно нужно сделать это только один раз в начале уровня.

+0

Хорошо спасибо за предложение, и да, я создаю игру типа pacman. – zubaida12

Смежные вопросы