C# Visual Studio C中的PictureBox小车运动#

C# Visual Studio C中的PictureBox小车运动#,c#,animation,timer,picturebox,C#,Animation,Timer,Picturebox,问题 我有画框,我想让它们移动。我用定时器让它们移动。我可以让它们移动,但每次移动一个像素时,它们都会在以前的位置留下一个白色背景。移动时,它们会使我的文本框闪烁 这就是它的样子: 请不要太在意我拙劣的绘画技巧 代码 public partial class Form1 : Form { int timeTicker; int timeMin; int timeSec; public Form1() { InitializeCompo

问题

我有画框,我想让它们移动。我用定时器让它们移动。我可以让它们移动,但每次移动一个像素时,它们都会在以前的位置留下一个白色背景。移动时,它们会使我的文本框闪烁

这就是它的样子:

请不要太在意我拙劣的绘画技巧

代码

 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:表单
{
国际计时器;
int-timeMin;
int timeSec;
公共表格1()
{
初始化组件();
}
私有无效计时器1_刻度(对象发送方,事件参数e)
{
计时器++;
计时器(计时器);
//playerPics是一个PictureBox阵列,存储了所有图像
TopMovement(playerPics[0],计时器);
}
专用无效计时器(整数秒)
{
timeSec=秒;
如果(秒=60)
{
timeMin+=1;
计时器=0;
}
tbxTimer.Text=“时间:”+timeMin+:“+timeSec;
}
私有void TopMovement(图片框顶部,整数时间)
{
int y=(int)(时间*1.7);
int x=(int)(时间*0.3);
如果(时间<22&&timeMin<1)
{
top.top-=y;
左上角+=x;
}
}
}

尝试将
双缓冲区设置为true代码。此外,计时器从来都不是移动图形的好方法。它总是跳过一个滴答声,对你想做的事情并没有真正的帮助。我刚才写的,看看。这并不完美,但比使用计时器要好得多

尝试将
DoubleBuffered=true代码。此外,计时器从来都不是移动图形的好方法。它总是跳过一个滴答声,对你想做的事情并没有真正的帮助。我刚才写的,看看。这并不完美,但比使用计时器要好得多

查看使用
System.drawing.Graphics
的屏幕外位图进行绘图和动画。设置起来有点棘手,但最终你会得到更好的结果。它还将为你打开一个全新的选择范围,让你可以做其他有趣的事情。你永远不应该让一个控件没有名字:它在窗体上移动吗?将DoubleBuffered=true设置为从1开始,使用屏幕外位图和
System.drawing.Graphics
进行绘图和动画。设置起来有点棘手,但最终你会得到更好的结果。它还将为你打开一个全新的选择范围,让你可以做其他有趣的事情。你永远不应该让一个控件没有名字:它在窗体上移动吗?将From1的DoubleBuffered设置为true,该设置有效。非常感谢你!我看了一下你的代码,但我还是太初学了,无法真正理解它/哦,PictureBox不再是小车了,但文本框仍在闪烁。你是在用我的代码,还是没有麻烦?因为正如我所说,计时器对于游戏来说是个糟糕的选择。(或任何类型的动画)我建议多线程。对于初学者来说,游戏可能不是C#的最佳入门。它很管用。非常感谢你!我看了一下你的代码,但我还是太初学了,无法真正理解它/哦,PictureBox不再是小车了,但文本框仍在闪烁。你是在用我的代码,还是没有麻烦?因为正如我所说,计时器对于游戏来说是个糟糕的选择。(或者任何类型的动画)我建议多线程。对于初学者来说,游戏可能不是最好的C#入门。