更新新位置时图像闪烁

时间:2017-02-04 22:38:54

标签: c# timer paint paintevent

我有2个图片对象。 我希望他们俩都从右向左移动。 如果一个人离开可见面板,我将其位置替换为起点。 所以屏幕上总会有2张图片在移动。

如果我不使用计时器,则会绘制2张照片。但是如果我使用带有刻度事件的计时器来更新它们的位置以使它们移动,则只显示1张图片并且它会一直闪烁,滞后......

以下是我的代码。我不熟悉C#。感谢任何帮助。谢谢。

计时器间隔= 30; 表格1:

public partial class Form1 : Form
{
    Background bg1 = new Background();
    Background bg2 = new Background(800);

    public Form1()
    {
        InitializeComponent();
    }

    private void flowLayoutPanel1_Paint(object sender, PaintEventArgs e)
    {
        bg1.paint(e);
        bg2.paint(e);
    }

    private void Timer_Tick(object sender, EventArgs e)
    {
        bg1.updatePosition();
        bg2.updatePosition();

        this.Refresh();
    }
}

背景:

class Background
{
    int bg_width = 800;
    int bg_height = 500;

    Image bg;
    Rectangle wb;
    private static int x = 0;

    public Background()
    {
        bg = Properties.Resources.bg;
        wb = new Rectangle(x, 0, bg_width, bg_height);
    }

    public Background(int custom_x)
    {
        x = custom_x;
        bg = Properties.Resources.bg;
        wb = new Rectangle(x, 0, bg_width, bg_height);
    }

    public void paint(PaintEventArgs e)
    {
        Graphics g = e.Graphics;
        g.DrawImage(bg, wb);
    }

    public void updatePosition()
    {
        x--;
        if (x == -800)
        {
            x = 801;
        }
        wb.Location = new Point(x, 0);
    }
}

1 个答案:

答案 0 :(得分:-1)

我不是视觉工作室计时器的忠实粉丝,但我会尽量保持计时器间隔尽可能低,并且每次更新时移动2张图片,这将解决“滞后”问题。

它只显示一张图片

wb.Location = new Point(x, 0);

将两张图片的绳索设置为x和0 - >在彼此里面 - >只有第二个是可见的

替换它应该解决它

wb.Location = new Point(x, wb.Location.y);

这基本上使得y绳索不会改变。