2016-06-10 72 views
1

问题PictureBox的越野车运动

我有PictureBoxes,我希望他们移动。我让他们使用计时器移动。我可以让他们移动,但每次移动一个像素时,他们都会在之前的位置留下白色背景。当移动时,他们让我的文本框闪烁。

这是它的外观:https://gyazo.com/cdd17b0e88a86b4dec115ceff41b44c5

请不要太注意我差的油漆技能

代码

public partial class Form1 : Form 
{ 

    int timeTicker; 
    int timeMin; 
    int timeSec; 

    public Form1() 
    { 
     InitializeComponent(); 
    } 

    private void timer1_Tick(object sender, EventArgs e) 
    { 
     timeTicker++; 

     Timer(timeTicker); 

     //playerPics is a PictureBox array that has all the images stored 
     TopMovement(playerPics[0],timeTicker); 
    } 

    private void Timer(int secs) 
    { 
     timeSec = secs; 
     if(secs == 60) 
     { 
      timeMin += 1; 
      timeTicker = 0; 
     } 
     tbxTimer.Text = "Time: " + timeMin + ":" + timeSec; 
    } 

    private void TopMovment(PictureBox top, int time) 
    { 
     int y = (int)(time * 1.7); 
     int x = (int)(time * 0.3); 

     if (time < 22 && timeMin < 1) 
     { 
      top.Top -= y; 
      top.Left += x; 
     } 
    } 
} 
+1

看着用'System.Drawing.Graphics'使用屏幕位图来完成你的绘图和动画。设置起来有点棘手,但最终你会得到更好的结果。它还将为你开展其他有趣的事情开辟全新的选择范围。 –

+0

你永远不应该离开没有名字的控件:D – carefulnow1

+0

它在窗体上移动吗?设置DoubleBuffered = true从From1 – TaW

回答

0

尝试把DoubleBuffered = true;在构造函数。另外,计时器从来不是移动图形的好方法。它总是会跳过一个勾号,对于你想要做的事情并没有什么用处。我前一段时间写过,请查看。这不是完美的,但比使用计时器更好的lothttp://pastebin.com/9P77eaAU

+0

它的工作。非常感谢你! 我看了一下你的代码,但我还是太了解初学者了。 :/ –

+0

哦,PictureBox不再有问题,但TextBox仍在闪烁。 https://gyazo.com/caa3728ebc15ffa69684c0963cb003c7 –

+0

你使用我的代码还是你没有打扰?因为正如我所说的,一个计时器是一个游戏的不错选择。 (或者任何类型的动画)。我会建议使用多线程,对于初学者来说,一款游戏可能不是C#的最佳介绍。 – carefulnow1