在计时器中编码时,随机图片框不会移动

时间:2020-03-18 07:00:17

标签: c# winforms timer picturebox

我不知道我是否仍然缺少此功能,但是每当要添加PictureBox时,只需在Toolbox上找到它并将其拖到UI上即可。但是我要做的是通过添加PictureBox进行编码,然后我想要将其向右移动。我在Timer上编写了代码,这就是我的工作方式。

 private void enemyMove_Tick(object sender, EventArgs e)
    {
        GameMenu menu = new GameMenu();

        if (menu.cmbox_Level.Text.Equals("Easy"))
        {

            this.Controls.Add(menu.EnemyTank);
            menu.EnemyTank.Width = 26;
            menu.EnemyTank.Height = 32;
            menu.EnemyTank.BackgroundImage = Properties.Resources.Tank_RIGHT_v_2;
            menu.EnemyTank.BackgroundImageLayout = ImageLayout.Stretch;
            menu.EnemyTank.Left += 2;
        }
    }

不要问我计时器是否启动。是的,它已经开始,已在表单上编码。但是以某种方式,当我启动程序时,它不会移动。但是后来我尝试添加PictureBox,这次我尝试将其拖动到UI,然后在其上添加一个Image,然后通过向右移动对其进行编码。当我启动程序时,它可以工作。但是我想要的是,每当我启动按钮时,它只会使随机PictureBox向右移动。 Idk这里缺少什么。

1 个答案:

答案 0 :(得分:0)

我做了一些假设。如果我的假设不正确,请更新您的帖子以获取详细信息。以下内容是从我的评论中复制的。

  1. 新的GameMenu将始终创建新的EnemyTank
  2. EnemyTank的默认Left值是固定的;

您的enemyMove_Tick继续创建GameMenuEnemyTank。 也就是说,每个刻度都将创建一个EnemyTank,并将代码中的值更改为“默认值加2”。

为避免这种情况,您必须将EnemyTank实例保留在某个地方,而不是继续创建它。

这是一个例子。

 GameMenu m_menu;

 void YourConstructor()
    {
            //  InitializeComponent();
            //  something else in your form constructor
            m_menu = new GameMenu();

            m_menu.EnemyTank.Width = 26;
            m_menu.EnemyTank.Height = 32;
            m_menu.EnemyTank.BackgroundImage = Properties.Resources.Tank_RIGHT_v_2;
            m_menu.EnemyTank.BackgroundImageLayout = ImageLayout.Stretch;
            this.Controls.Add( m_menu.EnemyTank );
    }
 private void enemyMove_Tick(object sender, EventArgs e)
    {

        if (menu.cmbox_Level.Text.Equals("Easy"))
        {
            m_menu.EnemyTank.Left += 2;
        }
    }