C# 使用C使精灵跟随路径#

C# 使用C使精灵跟随路径#,c#,winforms,path,sprite,C#,Winforms,Path,Sprite,我在大学里做一个计算机项目,我碰到了一个小绊脚石 我正在做一个塔防游戏,我需要让一个精灵(在这个例子中是以图片框的形式)沿着设定的路径走。我试着在网上和这些论坛上寻找答案,但我找到的几乎每一个都使用XNA或其他插件,或者使用另一种编码语言。因为我们必须使用大学计算机,所以安装其他任何东西都不是一个选项,只能是标准的C#框架。我试图为航路点或故事板寻找替代方案,但我的搜索没有结果 如果有人能帮助我,我将非常感激。 谢谢我会填写更多细节,但考虑到作业的内容,我想我只会提供一个大纲: Pictur

我在大学里做一个计算机项目,我碰到了一个小绊脚石

我正在做一个塔防游戏,我需要让一个精灵(在这个例子中是以图片框的形式)沿着设定的路径走。我试着在网上和这些论坛上寻找答案,但我找到的几乎每一个都使用XNA或其他插件,或者使用另一种编码语言。因为我们必须使用大学计算机,所以安装其他任何东西都不是一个选项,只能是标准的C#框架。我试图为航路点或故事板寻找替代方案,但我的搜索没有结果

如果有人能帮助我,我将非常感激。

谢谢

我会填写更多细节,但考虑到作业的内容,我想我只会提供一个大纲:

  PictureBox pbox1 = new PictureBox();
  Point[] path = { new Point(10,100), new Point(150, 60), new Point(100, 120)};
  Timer timer1 = new Timer();
  int curPointIndex = 0;
  int nextPointIndex = 1;
  float percent = 0f;
  float pctIncrement = 1f;

  public Form1()
  {
     InitializeComponent();

     pbox1.Location = path[0];
     pbox1.Size = new Size(32, 32);
     pbox1.BackColor = Color.Red;

     timer1.Interval = 20;
     timer1.Tick += new EventHandler(timer1_Tick);
     timer1.Start();

     this.Controls.Add(pbox1);
     this.components.Add(timer1);
  }

  void timer1_Tick(object sender, EventArgs e)
  {
     percent += pctIncrement;
     // Calculate weighted average based on point number
     // curPointIndex and nextPointIndex in path here.

     // Set pbox1.Location to calculated position here.

     // Check for altering curPointIndex and nextPointIndex here when percent
     // reaches 100 (and reset percent) here.
  }

我已经在我的测试项目中填写了代码,它很有效。需要注意的是,精灵在靠近的点之间移动的速度比在相距较远的点之间移动的速度慢,但我不确定这对您来说是否是个问题。如果是,您可以将pctIncrement更改为与当前点和下一点之间的距离成反比的计算。

我已经添加了一个答案,但我也有一个完全不同的答案。你说你不想使用第三方框架,我不确定这是否越界了。将允许您定义贴图、精灵以及精灵遵循的路径,但随后它将生成一个完全独立的项目,可以加载到Visual C#Express中并独立编译(如果您选择)。它所依赖的一个库是OpenTK,它只是访问OpenGL来处理图形的绘制。该部分可能会越界,但主要用于封装在Display.cs中的图形。它不用于管理任何精灵、贴图或移动的状态。

如果您已经知道如何在WinForms中放置位图,您应该能够从任何XNA示例中获得沿路径移动的部分。例如,看这个问题,他没有使用XNA——他只是引用了“我发现的每个人都使用XNA”。也就是说,我怀疑“正确”的答案可能与计时器控制有关,以及从一个航路点到下一个航路点的导航