[英]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.