0

所以我想要一个沿着所附屏幕截图中的白线移动的图像。但我不确定如何实现这一点。这是我的示例坐标:

141,78 和 509,223

我画一条线来可视化路径,最终我想在一段时间内将图像从开始移动到结束。假设5分钟。

在过去的 18 小时里,我一直在互联网上搜索,但我仍然卡住了。任何人都可以帮忙吗?

在此处输入图像描述

4

1 回答 1

1

您需要一个游戏循环和以固定间隔执行代码的东西。如果这是您想要做的唯一动画,那么更简单的计时器组件可以触发更新位置的代码,比如说每秒 50 次 ( Interval=20 ms)。

这是在一个空的顶部绘制的图像的一些骨架代码PictureBox

public partial class Form1 : Form
{
    float t = 0;

    public Form1()
    {
        InitializeComponent();
    }

    private void pictureBox1_Resize(object sender, EventArgs e)
    {
        pictureBox1.Refresh();
    }

    private void pictureBox1_Paint(object sender, PaintEventArgs e)
    {
        Image img = Resources.Image1;
        float dx = img.Width, dy = img.Height;
        float r = 100;
        e.Graphics.TranslateTransform(pictureBox1.Width / 2, pictureBox1.Height / 2);
        e.Graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
        // draw a gray circle to indicate the path visually
        e.Graphics.DrawEllipse(Pens.Gray, -r, -r, 2 * r, 2 * r);

        // you must set the x,y coordinate of the center of the image
        // according to your path.
        // If it is a line use linear interpolation
        // x = x_start + t*(x_end-x_start);
        // y = y_start + t*(y_end-y_start);
        float x = (float)(r * Math.Cos(2 * Math.PI * t));
        float y = -(float)(r * Math.Sin(2 * Math.PI * t));

        e.Graphics.DrawImageUnscaled(img, (int)(x - dx / 2), (int)(y - dy / 2));
    }

    private void timer1_Tick(object sender, EventArgs e)
    {
        if (t >= 1)
        {
            t -= 1;
        }
        t += 0.02f;
        pictureBox1.Refresh();
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        timer1.Interval = 20;
        timer1.Start();
    }
}

scr

于 2016-07-16T16:37:28.993 回答