簡體   English   中英

如何使用計時器移動代碼期間創建的按鈕

[英]How to move buttons created during code with a timer

對於我目前正在編寫的代碼,我有一個計時器,它會在表單邊緣產生按鈕。 我希望按鈕然后移向屏幕的中心 - 想想小行星 - 但不知道如何實現這一點。 在此先感謝您的幫助! 我的代碼到目前為止:

   private void timer1_Tick(object sender, EventArgs e)
    {
        Timer newtimer = new Timer();
        newtimer.Interval = 100;
        newtimer.Start();





        Button enemybutton = new Button();
        int sidepick = rnd.Next(1, 5);
        if(sidepick == 1)
        {
            enemybutton.Left = rnd.Next(1, 15);
            enemybutton.Top = rnd.Next(1, 700);
        }

      else  if (sidepick == 2)
        {
            enemybutton.Left = rnd.Next(1, 1000);
            enemybutton.Top = rnd.Next(1, 15);
        }

       else if (sidepick == 3)
        {
            enemybutton.Left = rnd.Next(1,1315);
            enemybutton.Top = rnd.Next(650,665);
        }
        if (sidepick == 4)
        {
            enemybutton.Left = rnd.Next(1300,1315);
            enemybutton.Top = rnd.Next(1,650);
        }
        enemiesSpawned++;
        if(enemiesSpawned == levelsBeat)
        {
            levelsBeat++;
            enemiesSpawned = 0;
            timer1.Stop();
        }


        enemybutton.Height = 64;
        enemybutton.Width = 64;
        Controls.Add(enemybutton);

    }

我建議收集List所有衍生按鈕以供將來參考。

Random rnd = new Random();
List<Button> ButtonList = new List<Button>();
private void timer_spawn_Tick(object sender, EventArgs e)
{

    Button enemybutton = new Button();
    enemybutton.Click += Enemybutton_Click;

    int sidepick = rnd.Next(1, 5);

    switch (sidepick)
    {
        case 1:
            enemybutton.Left = rnd.Next(1, 15);
            enemybutton.Top = rnd.Next(1, 700);
            break;
        case 2:
            enemybutton.Left = rnd.Next(1, 1000);
            enemybutton.Top = rnd.Next(1, 15);
            break;
        case 3:
            enemybutton.Left = rnd.Next(1, 1315);
            enemybutton.Top = rnd.Next(650, 665);
            break;
        case 4:
            enemybutton.Left = rnd.Next(1300,1315);
            enemybutton.Top = rnd.Next(1, 650);
            break;
        default:
            break;
    }

    enemybutton.Height = 64;
    enemybutton.Width = 64;
    Controls.Add(enemybutton);

    ButtonList.Add(enemybutton);  

    enemiesSpawned++;
    if(enemiesSpawned == levelsBeat)
    {
        levelsBeat++;
        enemiesSpawned = 0;
        timer1.Stop();
    }

}

然后,您可以為移動部件使用第二個計時器,並訪問List的按鈕以移動它們。 只需計算每個按鈕的新Location

private void timer_move_Tick(object sender, EventArgs e)
{            
    foreach (var button in ButtonList)
    {
        button.Location = CalculateMove(button.Location);
    }
}

private Point CalculateMove(Point currentLocation)
{
    Point center = new Point(this.Width / 2, this.Height / 2);
    Point moveDestination = new Point();
    int stepsize = 20;

    moveDestination.X = currentLocation.X < center.X ? currentLocation.X + stepsize : currentLocation.X - stepsize;
    moveDestination.Y = currentLocation.Y < center.Y ? currentLocation.Y + stepsize : currentLocation.Y - stepsize;

    return moveDestination;
}

這是一個非常簡單的運動計算。 但為了簡單地移動它的工作原理。 我猜你可以調出一個更好的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM