c# - 小游戏形式

标签 c# winforms

我正在尝试用 C#(Windows 形式)制作一个迷你游戏,例如太空入侵者。飞船飞得很好,但我没有得到多个镜头,我有一个方法 timer_Tick 来制作动画,当我按空格键拍摄时,第一个镜头工作正常,但第二个镜头。这个半位置的第一个镜头消失了。镜头是pictureBox,我尝试了pictureBox列表,但没有成功。

我有这样的东西:

    public void Form1_Load(object sender, EventArgs e)
    {
        shootP = new PictureBox();
        shootP.Image = Properties.Resources.shoot_1;
        shootP.SizeMode = PictureBoxSizeMode.Zoom;
        shootP.Size = new Size(10, 72);  
        ListShoot = new List<PictureBox>();      
        int i = -1;
    }
     private void Form1_KeyDown(object sender, KeyEventArgs e)
     {

        if (e.KeyCode == Keys.Space)
        {
        control = false;
        i++;
        ListShoot.Add(shootP);
        timeShoot.Start();
     }

      private void timeShoot_Tick(object sender, EventArgs e)
      {
        if (control == false)
        {   
            ListShoot[i].Location = new Point(spacecraft._imageBox.Location.X + 50, spacecraft._imageBox.Location.Y - 55);  // align the shoot with spacecraft
            control = true;     
        }

            ListShoot[i].Top -= 40;
      }

我做错了什么?

最佳答案

您每次都需要创建一个新图像,就像在aliassce的答案中一样。

private void Form1_KeyDown(object sender, KeyEventArgs e)
 {
    if (e.KeyCode == Keys.Space)
    {
      control = false;
      shootP = new PictureBox();
      shootP.Image = Properties.Resources.shoot_1;
      shootP.SizeMode = PictureBoxSizeMode.Zoom;
      shootP.Size = new Size(10, 72);
      ListShoot.Add(shootP);
      timeShoot.Start();
    }
 }

然后您需要更新列表中所有图像的位置。使用 foreach 循环并放弃 int 迭代器。

private void timeShoot_Tick(object sender, EventArgs e)
  {
    if (control == false)
    {   
       foreach PictureBox shot in ListShot
       {
           shot.Location = new Point(spacecraft._imageBox.Location.X + 50, spacecraft._imageBox.Location.Y - 55);  // align the shoot with spacecraft
           shot.Top -= 40;
       }
       control = true;
    }
  }

您可能还需要更新绘制图像以循环遍历列表的代码。像这样的东西:

foreach PictureBox shot in ListShoot
{
   draw(shot);
}

最后,您可能需要时不时地清理列表,以删除不再出现在屏幕上并且不再需要更新或绘制的任何镜头。

关于c# - 小游戏形式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12992006/

相关文章:

c# - 从特定文件夹执行命令行

c# - 部署到 Azure 网站后访问路径被拒绝(发生类型 'System.UnauthorizedAccessException' 的异常)

c# - TreeView私有(private)变量清除

c# - 只有一个 Paint 事件被调用

c# - 确定文件身份的算法(优化)

c# - 在 Visual Studio C# Express 2010 中调试 Nunit 测试

c# - .NET - 用单个 using 语句替换嵌套的 using 语句

c# - 使用 C# 在数据 GridView 中更新时替换数据

c# - 如何防止工具提示在自定义控件中闪烁?

c# - 具有圆边的自定义 GroupBox